我想知道是否可以使用函数
lme
(包nlme)和pdIdent
行将简单的混合模型分析“翻译”为lmer
(包lme4)的等效分析。
简而言之,我正在寻找使用
lmer
函数进行以下分析的简单副本。数据来自网络上的另一个例子:
library(nlme)
Q <- factor(c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2))
R <- factor(c(1, 1 , 2, 2, 3, 3, 1, 1, 2, 2, 3, 3))
y <- c(51.43, 51.28, 50.93, 50.75, 50.47, 50.83, 51.91, 52.43, 52.26, 52.33, 51.58, 51.23)
DS <- data.frame(Q, R, y)
DS$Q <- as.factor(DS$Q)
DS$R <- as.factor(DS$R)
lme3 <- lme(y ~ Q, random = list(R = pdIdent(~ Q - 1)), data = DS)
summary(lme3)
这会产生
0.3979
和 Q1
的方差
Q2
在 2x3 矩阵上。随机效应是
Random effects:
Formula: ~Q - 1 | R
Structure: Multiple of an Identity
Q1 Q2 Residual
StdDev: 0.3979283 0.3979283 0.2202835
我知道在
> ranef(lme3)
Q1 Q2
1 0.35263487 0.1849888
2 -0.09393962 0.2933806
3 -0.25869525 -0.4783694
中,通过为
lmer
-Interaction指定随机截距可以接近
Q:R
产生的交互项方差等于 lme 计算值
lmer3 <- lmer(y ~ Q + (-1 + 1 | Q:R), data = DS)
summary(lmer3)
和 1x6 随机效应矩阵:
Random effects:
Groups Name Variance Std.Dev.
Q:R (Intercept) 0.15835 0.3979
Residual 0.04852 0.2203
Number of obs: 12, groups: Q:R, 6
但是,我不太确定这两个模型是否相同,例如,必须在第一个模型中检查两次随机效应的正态性,但在第二个模型中只需检查一次。那么,对这些结果和改进文案有什么建议吗?也许使用虚拟变量?
$`Q:R`
(Intercept)
1:1 0.35263436
1:2 -0.09393948
1:3 -0.25869488
2:1 0.18498852
2:2 0.29338022
2:3 -0.47836874
with conditional variances for “Q:R”
粗略地说,这是认为两个模型相同的“充分”条件。 (但是,不同的包可能会从对数似然中删除与参数无关的常量,因此即使对于等效模型,您也可能从不同的包中获得不同的对数似然......)
您还可以通过这种方式获得等效模型:
> logLik(lme3)
'log Lik.' -4.889587 (df=4)
> logLik(lmer3)
'log Lik.' -4.889587 (df=4)
最后,尚不清楚您的
DS <- transform(DS, QR = interaction(Q,R))
summary(lme(y~Q, random = ~1|QR, data = DS))
在
-1 + 1
通话中正在做什么:
lmer
应该可以正常工作。