如何在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
相关产品推荐
相关产品推荐

