119 多层次模型
19.1 简介
多层次模型(也称为层次线性模型或混合效应模型)在处理具有嵌套结构的数据时非常有用。例如,在教育数据中,学生嵌套在班级中,班级嵌套在学校中。多层次模型允许我们同时建模这些不同层次的影响。
19.2 多层次模型的基本结构
多层次模型的基本形式可以表示为:
其中,是第 j个组中第 i个观测值,是对应的预测变量,是组级随机效应, 是个体级误差。
在Python中,我们可以使用statsmodels
库来拟合多层次模型。
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
# 生成模拟数据
np.random.seed(42)
n_groups = 10
group_size = 20
groups = np.repeat(np.arange(n_groups), group_size)
X = np.random.randn(n_groups * group_size)
Z = np.random.randn(n_groups)
y = 1 + 0.5 * X + Z[groups] + np.random.randn(n_groups * group_size) * 0.1
# 将数据整理为DataFrame
data = pd.DataFrame({'y': y, 'X': X, 'group': groups})
# 构建多层次模型
model = smf.mixedlm("y ~ X", data, groups=data["group"])
result = model.fit()
print(result.summary())
19.3 模型解释
在多层次模型中,系数可以分为固定效应和随机效应。固定效应解释的是群体水平的平均效应,而随机效应解释的是组间差异。
在模型输出中,Intercept
和X
对应的是固定效应的系数,而groups
对应的是随机效应的标准差。
19.4 复杂的多层次结构
当数据具有更复杂的嵌套结构时,多层次模型可以进一步扩展。例如,我们可以引入多个随机效应来捕捉不同层次的影响。
# 生成更复杂的模拟数据
Z2 = np.random.randn(n_groups)
y = 1 + 0.5 * X + Z[groups] + Z2[groups] + np.random.randn(n_groups * group_size) * 0.1
data = pd.DataFrame({'y': y, 'X': X, 'group1': groups, 'group2': groups})
# 构建多层次模型,包含两个随机效应
model = smf.mixedlm("y ~ X", data, groups=data["group1"], re_formula="1 + X")
result = model.fit()
print(result.summary())
19.5 应用案例:教育数据中的多层次模型
多层次模型的一个经典应用是在教育数据中建模学生成绩。学生嵌套在班级中,班级嵌套在学校中。通过多层次模型,我们可以同时估计班级和学校的效应,并分析不同层次的变异来源。