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

如何用.lm.fit()提取R平方、调整R平方并实现预测?

关于.lm.fit()的R平方、调整R平方提取与预测功能实现

.lm.fit()作为底层拟合函数,确实比lm()更快,但返回的是包含核心拟合结果的列表而非标准lm模型对象。不过我们可以通过统计定义手动计算所需指标,同时实现预测功能,具体如下:

1. 计算R平方与调整R平方

依据R平方和调整R平方的数学定义,结合.lm.fit()返回的残差、样本信息即可计算:

set.seed(123) # 固定随机种子保证结果可复现
test_dat <- data.frame(y = rnorm(780, 20, 10))
for(b in 1:300){
  name_var <- paste0("x",b)
  test_dat[[name_var]] <- rnorm(780, 0.01 * b, 5)
}

datm <- as.matrix(test_dat)
y <- datm[,1]
X <- cbind(1, datm[,-1]) # 构造带截距项的设计矩阵
obj_lm_fit <- .lm.fit(X, y)

# 计算R平方
rss <- sum(obj_lm_fit$residuals^2)
tss <- sum((y - mean(y))^2)
r_squared <- 1 - (rss / tss)

# 计算调整R平方
n <- length(y)
p <- ncol(datm[,-1]) # 自变量个数
adj_r_squared <- 1 - ( (rss / (n - p - 1)) / (tss / (n - 1)) )

# 输出结果
cat("R平方:", r_squared, "\n")
cat("调整R平方:", adj_r_squared, "\n")

你可以对比lm()的summary(obj_lm)$r.squared和summary(obj_lm)$adj.r.squared,二者结果完全一致。

2. 实现预测功能

预测的核心逻辑是用拟合系数乘以设计矩阵,无论训练数据还是新数据都可按此实现:

训练数据的预测

# 生成训练数据的预测值
pred_train <- X %*% obj_lm_fit$coefficients
# 验证与lm()预测结果一致
all.equal(as.vector(pred_train), predict(obj_lm)) # 返回TRUE

新数据的预测

需先将新数据调整为与训练数据一致的格式,构造带截距的设计矩阵:

# 构造示例新数据(需包含所有300个自变量,此处仅展示部分)
new_dat <- data.frame(
  x1 = rnorm(10, 0.01*1,5),
  x2 = rnorm(10,0.01*2,5)
  # 补全剩余298个自变量列
)
new_datm <- as.matrix(new_dat)
new_X <- cbind(1, new_datm) # 添加截距项

# 生成新数据预测值
pred_new <- new_X %*% obj_lm_fit$coefficients
pred_new

注意:新数据需与训练数据的自变量列名、顺序完全一致,否则会导致预测错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:20:24