能否从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
相关产品推荐
相关产品推荐

