0

我有一个关于 R 中的多级回归模型的问题,特别是如何为我的 2 级“度量”添加预测变量。

请考虑以下示例(这不是真实的数据集,因此这些值在现实中可能没有多大意义):

date        id    count    bmi    poll
2012-08-05  1     3        20.5   1500
2012-08-06  1     2        20.5   1400
2012-08-05  2     0        23     1500
2012-08-06  2     3        23     1400

数据包含

  • 不同的人(“id”……所以是两个人)
  • 每个人的体重指数(“bmi”,因此它不会在 id 内变化)
  • 每个人在特定日期出现的心脏问题数量(“计数”)。因此,第 1 个人在 8 月 5 日遇到了三个问题,而第 2 个人在当天没有任何困难/问题
  • 当天测量的污染物(如臭氧或二氧化硫)的数量

我的一般研究问题是,污染物的数量是否会影响人群中心脏病的数量。第一步,这可能是一个简单的线性回归:lm(count ~ poll)

但是,可以说我每天的数据都集中在人体内。我有来自第 1 个人的两个措施和来自第 2 个人的两个措施。

所以我的基本想法是建立一个以人(id)作为我的 2 级变量的多级模型。

我使用 nlme 包进行此分析:

lme(fixed=count ~ poll, random = ~poll|id, ...)

到目前为止没有问题。

然而,对第二层的真正影响可能不仅仅来自于我有不同的人这一事实。相反,一个人体内的影响更有可能来自他或她的 bmi(以及许多其他与人相关的变量,如年龄、吸烟量等)。

使长话短说:

如何在 lme 函数中指定这样的二级预测变量?

或者换句话说:我如何建立一个模型,其中心脏问题和污染之间的关系是不同的/聚集的/由一个人的体重指数调节(正如我所说的,可能还受到这个人的吸烟量或年龄)

不幸的是,我不知道如何告诉 R,我想要什么。我知道 oif 其他软件(其中一个叫做HLM),它能够做我想做的事情,但我很确定 R 也可以这样做......

所以,非常感谢您的帮助!

德申

4

1 回答 1

1

简短的回答:您不必这样做,只要您正确指定随机效果即可。该lme函数会自动检测哪些变量是 1 级或 2 级。考虑这个示例,使用Oxboys每个对象测量 9 次。暂时让我用lmerlme4包里吧。

library(nlme)
library(dplyr)
library(lme4)
library(lmerTest)

Oxboys %>%                                                #1
  filter(as.numeric(Subject)<25) %>%                      #2
  mutate(Group=rep(LETTERS[1:3], each=72)) %>%            #3
  lmer(height ~ Occasion*Group + (1|Subject), data=.) %>% #4     
  anova()                                                 #5  

在这里,我选择了 24 个主题(#2)并将它们分成 3 组(#3)以使这些数据平衡。现在,本研究的设计是一个裂区设计,其中重复测量因子(场合)具有 q=9 水平,受试者间因子(组)具有 p=3 水平。每组有 n=8 名受试者。场合是 1 级变量,而组是 2 级变量。

在 #4 中,我没有指定哪个变量是级别 1 或 2,但lmer会为您提供正确的输出。我怎么知道它是正确的?让我们检查固定效应的多级模型的自由度。如果您的数据是平衡的,则本文中使用的 Kenward-Roger 近似值lmerTest将为您提供准确的 dfs 和 F/t 比率。也就是说,在此示例中,用于检验 Group、Occasion 及其交互的 dfs 应分别为 p-1=2、q-1=8 和 (p-1)*(q-1)=16。Subject 错误项的 df 为 (n-1)p = 21,Subject:Occasion 错误项的 df 为 p(n-1)(q-1)=168。事实上,这些是我们从输出中得到的“准确”值(#5)。anova

我不知道lme使用什么算法来近似 dfs,但lme确实给了你相同的 dfs。所以我假设它是准确的。

于 2014-08-06T15:19:10.793 回答