我目前正在使用lme4估计一个层次线性模型(HLM).我的整个数据集有367个观测值.LME4使用341个观测值估计了我的模型--我认为其中一些由于数据缺失而被删除.然而,当我对模型变量的完整 case 求和时,我得到了337个观察结果.这使得当模型的长度与数据集不同时,很难对假设进行测试.

There is a discrepancy between complete cases and the observations 'used' by lme4.

  1. 为什么lme4会使用4个不完整的 case ?
  2. 我如何找出lme4正在使用哪些确切的观测(作为ID #)?

如上所述,我try 从我的主数据集中删除缺失的数据,假设lme4按列表删除大小写.我已经try 判断每个变量是否不匹配,以确定lme4是否只是在测试某个变量,但没有一个与lme4的S的输出估计值341匹配.

如果需要,我可以提供匿名数据集-但希望有一些我不知道的容易的东西!

推荐答案

最明显的原因是,lme4(内部model.frame)只根据模型中实际使用的变量来判断完整性.模型公式中没有包含的变量中有NA个值吗?

(不管它的价值是什么,如果您要用不同的预测值子集来拟合一系列模型,并希望这些模型具有可比性,那么这个默认设置也意味着过滤完整 case first的完整数据集是一个好主意.)

示例:

library(lme4)
ss <- sleepstudy
ss$Days[c(1, 4, 10)] <- NA
ss$extra <- 1
ss$extra[c(4, 20, 25)] <- NA
nrow(ss)  ## 180
sum(complete.cases(ss))  ## 175; drops obs with missing `extra`
m <- lmer(Reaction ~ Days + (1|Subject), ss, na.action = na.omit)
mf <- model.frame(m)
nrow(mf)  ## 177; ignores variables not in the model

删除了哪些行?有两种判断方法:

attr(mf, "na.action")
 1  4 10 
 1  4 10 
attr(,"class")
[1] "omit"
setdiff(rownames(ss), rownames(mf))
[1] "1"  "4"  "10"

相当于内部代码的是

nrow(model.frame(Reaction ~ Days + Subject, ss))  ## 177

(处理公式,以便将随机效应分组变量也包含在公式中,以排除不完整的情况)

R相关问答推荐

从多个前置日期中获取最长日期

如何在ggplot 2线性图的每个方面显示每个组的误差条?

R:连接值,而不是变量?

然后根据不同的列值有条件地执行函数

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

如何对2个列表元素的所有组合进行操作?

R中边际效应包中Logistic回归的交互作用风险比

随机 Select 的非NA列的行均数

如何在AER::ivreg中指定仪器?

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

如果满足条件,则替换列的前一个值和后续值

每行不同列上的行求和

如何创建一个由一个连续变量和一个因素变量组成的复杂方框图?

随机生成样本,同时在R内的随机样本中至少包含一次所有值

在不带max()的data.table中按组查找最后一个元素

如何在R中添加标识连续日期的新列

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别

使用点图调整离散轴比例

通过不完全重叠的多个柱连接

如何在R曲线图弹出窗口中更改r和theta标签