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

混合模型构建合理性咨询:滑雪训练实验假设验证

混合模型构建合理性与研究假设验证咨询解答

问题背景

25名高山滑雪者参与实验,流程为:预测试(3次滑行)→两次训练(各5次滑行)→后测试(3次滑行),被试分为两组采用不同训练方法。

研究假设:

  • 学习效应:一组在后测试(POSTTEST)中表现优于另一组;
  • 训练表现:一组在两次训练环节中表现优于另一组。

数据集结构(示例)

structure(list(BIB. = structure(c(10L, 25L, 22L, 7L, 8L), levels = c("1", 
"2", "3", "4", "5", "6", "8", "9", "10", "11", "12", "13", "14", 
"15", "16", "20", "21", "22", "23", "24", "25", "26", "27", "28", 
"29"), class = "factor"), Gruppe = structure(c(1L, 1L, 2L, 2L, 
2L), levels = c("EF", "IF"), class = "factor"), Run = c(1, 1, 
1, 1, 1), `Performance Time` = c(3.265, 2.665, 2.295, 2.87, 1.245
), Session = structure(c(1L, 1L, 1L, 1L, 1L), levels = c("Pretest", 
"Trening 1", "Trening 2", "Posttest"), class = "factor")), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

已生成虚拟变量:D_gruppe、Session_Pretest、Session_Trening 1、Session_Trening 2、Session_Posttest


构建的三个模型

Learning模型

Learning <- lmer(Performance_Time ~ D_gruppe*Session_Pretest*Session_Posttest 
              + (1|BIB.) + (1|Performance_Time), data)

固定效应结果:

变量EstimateStd. Errordft valuePr(>t)
(Intercept)1.737450.1767223.204929.8329.622882e-10 ***
D_gruppe-0.288260.2540422.74112-1.1350.26833
Session_Pretest0.542410.06464333.000028.3921.39e-15 ***
Session_Posttest-0.026230.06556331.96347-0.4000.68934
D_gruppe:Session_Pretest0.296730.09086315.226253.2660.00121 **
D_gruppe:Session_Posttest0.243810.09508311.207512.5640.01081 *

NB: Fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients

Performance模型

Performance  <- lmer(Performance_Time ~ D_gruppe*`Session_Trening 1`*`Session_Trening 2` + (1|BIB.)+ (1|Performance_Time), data)

固定效应结果:

变量EstimateStd. Errordft valuePr(>t)
(Intercept)2.015270.1796323.9188911.2195.18e-11 ***
D_gruppe1-0.013270.2592223.83809-0.0510.959600
Session_Trening 11-0.253190.06520331.15639-3.8831.24e-04 ***
Session_Trening 21-0.300960.06997308.15178-4.3012.28e-05 ***
D_gruppe1:Session_Trening 11-0.151250.09436288.25119-1.6030.110045
D_gruppe1:Session_Trening 21-0.407980.09864284.29362-4.1364.65e-05 ***

NB: Fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients

Combi模型

Combi  <- lmer(Performance_Time ~ D_gruppe*Session_Pretest*`Session_Trening 1`*`Session_Trening 2`*Session_Posttest
             + (1|BIB.) + (1|Performance_Time), data)

固定效应结果:

变量EstimateStd. Errordft valuePr(>t)
(Intercept)1.716980.1843726.291249.3138.23e-10 ***
D_gruppe1-0.058890.2664826.37089-0.2210.826791
Session_Pretest10.574740.07644329.705747.5185.29e-13 ***
Session_Trening 110.032760.06853331.094710.4780.632962
Session_Trening 21-0.011350.07201324.09671-0.1580.874802
D_gruppe1:Session_Pretest10.058710.11083324.396360.5300.596656
D_gruppe1:Session_Trening 11-0.091190.10106318.79226-0.9020.367565
D_gruppe1:Session_Trening 21-0.374560.10321311.02413-3.6293.32e-04 ***

NB: fixed-effect model matrix is rank deficient so dropping 24 columns / coefficients

咨询问题:以上模型的公式构建是否正确?能否通过该方法验证上述两个研究假设?


解答

一、现有模型的核心问题

1. 随机效应错误

所有模型都加入了(1|Performance_Time)作为随机效应,这完全不合理:Performance_Time是因变量,每个观测值的因变量都是唯一值,将其作为分组变量会导致每个组只有一个观测,无法估计随机效应的方差,属于概念错误。正确的随机效应应该只保留(1|BIB.),用来捕捉滑雪者个体间的差异(每个滑雪者有多次滑行记录,符合嵌套结构)。

2. 虚拟变量使用不当与模型冗余

手动生成Session的各个虚拟变量是多余的,lmer中直接使用原始分类变量Session(包含Pretest/Trening 1/Trening 2/Posttest四个水平)会更高效,且能避免矩阵秩亏问题(你看到的rank deficient提示就是因为手动生成的虚拟变量存在完全共线性,比如一个观测不可能同时属于Pretest和Posttest,导致模型被迫删除冗余列)。

3. 高阶交互项冗余

  • Learning模型使用的D_gruppe*Session_Pretest*Session_Posttest三阶交互无实际意义:一个观测只能属于一个Session,不可能同时处于Pretest和Posttest,直接导致秩亏,模型无法估计完整的交互项。
  • Combi模型的五阶交互完全冗余,不仅带来严重秩亏,也无法解释任何实际实验效应,属于过度建模。

二、针对研究假设的改进模型

假设1:验证后测试的组间差异(学习效应)

要验证“一组在后测试表现优于另一组”,核心是看组(Gruppe)和后测试的交互效应,同时控制预测试的基线差异。推荐模型:

# 直接使用原始分类变量,无需手动生成虚拟变量
model_learning <- lmer(Performance_Time ~ Gruppe * Session + (1|BIB.), data = data)

之后可通过emmeans包做事后检验,对比两组在Posttest水平上的Performance_Time差异;也可查看Gruppe:SessionPosttest的交互项显著性(需将Session的参考水平设为Pretest)。

假设2:验证训练环节的组间差异

要验证“一组在两次训练环节表现优于另一组”,核心是看组(Gruppe)和训练Session(Trening 1、Trening 2)的交互效应。可以复用上述model_learning(包含所有Session和组的交互),通过事后检验对比两组在两个训练环节的表现差异;也可单独针对训练Session建模:

# 筛选出训练环节的数据
train_data <- subset(data, Session %in% c("Trening 1", "Trening 2"))
model_performance <- lmer(Performance_Time ~ Gruppe * Session + (1|BIB.), data = train_data)

通过这个模型可直接查看组和训练Session的交互效应,判断两组在训练中的表现差异。

三、额外注意事项

  • 因变量Performance Time的数值越小代表表现越好,解读系数时要注意方向:负系数代表时间更短,表现更优。
  • 可考虑加入Run作为固定效应,控制同一场次内不同滑行顺序的影响(比如第一次滑行可能比后续滑行慢)。
  • 模型拟合后需检查残差,确保无方差不齐、非正态性问题,保证模型可靠性。

内容的提问来源于stack exchange,提问作者Simen Leithe Tajet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:31:21