【发布时间】:2015-08-23 19:30:33
【问题描述】:
我想进行一个线性回归,它包含三个步骤:1) 对所有数据点运行回归 2) 取出 10 个异常值使用rstandard 的绝对距离值3) 在新数据框上再次运行回归。
我知道如何手动完成,但这些非常尴尬。有没有办法自动完成?取出列也可以吗?
这是我的玩具数据框和代码(我将取出 2 个顶级异常值):
df <- read.table(text = "userid target birds wolfs
222 1 9 7
444 1 8 4
234 0 2 8
543 1 2 3
678 1 8 3
987 0 1 2
294 1 7 16
608 0 1 5
123 1 17 7
321 1 8 7
226 0 2 7
556 0 20 3
334 1 6 3
225 0 1 1
999 0 3 11
987 0 30 1 ",header = TRUE)
model<- lm(target~ birds+ wolfs,data=df)
rstandard <- abs(rstandard(model))
df<-cbind(df,rstandard)
g<-subset(df,rstandard > sort(unique(rstandard),decreasing=T)[3])
g
userid target birds wolfs rstandard
4 543 1 2 3 1.189858
13 334 1 6 3 1.122579
modelNew<- lm(target~ birds+ wolfs,data=df[-c(4,13),])
【问题讨论】:
-
您能解释一下您确定什么是异常值的规则吗?根据您的代码,这是
abs(rstandard())中两个最高值的情况,但这似乎很随意。我问是因为使用关于价值而不是相对排名的规则会更容易做到这一点。 -
你好@ulfelder,这个规则是基于我对我拥有的一个大数据集所做的许多测试。实际上我打算在我拥有的其他数据集上测试这个规则,这就是我想自动化它。
-
所以澄清一下,您要始终适用的规则是:扔掉两个最有影响力的案例?
-
是@ulfelder。但重要的是要找出是否有办法根据过滤器删除行或列作为回归的一部分。过滤器可以更改,例如 mybe Bonferonni 测试会更好,但如何过滤回归本身的结果?
标签: r linear-regression