民间,
我试图使用来自{nlme}包的lme()在R中拟合一个具有许多固定效果和其他随机效果的模型(必须是{nlme},因为我还想要包含AR(1)相关矩阵后来)。然而,该模型非常慢(由于固定效应的数量巨大)。
现在,我们知道运行带有虚拟变量的模型在数字上,但不是计算上,相当于在去模糊数据上运行模型(在估算范围内)。因此,以下两个模型导致相同的结果,但第一个模型运行得更快:
# Load library
library(nlme) # For lme()
library(lfe) # For demeanlist()
# Create reproducible dummy dataset
set.seed(1)
dat <- data.frame(y=rnorm(1000), x=rnorm(1000), cluster1=sample(LETTERS, 1000, replace=TRUE), cluster2=sample(LETTERS, 1000, replace=TRUE))
# Create de-meaned dataset
dat_demean <- demeanlist(dat[,c("y", "x")], list(dat$cluster1))
dat_demean$cluster2 <- dat$cluster2 # Copy cluster2 column over to de-meaned data
# Model 1: Fixed effect on cluster1
orig <- lm( y ~ x + cluster1, data=dat)
deme <- lm( y ~ x - 1, data=dat_demean)
# This works as expected. Coefficients are exactly identical (SE are wrong and need to be fixed).
all.equal( coef(orig)["x"], coef(deme)["x"] )
R> [1] TRUE
当我们想要在第二个分组变量上另外包含随机效果时,可以做类似的事吗?以下是我的尝试不起作用。
# Model 2: Fixed effect on cluster1 and additional random effect for cluster2
orig <- lme( y ~ x + cluster1, random=~1|cluster2, data=dat)
deme <- lme( y ~ x -1, random=~1|cluster2, data=dat_demean)
# This does not work - coefficients are different
fixef(orig)["x"]
R> x
R> -0.005885881
fixef(deme)["x"]
R> x
R> -0.006169549
all.equal(fixef(orig)["x"], fixef(deme)["x"])
R> [1] "Mean relative difference: 0.04819478"
我错过了什么或我做错了什么?或者只是不能简单地在随机数据上拟合随机效应模型?
干杯