0

我定义了一个广义线性模型如下:

glm(formula = ParticleCount ~ ParticlePresent + AlgaePresent + 
ParticleTypeSize + ParticlePresent:ParticleTypeSize + AlgaePresent:ParticleTypeSize, 
family = poisson(link = "log"), data = PCB)

我有以下重要的互动

                                 Df  Deviance  AIC  LRT Pr(>Chi)   
<none>                               666.94  1013.8                  
ParticlePresent:ParticleTypeSize  6  680.59  1015.4 13.649 0.033818 * 
AlgaePresent:ParticleTypeSize     6  687.26  1022.1 20.320 0.002428 **

我正在尝试进行事后测试(Tukey)来比较使用lsmeans包的 ParticleTypeSize 的交互。但是,一旦我继续,我就会收到以下消息:

library(lsmeans)
leastsquare=lsmeans(glm.particle3,~ParticleTypeSize,adjust ="tukey")

Error in `contrasts<-`(`*tmp*`, value = contrasts.arg[[nn]]) : 
  contrasts apply only to factors

我通过应用检查了 ParticleTypeSize 是否是一个有效因素:

 l<-sapply(PCB,function(x)is.factor(x))
 l
      Sample     AlgaePresent  ParticlePresent ParticleTypeSize 
        TRUE            FALSE            FALSE             TRUE 
   ParticleCount 
       FALSE 

我很困惑,不确定如何纠正这个错误信息。任何帮助将非常感激!

4

1 回答 1

0

当您指定的变量不是一个因素时,就会发生该错误。您测试并发现它是,所以这是一个谜,我只能猜测数据在您拟合模型后发生了变化。因此,请尝试使用当前数据集重新拟合模型。

说了这么多,我质疑你想要做什么。首先,您ParticleTypeSize与其他两个预测变量进行了交互,这意味着可能建议查看该因子的边际均值 (lsmeans)。存在相互作用的事实意味着这些均值的模式会根据其他变量的值而变化。

其次,AlgaePresent真的ParticlePresent 数字变量吗?从他们的名字来看,他们似乎应该是因素。如果它们确实是指标(0 和 1),那没关系,但如果您使用的函数(如lsmeans以截然不同的方式处理因子和协变量),则将它们编码为因子仍然更清晰。

顺便说一句,lsmeans包正在被弃用,而它的继任者emmeans包正在发生新的发展。

于 2018-04-14T14:42:16.937 回答