Removing outliers from linear regression when using multiple models
我想重新运行我的多元线性回归分析,删除有影响的观察值/异常值以确定它们的影响。我的数据包含 30 个变量(5 个预测变量,25 个结果)的大约 1000 个观察值。
1 | df <- data.frame(replicate(30, sample(0:1000, 1000, rep = TRUE))) |
我对 25 个结果变量中的每一个执行多元线性回归:
1 2 3 4 5 6 7 8 | library(tidyverse) reg <- df %>% gather(outcome_name, outcome_value, -(X1 : X5)) %>% group_by(outcome_name) %>% nest() %>% mutate(model = map(data, ~lm(outcome_value ~ X1 + X2 + X3 + X4 + X5, data =.))) |
然后我可以随后提取感兴趣的统计数据:
1 2 3 4 | stats <- reg %>% mutate(glance = map(model, broom::glance), tidy = map(model, broom::tidy, conf.int = TRUE) ) |
我想重新运行上述内容,但删除了异常值,例如,通过高于均值 > 2 个标准差或通过库克距离之类的值来识别它们。但是,我不知道如何在我的代码中排除异常值,以便每个回归模型都能适当地迭代。
在执行回归之前,我已尝试过滤每个结果变量高于平均值 2 SD 的观察结果,但随后我丢失了所有 25 个结果回归模型的观察结果,而不是单个结果模型,该观察结果是异常值.任何建议表示赞赏。
使用
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 | library(tidyverse) library(broom) set.seed(1) df <- data.frame(replicate(30, sample(0:1000, 1000, rep = TRUE))) reg <- df %>% gather(outcome_name, outcome_value, -(X1 : X5)) %>% group_by(outcome_name) %>% nest() %>% mutate(model = map(data, ~lm(outcome_value ~ X1 + X2 + X3 + X4 + X5, data = .)), data2 = map(model, augment), data3 = map(data2, filter, abs(.std.resid) < 2), model2 = map(data3, ~lm(outcome_value ~ X1 + X2 + X3 + X4 + X5, data = .))) |
统计学家的免责声明:我已经解决了您提出的编程问题。这不应被视为对自动检查或处理所谓的"异常值"的想法的认可。