与@mtoto 类似,我也不熟悉library(plm)
or library(gplm)
。但是 predict 方法plm
是可用的,只是没有导出。pglm
没有预测方法。
R> methods(class= "plm")
[1] ercomp fixef has.intercept model.matrix pFtest plmtest plot pmodel.response
[9] pooltest predict residuals summary vcovBK vcovHC vcovSCC
R> methods(class= "pglm")
no methods found
值得注意的是,我不明白您为什么对工资数据使用泊松模型。它显然不是泊松分布,因为它采用非整数值(如下)。如果您愿意,您可以尝试负二项式,但我不确定它是否适用于随机效应。但是你可以使用MASS::glm.nb
例如。
> quantile(Unions$wage, seq(0,1,.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
0.02790139 2.87570334 3.54965422 4.14864865 4.71605855 5.31824370 6.01422463 6.87414349 7.88514525 9.59904809 57.50431282
解决方案1:使用plm
punions$p <- plm:::predict.plm(fit1, punions)
# From examining the source code, predict.plm does not incorporate
# the random effects, so you do not get appropriate predictions.
# You just get the FE predictions.
ggplot(punions, aes(x=exper, y=p)) +
geom_point() +
facet_wrap(rural ~ married)
解决方案 2 -lme4
或者,您可以从包中获得类似的拟合,该lme4
包确实定义了 predict 方法:
library(lme4)
Unions$id <- factor(Unions$id)
fit3 <- lmer(wage ~ exper + rural + married + (1|id), data= Unions)
# not run:
fit4 <- glmer(wage ~ exper + rural + married + (1|id), data= Unions, family= poisson(link= "log"))
R> fit1$coefficients
(Intercept) exper ruralyes marriedyes
3.7467469 0.3088949 -0.2442846 0.4781113
R> fixef(fit3)
(Intercept) exper ruralyes marriedyes
3.7150302 0.3134898 -0.1950361 0.4592975
我没有运行泊松模型,因为它显然被错误地指定了。您可以进行某种变量转换来处理它,或者可能是负二项式。无论如何,让我们完成这个例子:
# this has RE for individuals, so you do see dispersion based on the RE
Unions$p <- predict(fit3, Unions)
ggplot(Unions, aes(x=exper, y=p)) +
geom_point() +
facet_wrap(rural ~ married)