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

实验需提供PRESS统计量:如何在R及broom包中计算线性回归的PRESS?

R语言中计算线性回归PRESS统计量的方法及broom包实现

Q1: R语言中计算线性回归PRESS统计量的可行方法

方法1:基于残差与杠杆值的手动计算

利用预测残差和杠杆值的数学关系直接计算,是效率最高的方法。核心公式为:
PRESS = Σ[(r_i / (1 - h_ii))²]
其中r_i是模型的普通残差,h_ii是样本的杠杆值(hat values)。

代码示例:

# 拟合线性回归模型
model <- lm(y ~ x, data = your_data)

# 提取残差和杠杆值
resids <- residuals(model)
hat_vals <- hatvalues(model)

# 计算PRESS统计量
press_value <- sum((resids / (1 - hat_vals))^2)
press_value

方法2:循环留一交叉验证法

通过逐个移除样本、重新拟合模型并预测该样本的方式,累加残差平方和。适合理解PRESS的计算逻辑,但样本量较大时效率较低。

代码示例:

press_value <- 0
n <- nrow(your_data)

for (i in 1:n) {
  # 移除第i个样本后拟合模型
  model_i <- lm(y ~ x, data = your_data[-i, ])
  # 预测被移除样本的y值
  pred_i <- predict(model_i, newdata = your_data[i, ])
  # 累加残差平方
  press_value <- press_value + (your_data$y[i] - pred_i)^2
}

press_value

方法3:使用car包的现成函数

car包内置了press()函数,可直接返回线性回归模型的PRESS统计量。

代码示例:

library(car)

model <- lm(y ~ x, data = your_data)
press(model)  # 直接输出PRESS值

Q2: 基于broom包实现PRESS统计量计算

broom包的augment()函数可以便捷提取模型的残差、杠杆值等结构化结果,结合这些信息即可计算PRESS。

代码示例:

library(broom)
library(dplyr)

model <- lm(y ~ x, data = your_data)

# 提取模型的残差、杠杆值等信息
model_aug <- augment(model)

# 计算PRESS统计量
press_value <- model_aug %>%
  mutate(pred_resid = .resid / (1 - .hat)) %>%
  summarize(press = sum(pred_resid^2)) %>%
  pull(press)

press_value

内容的提问来源于stack exchange,提问作者Antonio Jesús Pérez Luque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:25:20