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

能否从lmtest包grangertest输出计算效应量?仅得F值无平方和

如何用lmtest包grangertest的输出计算效应量?

当然可以!虽然grangertest()的默认输出没有直接提供平方和,但我们完全可以用结果里的F值、自由度这些信息反推,计算出偏η²这类常用的效应量指标。

核心思路:从F统计量推导效应量

格兰杰因果检验本质是嵌套模型的F检验——Model1是包含待检验变量滞后项的全模型,Model2是去掉这些滞后项的约束模型。F统计量的公式是:
F = [(SS_res约束 - SS_res全)/Df] / (SS_res全/Res.Df全)

我们不需要直接算出平方和,通过变形公式就能得到偏η²(控制其他变量后的效应量,最适合这类检验),推导后的简化公式是:
偏η² = (F * Df / Res.Df全) / (F * Df / Res.Df全 + 1)

这里的参数都能从你的输出里拿到:

  • F:检验的F值(你的例子里是4.8495)
  • Df:待检验变量的滞后项个数(输出里Df列是-1,取绝对值就是1)
  • Res.Df全:全模型的残差自由度(你的例子里是163)

针对你的例子手动计算

代入数值:

分子部分 = (4.8495 * 1) / 163 ≈ 0.02975
分母部分 = 0.02975 + 1 = 1.02975
偏η² ≈ 0.02975 / 1.02975 ≈ 0.0289

这个值意味着:在控制了apwbc自身滞后1期的影响后,other的滞后1期能解释apwbc变异的约2.9%。

用R代码自动计算

你可以直接提取检验结果的统计量来计算,避免手动计算出错:

# 先运行你的格兰杰检验(假设数据已经准备好)
library(lmtest)
gt_result <- grangertest(apwbc ~ Lags(apwbc, 1:1) + Lags(other, 1:1), 
                         apwbc ~ Lags(apwbc, 1:1))

# 提取所需统计量
F_val <- gt_result$F[2]
df_test <- abs(gt_result$Df[2])  # 取自由度变化的绝对值
df_residual <- gt_result$Res.Df[1]

# 计算偏η²
partial_eta_squared <- (F_val * df_test / df_residual) / (F_val * df_test / df_residual + 1)
cat("偏η²值为:", round(partial_eta_squared, 4), "\n")

补充说明

  • 偏η²是格兰杰检验中最常用的效应量,它排除了其他控制变量(这里是apwbc的滞后项)的影响,能更精准反映待检验变量的实际效应大小。
  • 如果需要计算ΔR²(模型R²的变化量),在这个检验场景下,它和偏η²的数值是相等的,因为我们只添加了一组变量(other的滞后项)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:00