我正在循环一个超过20+ y个变量的lmer函数,其中包含159行观察值。当我在循环中运行一个lmer函数时,分母的自由度就丢失了。在循环外(或者即使我在循环内指定一个y变量),分母df是预期的。
我有一个包含20个y变量的df,用于4个处理的两个室中的植物(在两个处理中重复)。
lmer_test <- lmer(leaves_mean~Treatment + (1|Chamber), data = df)
aov_test <- anova(lmer_test)
aov_test
这给:
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Treatment 97.593 32.531 3 153 1.1966 0.3131
我有一个循环:
for(u in colnames(df)[6:ncol(df)])
{
Y_variable_Rex <- names(df[u])
lmer_u_Rex <-lmer(get(u) ~ Treatment + (1|Chamber), data = df)
aov_u_Rex <- anova(lmer_u_Rex)
aov_u_Rex
}
,
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Treatment 208420 69473 3 4.6406e-14 3.5911e+31 1
如果我在循环外指定确切的代码(用"leaves_mean"替换get(u))…我得到正确的结果:
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Treatment 97.593 32.531 3 153 1.1966 0.3131
"get_u"规范应该在循环中产生完全相同的结果。发生了什么使得分母自由度不同(0)?
我回答了我自己的问题…循环为不同的变量(最后一个)报告分母df。该列中有缺失的值,因为这是采样值的y变量,有许多缺失的行。我能够重现错误,然后在循环中解决它。我在这里接近调试,就像你可能在Matlab循环中做的那样(逐步通过每一行),这是而不是修复R循环的好方法。感谢你阅读这个问题并考虑回答!