回归模型如何处理因子变量?

时间:2016-04-11 17:45:25

标签: r regression lm mixed-models nlme

假设我有一个包含因子和响应变量的数据。 我的问题:

  • 线性回归和混合效应模型如何与因子变量一起使用?
  • 如果我为因子变量(m3 and m4)的每个级别设置了单独的模型,那么它与模型m1m2有何不同?
  • 哪一个是最佳模式/方法?

例如,我在Orthodont包中使用nlme数据。

library(nlme)
data = Orthodont
data2 <- subset(data, Sex=="Male")
data3 <- subset(data, Sex=="Female")

m1 <- lm (distance ~ age + Sex, data = Orthodont) 
m2 <- lme(distance ~ age , data = Orthodont, random = ~ 1|Sex)

m3 <- lm(distance ~ age, data= data2
m4 <- lm(distance ~ age, data= data3)

1 个答案:

答案 0 :(得分:2)

Q1:线性回归和混合效应模型如何与因子变量一起使用?
A1:因子被编码为虚拟变量(1 =真,0 =假)。
例如,模型1的系数为:

coef(m1)    #lm( distance ~ age + Sex)
#(Intercept)         age   SexFemale 
# 17.7067130   0.6601852  -2.3210227 

因此,计算距离:
距离= 17.71 + 0.66 *年龄 - 2.32 *性别女性
性别女性为男性为0,女性为1。这简化为:
男:距离= 17.71 + 0.66 *年龄
女性:距离= 15.39 + 0.66 *年龄

如果模型有更多类别(例如超重,健康,体重不足),则相应地添加虚拟变量:
R代码:lm(距离〜年龄+ weightStatus)
计算:距离=年龄+ weightIsOver + weightIsHealthy + weightIsUnder
创建每个权重类型的三个单独系数,并根据个人的权重类型乘以0或1。

Q2:如果我为因子变量(m3m4)的每个级别设置了单独的模型,那么它与模型m1和{{1 }}吗
A2:斜率和截距根据您的模型而变化。
m1是多元线性回归(MLR),其中截距根据性别而变化,但年龄的斜率是相同的。我们也可以将其称为随机斜率。线性混合效应(LME)模型m2还指定了按性别(m2)变化的截距。
m3和m4~随机斜率和随机截距模型,因为数据是分开的。

让我们指定一个随机斜率和随机截距的LME:

1|Sex

组合系数可以让我们检查模型的结构:

m2a <- lme(distance ~ age, data = Orthodont, random= ~ age | Sex,
            control = lmeControl(opt="optim"))  
            #Changed the optimizer to achieve convergence

问题3:哪一个是最佳模式/方法?
A3:这取决于具体情况,但可能是混合效应模型。

在您的示例中,m3和m4彼此没有关系,并且每个性别本身具有不同的斜率。可以检查LME模型以确定是否有必要进行随机斜率(例如#Combine the model coefficients coefs <- rbind( coef(m1)[1:2], coef(m1)[1:2] + c(coef(m1)[3], 0), #female coefficient added to intercept coef(m2), coef(m2a), coef(m3), coef(m4)); names(coefs) <- c("intercept", "age") model.coefs <- data.frame( model = paste0("m", c(1,1,2,2,"2a", "2a",3,4)), type = rep(c("MLR", "LME randomIntercept", "LME randomSlopes", "separate LM"), each=2), Sex = rep(c("male","female"), 4), coefs, row.names = 1:8) model.coefs # model model2 Sex intercept age #intercept & slope #1 m1 MLR male 17.70671 0.6601852 #different same #2 m1 MLR female 15.38569 0.6601852 #3 m2 LME randomIntercept male 17.67197 0.6601852 #different same #4 m2 LME randomIntercept female 15.43622 0.6601852 #5 m2a LME randomSlopes male 16.65625 0.7540780 #different different #6 m2a LME randomSlopes female 16.91363 0.5236138 #7 m3 separate LM male 16.34062 0.7843750 #different different #8 m4 separate LM female 17.37273 0.4795455 )。当您有多个级别(例如学校内的班级学生)和重复测量(同一主题或跨时间的多个测量)时,混合效果模型是多功能的。您还可以使用这些模型指定covariance structures

为了可视化这些不同的模型,让我们看一下anova(m2, m2a)数据:

Orthodont

Orthodont distance vs age Circles =原始数据,Squares =平均值。距离似乎随着年龄呈线性增加。男性的距离比女性高。斜坡也可能因性别而异,与男性相比,女性与年龄的距离增加较小。 (注意:原始数据在x轴上略微躲避,以避免过度绘图。)

将我们的模型添加到数据并放大:

library(ggplot)
gg <- ggplot(Orthodont, aes(age, distance, fill=Sex)) + theme_bw() +
        geom_point(shape=21, position= position_dodge(width=0.2)) +  
        stat_summary(fun.y = "mean", geom="point", size=8, shape=22, colour="black" ) +
        scale_fill_manual(values = c("Male" = "black", "Female" = "white"))

model coefficients

在这里,我们看到具有随机截距的LME模型类似于MLR模型。具有随机截距和随机斜率的LME类似于子集化数据上的单独LM。

最后,以下是如何使用gg1 <- gg + geom_abline(data = model.coefs, size=1.5, aes(slope = age, intercept = intercept, colour = type, linetype = Sex)) gg1 + coord_cartesian(ylim = c(21, 27)) #zoom in 包制作m2的等效内容:

lme4

更多资源:
(Generalized) Linear Mixed Models FAQ
Comparing nlme and lme4使用m2 <- lme(distance ~ age , data = Orthodont, random = ~ 1|Sex) library(lme4) m5 <- lmer(distance ~ age + (1|Sex), data = Orthodont) #same as m2 数据。