You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中实现重复测量MANCOVA:求代码示例与工具包推荐

重复测量MANCOVA的Python实现方案

工具包推荐

  • Pingouin:面向心理学与统计分析的轻量工具包,封装了重复测量MANCOVA的直接调用接口,语法简洁易上手,适合快速实现分析需求。
  • Statsmodels:虽无直接的重复测量MANCOVA函数,但可通过构建线性混合模型(LMM)结合多变量检验实现,灵活性更强,适合需要自定义分析逻辑的场景。

代码示例

1. 使用Pingouin快速实现

首先安装依赖:

pip install pingouin

假设数据为长格式(每个被试的每一次测量对应一行),包含被试ID、组间因子、协变量、重复测量内因子及多个因变量,代码示例如下:

import pandas as pd
import pingouin as pg

# 构造示例长格式数据
data = pd.DataFrame({
    'subject_id': [1,1,1,2,2,2,3,3,3,4,4,4],
    'group': ['A','A','A','A','A','A','B','B','B','B','B','B'],
    'covariate': [10,10,10,12,12,12,9,9,9,11,11,11],
    'time_point': ['pre','mid','post','pre','mid','post','pre','mid','post','pre','mid','post'],
    'dv1': [20,25,30,18,22,26,22,27,32,19,24,28],
    'dv2': [15,18,22,13,16,20,16,19,23,14,17,21]
})

# 执行重复测量MANCOVA
rm_mancova_result = pg.rm_mancova(
    data=data,
    dv=['dv1', 'dv2'],
    within='time_point',
    between='group',
    covar='covariate',
    subject='subject_id'
)

# 输出分析结果
print(rm_mancova_result)

2. 使用Statsmodels手动实现

Statsmodels需通过虚拟变量转换+线性混合模型来处理重复测量结构,示例如下:

import pandas as pd
import statsmodels.api as sm
from statsmodels.multivariate.manova import MANOVA
from statsmodels.regression.mixed_linear_model import MixedLM

# 构造示例数据(同Pingouin示例)
data = pd.DataFrame({
    'subject_id': [1,1,1,2,2,2,3,3,3,4,4,4],
    'group': ['A','A','A','A','A','A','B','B','B','B','B','B'],
    'covariate': [10,10,10,12,12,12,9,9,9,11,11,11],
    'time_point': ['pre','mid','post','pre','mid','post','pre','mid','post','pre','mid','post'],
    'dv1': [20,25,30,18,22,26,22,27,32,19,24,28],
    'dv2': [15,18,22,13,16,20,16,19,23,14,17,21]
})

# 步骤1:多变量线性模型基础分析(暂不考虑重复测量相关性)
# 将组因子转换为虚拟变量,添加交互项
data['group'] = pd.Categorical(data['group'])
data = pd.get_dummies(data, columns=['group'], drop_first=True)
# 构建自变量矩阵
X = sm.add_constant(data[['group_B', 'covariate', 'time_point', 'group_B:time_point']])
# 因变量矩阵
Y = data[['dv1', 'dv2']]

# 执行MANOVA
manova_model = MANOVA(Y, X)
print("MANOVA基础结果:\n", manova_model.mv_test())

# 步骤2:添加重复测量的随机效应(线性混合模型)
# 针对每个因变量拟合LMM
model_dv1 = MixedLM.from_formula(
    'dv1 ~ group_B + covariate + time_point + group_B:time_point',
    groups=data['subject_id'],
    data=data
)
result_dv1 = model_dv1.fit()
print("\nDV1的混合模型结果:\n", result_dv1.summary())

model_dv2 = MixedLM.from_formula(
    'dv2 ~ group_B + covariate + time_point + group_B:time_point',
    groups=data['subject_id'],
    data=data
)
result_dv2 = model_dv2.fit()
print("\nDV2的混合模型结果:\n", result_dv2.summary())

# 若需完整多变量检验,可基于两个因变量的结果手动计算Hotelling-Lawley迹等统计量

关键注意事项

  • 数据格式:重复测量分析必须使用长格式数据,避免宽格式导致的分析误差。
  • 前提假设:需验证协变量与因变量的线性关系、数据正态性、方差齐性等MANCOVA核心假设。
  • Pingouin的rm_mancova会自动处理球形性检验,结果中会输出相关统计量供参考。

内容的提问来源于stack exchange,提问作者user19980629

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:26:02