1

使用这个虚拟数据集:

dummy.data <- data.frame(vaccinated = factor(rep(c("yes", "no"), each = 64)),
  infected = factor(rep(c("yes", "no"), each = 32)),
  animal = factor(rep(1:16, each = 8)),
  tissue = factor(c("blood", "liver", "kidney", "brain")),
  value = runif(128)
  )

这有效:

library("nlme")
nlme.model <- as.formula(value ~ vaccinated * infected * tissue)
nlme.fit <- lme(fixed = nlme.model, random = ~1|animal, data = dummy.data)
library("phia")
int.nlme <- interactionMeans(nlme.fit)
plot(int.nlme)

但这不会:

library("lme4")  
lmer.model <- as.formula(value ~ vaccinated * infected * tissue + (1 | animal))
lmer.fit <- lmer(formula = lmer.model, data = dummy.data)
library("phia")
int.lmer <- interactionMeans(lmer.fit)
plot(int.lmer)

对于后者,我只得到

Error in t.default(M) : argument is not a matrix

plot命令。

当我查看int.nlmeint.lmerwith 时str,它们看起来确实不同,但我无法弄清楚问题所在。非常感谢任何输入。

4

2 回答 2

4

该错误似乎是从生成的phia:::poolse,因此可以复制:

> phia:::poolse(int.nlme, "adjusted mean","vaccinated")
vaccinated
        no        yes 
0.04483019 0.04483019 
> phia:::poolse(int.lmer, "adjusted mean","vaccinated")
Error in t.default(M) : argument is not a matrix

还在挖...

我总结它是phia包中的一个错误,它忽略了这一点:

在编写使用 Matrix 包的 R 包时,为什么我必须指定 Matrix::t() 而不仅仅是 t()?

作为一种解决方法,并增加令人敬畏,将“covmat”属性int.lmerMatrix类转换为标准 Rmatrix类:

> int.lmer <- interactionMeans(lmer.fit)
> plot(int.lmer)
Error in t.default(M) : argument is not a matrix
> attr(int.lmer, "covmat") = lapply(attr(int.lmer,"covmat"),as.matrix)
> plot(int.lmer)

情节然后起作用。

于 2015-07-27T15:43:57.930 回答
1

我确认这实际上是错误的原因:lmer 的协方差矩阵必须转换为“正常”矩阵才能使绘图起作用。修复这是我的待办事项列表中的优先事项,我想做一系列修复,包括今年夏天的修复。但是,如果有人想为加速更新做出贡献,您可以向 Github 中的存储库提出拉取请求:

https://github.com/heliosdrm/phia

于 2015-08-01T20:20:33.153 回答