我使用lmer软件包运行混合模型,当我使用anova函数检索anova结果时,一切正常。但是,当我尝试计算eta平方时,始终出现以下错误。有什么想法吗?
Dyestuff
是lmerTest
包中可用的数据集。一世
使用1.1-21版的“ lme4”软件包。软件包“ lmerTest” 3.1-0版和软件包“ sjstats” 0.17.7版
fm1 <- lmer(Yield ~ 1 + (1|Batch), Dyestuff)
am <- anova(fm1, test="F")
eta_sq(am, partial = FALSE, ci.lvl = NULL, n = 1000, method = c("dist", "quantile"))
错误:结果2不是长度为1的原子向量
另外:警告消息: 在tidy.anova(model)中: 无法识别或转换ANOVA输出中的以下列名称:NumDF,DenDF
答案 0 :(得分:3)
tl; dr
sjstats
中的eta方计算在内部期望anova()
方法将返回一个表,该表包含对应于残差的行。 ?anova.lmerModLmerTest
返回一个表,其中仅包含与固定效应项相对应的行(而不是剩余方差)。
这可能更适合sjstats issues list,但我将使用此空间来分享到目前为止我所发现的内容。
lm()
拟合(如果有的话应该可以工作):fm0 <- lm(Yield ~ 1 , Dyestuff)
am0 <- anova(fm0, test="F")
eta_sq(am0)
错误:结果2必须是单个double,而不是长度为0的double向量。
运行rlang::last_error()
以查看错误发生的位置。
lmer(Test)
模型也会失败:fm2 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
am2 <- anova(fm2, test="F")
eta_sq(am2)
错误:结果2必须是单个double,而不是长度为0的double向量。
运行rlang::last_error()
以查看错误发生的位置。
另外:警告消息: 在tidy.anova(model)中: 无法识别或转换ANOVA输出中的以下列名称:NumDF,DenDF
(据我所知警告消息实际上是无害的。)
此问题的最接近原因似乎是内部sjstats:::aov_stat_summary()
函数针对SSQ / MSQ / etc返回仅包含一行的表。由于Days
;对于剩余的SSQ / MSQ / etc,还应该有一行。
sjstats:::aov_stat_summary(am3)
## term sumsq meansq NumDF DenDF statistic p.value
## 1 Days 30030.94 30030.94 1 16.99998 45.85296 3.263825e-06
问题在于,术语的数量在内部计算为(nrow(aov.sum)-1
),在这里没有意义。
将此与我们使用1+Days
的{{1}}模型得到的结果进行比较:
lm()
深入研究,我们可以看到,这是混合模型报告fm3 <- lm(Reaction ~ Days , sleepstudy)
am3 <- anova(fm3, test="F")
sjstats:::aov_stat_summary(am3)
## term df sumsq meansq statistic p.value
## 1 Days 1 162702.7 162702.652 71.46442 9.894096e-15
## 2 Residuals 178 405251.6 2276.694 NA NA
结果的直接结果:
anova()
请注意,没有“剩余”行。相反:
anova(fm2)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Days 30031 30031 1 17 45.853 3.264e-06 ***
答案 1 :(得分:0)
我认为,如果您使用sjstats软件包中的anova_stats函数,那么它将起作用。
fm2 <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy)
am2 <- anova_stats(fm2, test="F")