在R中基于指定R²值生成回归数据集:求解残差SD计算方法
生成指定R²的回归数据集(R语言实现)
核心逻辑
R²代表回归拟合值的方差占总y值方差的比例,公式为:
R² = Var(ŷ) / Var(y) = 1 - Var(e)/Var(y)
其中ŷ是回归拟合值,e是服从均值为0的正态分布的残差。我们可以通过这个公式反推出残差的标准差sd_e。
具体步骤与代码
1. 生成自变量x
根据给定范围生成200个随机样本:
n <- 200 x_min <- 23 x_max <- 30 x <- runif(n, x_min, x_max) # 生成均匀分布的x,也可用seq生成等距值
2. 计算回归拟合值ŷ
代入给定的回归参数:
a <- 55.118 b <- 1.218 y_hat <- a - b * x
3. 推导残差的标准差sd_e
先计算拟合值ŷ的方差,再结合R²公式求解:
r_squared <- 0.47 var_yhat <- var(y_hat) # 也可用理论值:b^2 * ((x_max - x_min)^2 / 12) var_e <- var_yhat * (1 - r_squared) / r_squared sd_e <- sqrt(var_e)
4. 生成残差与最终y值
set.seed(123) # 设置随机种子确保结果可复现 e <- rnorm(n, mean = 0, sd = sd_e) y <- y_hat + e
5. 验证结果
用线性回归验证生成数据的R²是否符合预期:
model <- lm(y ~ x) summary(model)$r.squared # 结果应接近0.47
注意事项
- 若x采用等距序列,拟合值的方差
var(y_hat)会和理论计算值完全一致。 - 受随机抽样影响,生成数据集的R²会与0.47略有偏差,样本量越大偏差越小。
内容的提问来源于stack exchange,提问作者TKH_9
相关产品推荐
相关产品推荐

