我在20 + y变量上循环lmer函数,有159行观测值,当我在循环内运行lmer函数时,分母自由度丢失,在循环外(或者即使我在循环内指定一个y变量),分母df如预期。
我有一个df与20个y变量的植物在两个室与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
如果我将确切的代码指定为在循环之外(将get(u)替换为"leaves_mean")......我会得到正确的结果:
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)?
1条答案
按热度按时间4dbbbstv1#
我回答了我自己的问题......循环报告了 * 不同 * 变量的分母df(最后一个)。该列中有缺失值,因为它是一个 sampled 值的y变量,有许多缺失行。我能够重现错误,然后在循环中解决它。我在这里进行调试,就像您在Matlab循环中可能做的那样(逐步通过每行),这不是一个修复R循环的好方法。感谢您阅读此问题并考虑回答!