我在某些数据上运行LMEM(线性混合效果模型),并将模型(成对)与anova函数进行比较。但是,对于特定的数据子集,我会得到无意义的结果。
这是我的完整模特:
m3_full <- lmer(totfix ~ psource + cond + psource:cond +
1 + cond | subj) + (1 + psource + cond | object), data, REML=FALSE)
这是我将它与之比较的模型:(基本上放弃了其中一个主要效果)
m3_psource <- lmer (totfix ~ psource + cond + psource:cond -
psource + (1 + cond | subj) + (1 + psource + cond | object),
data, REML=FALSE)
运行anova()
函数(anova(m3_full, m3_psource)
返回Chisq = 0,pr&gt;(Chisq)= 1
我正在为其他一些LMEM做同样的事情,一切似乎都很好,只是这个特殊的响应值给了我奇怪的卡方和概率值。任何人都知道为什么以及如何解决它?任何帮助将不胜感激!
答案 0 :(得分:1)
这不是一个特定于混合模型的问题:相反,它与R从公式构建模型矩阵的方式有关(可能还有模型比较的逻辑)。
让我们将其缩小到
之间的比较form2 <- ~ psource + cond + psource:cond - psource
和
~cond + psource:cond
(相当于dd <- expand.grid(psource=c("A","B"),cond=c("a","b"))
)。这两个公式提供等效模型矩阵,即具有相同列数的模型矩阵,跨越相同的设计空间,并提供相同的整体拟合优度。
制作一个最小的数据集来探索:
colnames(model.matrix(form1,data=dd))
## [1] "(Intercept)" "psourceB" "condb" "psourceB:condb"
colnames(model.matrix(form2,data=dd))
## [1] "(Intercept)" "condb" "psourceB:conda" "psourceB:condb"
每个公式我们得到了什么构造变量?
## set up model matrix and drop intercept and "psourceB" column
dummies <- model.matrix(form1,data=dd)[,-(1:2)]
## d='dummy': avoid colons in column names
colnames(dummies) <- c("d_cond","d_source_by_cond")
colnames(model.matrix(~d_cond+d_source_by_cond,data.frame(dd,dummies)))
## [1] "(Intercept)" "d_cond" "d_source_by_cond"
我们得到相同数量的对比。
这个问题有两种可能的答案。
有一种思想流派(以Nelder,Venables等为代表:例如参见Venables&#39;着名的(?)但未发表的exegeses on linear models,第5部分或维基百科{{3这表示在交互条件存在的情况下尝试测试主要效果是没有意义的,这是你正在尝试做的事情。
有偶然的情况(例如,在控制前后的设计中,控制和影响之前的差异已知为零到期到实验协议)你真的想做这个比较。在这种情况下,您必须构建自己的虚拟变量并将其添加到数据中,例如
WebServer ws = new WebServer(SendResponse, "http://*:80/");
这是一件令人讨厌的事。我对这种困难的原因的猜测是,R和S之前的原作者来自思想学派#1,并且认为通常当人们试图这样做时这是一个错误;他们并没有让它变得不可能,但他们并没有竭尽全力让它变得容易。