R语言中lm和glm与lmer的区别
R语言中 lm(), glm(), lmer() 函数深度解析
这三个函数是R语言中用于建模的核心工具,它们在模型类型、适用范围和功能上有显著区别。以下是详细对比:
1. lm() - 线性模型
功能:拟合普通最小二乘(OLS)回归模型
适用:因变量为连续型且满足正态分布假设
特点:
# 基本语法
model_lm <- lm(y ~ x1 + x2, data = dataset)
summary(model_lm)
-
仅处理固定效应
-
假设残差独立同分布(i.i.d.)
-
输出包含回归系数、R²、p值等
典型应用:
商品价格预测、产量与施肥量关系等连续变量分析
2. glm() - 广义线性模型
功能:扩展lm(),处理非正态分布因变量
关键参数:family指定分布类型和连接函数
常见分布族:
# 不同分布族的应用
glm(y ~ x, family = gaussian) # 同lm()(默认)
glm(y ~ x, family = binomial) # 逻辑回归(二分类)
glm(y ~ x, family = poisson) # 泊松回归(计数数据)
特点:
-
通过连接函数转换响应变量(如logit, log)
-
可处理分类、计数、比例等数据类型
-
使用最大似然估计而非OLS
典型应用:
疾病预测(二分类)、客户流失分析、事故计数建模
3. lmer() - 线性混合模型
包:lme4包(需安装)
功能:处理包含固定效应 + 随机效应的层次数据
语法特征:
library(lme4)
model_lmer <- lmer(y ~ x1 + x2 + (1 | group), data = dataset)
关键区别:
-
(1 | group) 定义随机截距
-
(x1 | group) 定义随机斜率
-
默认不提供p值(需lmerTest包)
特点:
-
处理非独立数据(重复测量、分层抽样)
-
估计组间变异(如不同学校/医院的影响)
-
使用REML(限制性最大似然)估计
典型应用:
学生成绩分析(学生嵌套于班级)、临床试验(患者多次测量)
核心对比总结
| 特征 | lm() | glm() | lmer() |
| 模型类型 | 线性模型 | 广义线性模型 | 线性混合模型 |
| 因变量要求 | 连续、正态 | 任意分布 | 连续、正态 |
| 效应类型 | 仅固定效应 | 仅固定效应 | 固定+随机效应 |
| 数据结构 | 独立观测 | 独立观测 | 非独立观测(层次/重复) |
| 关键函数/包 | stats (基础包) | stats (基础包) | lme4 (需安装) |
| P值输出 | 自动提供 | 自动提供 | 需lmerTest包 |
| 典型应用场景 | 连续响应预测 | 分类/计数数据建模 | 分层数据建模 |
进阶选择指南
graph TD
A[因变量类型] --> B
A --> C
B -->|是| D
B -->|否| C
C -->|是| E[glm]
D -->|是| F[lmer]
D -->|否| G[lm]
实际案例选择:
- 预测房价(连续变量,独立观测) → lm()
-
预测疾病发生(二分类) → glm(family = binomial)
-
不同医院患者恢复情况(重复测量) → lmer()
注意:对于混合模型,建议安装lmerTest包获取p值:
library(lmerTest)
model <- lmer(y ~ x + (1|group), data)
summary(model) # 显示p值