实验需提供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
相关产品推荐
相关产品推荐

