首页 > 解决方案 > R 中的 emmeans 函数出错。如何解决?

问题描述

我有一个这样的文件:

在此处输入图像描述

我正在使用此数据集来预测线性混合模型,并且我想使用该函数emmeans来计算我的条件的估计均值。我正在使用的代码在这里:

newtab5 <- read.csv(file="sliding_LMM_test.csv", header=T, sep=",")
head(newtab5)

library(lmerTest)

model <- lmer(formula = data1 ~ flabel + (1 | whichFragments), data = newtab5, control=lmerControl(check.nlev.gtr.1 = "ignore"))
sfit <-summary(model)
sfit$coefficients[,2][2]
sfit$coefficients[,5][2]

library(emmeans)

means <- emmeans(model, "flabel")
test<-summary(means)

我有这个错误:

>  Error in t(ZZ) %*% EE :Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90

当 which fragment 列具有相同的值时,该emmeans函数似乎不起作用。

你知道有什么方法可以跳过这个或emmeans为这种情况工作吗?

先感谢您

标签: remmeans

解决方案


这是pbkrtest包中出现的错误,在计算 Kenward-Roger 自由度(这是lmerMod对象的默认自由度方法)所需的调整后的协方差矩阵时。几乎可以肯定,这与拟合模型时遇到的未公开警告消息有关:

> model <- lmer(formula = data1 ~ flabel + (1 | whichFragments), 
+    data = data, control=lmerControl(check.nlev.gtr.1 = "ignore")) 
Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
   Hessian is numerically singular: parameters are not uniquely determined

令人惊讶的是(对我来说),如果您使用其他一些 df 方法,例如 Satterthwaite,您仍然可以获得结果:

> emmeans(model, "flabel", mode = "satterth")
 flabel emmean    SE   df lower.CL upper.CL
 con1    0.599 0.147 0.26    -3879     3880
 con2    0.107 0.147 0.26    -3880     3880

Degrees-of-freedom method: satterthwaite 
Confidence level used: 0.95

拥有 0.26 的自由度并不算多:看看 CI。

就像一般观察一样,当您尝试仅使用一个观察来估计方差时,您总是在自找麻烦。whichFragments就方差而言,这就是该模型试图做的事情。我当然希望您在实际研究中拥有比这更多的数据。

顺便说一句,如果你想要的只是手段,你可以计算手段:

> with(data, tapply(data1, flabel, mean))

  con1   con2 
0.5991 0.1072 

推荐阅读