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

如何在R语言中基于样本方差设置加权线性回归模型?

加权最小二乘回归的正确R代码实现

你当前代码的问题在于:

  • weights=1/x中的x对象未定义,R无法识别
  • 权重逻辑错误:加权最小二乘要求权重为每个观测组样本方差的倒数,而非随意变量的倒数

关键前提:需要完整的重复实验数据

你提到每个因子设置下投掷三次,但目前只提供了每个组的单个y值(应为均值)。要计算样本方差作为权重,必须先有每个组三次投掷的原始y数据。以下是完整实现步骤:

步骤1:构造包含重复实验的数据框

补全每个组的三次原始投掷数据(请替换为你的真实实验数据):

# 因子变量:每个组合重复3次
x1 <- rep(c(-1,-1,-1,-1,1,1,1,1), each = 3)
x2 <- rep(c(-1,-1,1,1,-1,-1,1,1), each = 3)
x3 <- rep(c(-1,1,-1,1,-1,1,-1,1), each = 3)
x4 <- rep(c(-1,1,1,-1,1,-1,-1,1), each = 3)

# 对应每个组的三次投掷距离(示例数据,替换为真实值)
y <- c(27,28,29, 
       45,46.3,47.6, 
       21,21.9,22.8, 
       52,52.9,53.8, 
       74,75,76, 
       127,127.7,128.4, 
       85,86.2,87.4, 
       194,195,196)

# 整理为数据框
dat <- data.frame(x1, x2, x3, x4, y)

步骤2:计算每个组的样本方差

使用dplyr分组计算方差(未安装则先运行install.packages("dplyr")):

library(dplyr)

# 分组计算每个因子组合的样本方差
var_groups <- dat %>%
  group_by(x1, x2, x3, x4) %>%
  summarise(var_y = var(y), .groups = "drop")

# 将方差合并回原数据框
dat <- left_join(dat, var_groups, by = c("x1", "x2", "x3", "x4"))

步骤3:拟合加权最小二乘模型

权重设置为样本方差的倒数:

# 拟合WLS模型
wls_model <- lm(y ~ x1 + x2 + x3 + x4, data = dat, weights = 1/var_y)

# 查看模型结果
summary(wls_model)

若仅能获取组均值数据

如果无法获取原始重复数据,无法计算样本方差,只能拟合普通最小二乘模型:

# 基于均值数据的OLS模型
ols_model <- lm(y ~ x1 + x2 + x3 + x4, 
                data = data.frame(x1, x2, x3, x4, y))
summary(ols_model)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:35