使用多个模型时从线性回归中移除异常值
Removing outliers from linear regression when using multiple models
我想重新运行我的多元线性回归分析,删除了有影响力的 observations/outliers 以确定它们的效果。我的数据对 30 个变量(5 个预测变量,25 个结果)进行了大约 1000 次观察。
df <- data.frame(replicate(30, sample(0:1000, 1000, rep = TRUE)))
我对 25 个结果变量中的每一个执行多元线性回归:
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
=.)))
然后我可以随后提取感兴趣的统计信息:
stats <- reg %>%
mutate(glance = map(model, broom::glance),
tidy = map(model, broom::tidy, conf.int = TRUE)
)
我想重新运行上面的程序,但是已经删除了异常值,例如,通过比平均值高出 > 2 个标准偏差,或者通过像库克距离这样的东西来识别它们。但是,我无法弄清楚如何在我的代码中排除异常值,以便每个回归模型适当地迭代。
在执行回归之前,我尝试过滤每个结果变量的观察值> 2 SD,但随后我丢失了所有 25 个结果回归模型的观察结果,而不是该观察结果的单一结果模型异常值。任何建议表示赞赏。
使用broom::augment
为每个数据集添加相关措施,并保持map
-ping。
例如:
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 = .)))
统计学家免责声明:我已经解决了你问的编程问题。这不应被视为对自动检查或使用所谓的 "outliers".
的想法的认可
我想重新运行我的多元线性回归分析,删除了有影响力的 observations/outliers 以确定它们的效果。我的数据对 30 个变量(5 个预测变量,25 个结果)进行了大约 1000 次观察。
df <- data.frame(replicate(30, sample(0:1000, 1000, rep = TRUE)))
我对 25 个结果变量中的每一个执行多元线性回归:
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
=.)))
然后我可以随后提取感兴趣的统计信息:
stats <- reg %>%
mutate(glance = map(model, broom::glance),
tidy = map(model, broom::tidy, conf.int = TRUE)
)
我想重新运行上面的程序,但是已经删除了异常值,例如,通过比平均值高出 > 2 个标准偏差,或者通过像库克距离这样的东西来识别它们。但是,我无法弄清楚如何在我的代码中排除异常值,以便每个回归模型适当地迭代。
在执行回归之前,我尝试过滤每个结果变量的观察值> 2 SD,但随后我丢失了所有 25 个结果回归模型的观察结果,而不是该观察结果的单一结果模型异常值。任何建议表示赞赏。
使用broom::augment
为每个数据集添加相关措施,并保持map
-ping。
例如:
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 = .)))
统计学家免责声明:我已经解决了你问的编程问题。这不应被视为对自动检查或使用所谓的 "outliers".
的想法的认可