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

使用pymer4进行事后分析时报错:Variable 'latency' is not in the dataset

使用pymer4进行事后分析时报错:Variable 'latency' is not in the dataset

看起来你遇到的问题根源很可能是事后分析时指定的变量和模型/数据集不匹配,咱们一步步拆解问题:

先看你的代码细节:

  • 拟合混合模型时,公式里用的因变量是latency,但调用post_hoc方法时却传了marginal_vars="ln_Latency"——而你的样本数据里根本没有ln_Latency这个列,这就导致pymer4调用的R后端emtrends函数找不到对应变量,进而抛出了报错。

解决方案分两种情况:

情况1:你不需要对数转换,只是参数写错了

直接把marginal_vars改成模型里实际使用的latency即可:

marginal_estimates, comparisons = model.post_hoc(
    marginal_vars="latency", 
    grouping_vars="Velocity",
    p_adjust='bonf'
)

情况2:你确实需要基于对数转换后的latency做分析

那得先在数据集中生成对数转换后的列,再重新拟合模型,最后执行事后分析:

import numpy as np

# 第一步:添加对数转换后的latency列
df['ln_Latency'] = np.log(df['latency'])

# 第二步:用新列重新拟合模型
model = Lmer(formula='ln_Latency~ C(Velocity) + (1|subject)', data=df)
model.fit(factors={"Velocity": ["16","24","32","40"]}, ordered=True,summarize=True)

# 第三步:基于新列做事后分析
marginal_estimates, comparisons = model.post_hoc(
    marginal_vars="ln_Latency", 
    grouping_vars="Velocity",
    p_adjust='bonf'
)

额外排查小技巧:

  • 可以先打印数据集的列名确认:print(df.columns),确保你指定的变量确实存在,还要注意大小写差异(比如Latency和latency会被识别为两个不同变量)。
  • 检查模型拟合过程中有没有不小心过滤或修改了数据集,导致latency列丢失——不过你模型公式里用了这个列且拟合成功,说明当时该列是存在的,所以大概率是post_hoc的参数写错了。

备注:内容来源于stack exchange,提问作者Lym Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:38:00