LMEM:卡方= 0,问题= 1 - 我的代码出了什么问题?

时间:2016-11-19 17:47:24

标签: r anova lme4

我在某些数据上运行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做同样的事情,一切似乎都很好,只是这个特殊的响应值给了我奇怪的卡方和概率值。任何人都知道为什么以及如何解决它?任何帮助将不胜感激!

1 个答案:

答案 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"

我们得到相同数量的对比。

这个问题有两种可能的答案。

  1. 有一种思想流派(以Nelder,Venables等为代表:例如参见Venables&#39;着名的(?)但未发表的exegeses on linear models,第5部分或维基百科{{3这表示在交互条件存在的情况下尝试测试主要效果是没有意义的,这是你正在尝试做的事情。

  2. 偶然的情况(例如,在控制前后的设计中,控制和影响之前的差异已知为零到期到实验协议)你真的想做这个比较。在这种情况下,您必须构建自己的虚拟变量并将其添加到数据中,例如

  3. WebServer ws = new WebServer(SendResponse, "http://*:80/");
    

    这是一件令人讨厌的事。我对这种困难的原因的猜测是,R和S之前的原作者来自思想学派#1,并且认为通常当人们试图这样做时这是一个错误;他们并没有让它变得不可能,但他们并没有竭尽全力让它变得容易。