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

R语言lm类对象调用vcov()函数的计算原理及手动实现方法

R语言lm对象vcov()方差-协方差矩阵手动计算方法

线性回归系数的方差-协方差矩阵的标准计算公式为:

$Var(\hat{\beta}) = \hat{\sigma}^2 \times (XTX){-1}$

其中:

  • $\hat{\sigma}^2$ 是回归模型的残差均方误差,等于残差平方和除以模型自由度(样本量 - 待估参数个数)
  • X 是模型的设计矩阵,默认包含截距项对应的全1列
  • $(XTX){-1}$ 是设计矩阵叉积的逆矩阵

该公式同时覆盖对角项(系数方差,即标准误的平方)和非对角项(不同系数的协方差)的计算需求,可运行的验证代码如下:

library(data.table)
# 固定随机种子保证结果可复现
set.seed(123)
df <- data.table(y = runif(100, 0, 100),
                 x = runif(100, 0, 100),
                 z = runif(100, 0, 100))

# 先拟合模型,取官方vcov作为对比基准
fit <- lm(y ~ x + z, df)
official_vcov <- vcov(fit)
cat("官方vcov输出结果:\n")
print(official_vcov)

# ------------------- 手动计算逻辑 -------------------
# 1. 提取包含截距项的设计矩阵
X <- model.matrix(fit)
# 2. 计算残差均方误差
n <- nrow(df) # 样本量
k <- length(coef(fit)) # 待估参数个数
res <- residuals(fit)
sigma_hat_sq <- sum(res^2)/(n - k)
# 3. 计算设计矩阵叉积的逆
xtx_inv <- solve(t(X) %*% X)
# 4. 得到完整方差-协方差矩阵
manual_vcov <- sigma_hat_sq * xtx_inv
cat("\n手动计算vcov结果:\n")
print(manual_vcov)

# 数值误差范围内验证二者完全相等
cat("\n二者一致性验证结果:\n")
print(all.equal(official_vcov, manual_vcov))

代码运行后会输出一致的方差-协方差矩阵,你需要的非对角项会和官方vcov()返回的结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:03