如何在R语言线性回归数据集中注入10%Y方向相同异常值?
解决线性回归数据集添加Y方向固定异常值的问题
没问题,我来帮你搞定这个需求!首先先修正你初始代码里的一个小bug,再一步步教你添加Y方向的固定异常值。
你的原代码里有个逻辑错误:e11是在计算y之后才生成的,这会导致R报错找不到e11变量——得先生成误差项,再用它计算y值。
接下来咱们实现添加10%的Y方向相同异常值,步骤很清晰:
- 先算需要修改的样本量:n=20的10%是2个样本
- 随机从20个样本里挑选2个不重复的索引
- 给选中样本的
y值加上一个固定的异常偏移量(数值可以按需调整,只要和正常数据差异明显就行)
下面是完整的修正后代码,我加了详细注释:
# 设置基础参数 n11 <- 20 # 总样本量 m1 <- 0 # 正态分布均值 sd1 <- 1 # 正态分布标准差 b0 <- 0 # 回归截距 b1 <- 1 # 回归斜率 outlier_shift <- 5 # Y方向异常值的固定偏移量(可自行调整正负/大小) # 生成自变量x x <- rnorm(n11, m1, sd1) # 先生成误差项e11(修正原代码的顺序问题) e11 <- rnorm(n11, m1, sd1) # 生成无异常值的初始y值 y <- b0 + b1*x + e11 # 计算需要添加异常值的样本数量 outlier_num <- round(n11 * 0.1) # 随机挑选要修改的样本索引(保证不重复) outlier_pos <- sample(1:n11, outlier_num) # 给选中样本添加固定异常值 y[outlier_pos] <- y[outlier_pos] + outlier_shift # 整理成数据框 data11 <- data.frame(y, x, e11, b0, b1) # 拟合线性模型 model1 <- lm(y ~ x, data=data11)
关键细节说明:
- 用
sample(1:n11, outlier_num)随机选索引,每次运行都会随机挑不同的样本加异常值,避免固定位置的异常值 - 如果想要异常值是完全固定的数值(比如直接设为10,而非在原y基础上偏移),可以把最后一步改成
y[outlier_pos] <- 10 - 你可以用
plot(y ~ x, data=data11)可视化数据集,能直观看到那2个明显的异常点
内容的提问来源于stack exchange,提问作者bel
相关产品推荐
相关产品推荐

