我想进行一个线性回归,它将包含三个步骤: 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),])
答案 0 :(得分:1)
我不知道如何在不估算两个模型的情况下做到这一点,第一个是识别最有影响的案例,第二个是没有这些案例的数据。您可以简化代码并避免使工作空间混乱,但是,通过一次性完成所有操作,在调用中嵌入子集化过程来估计“最终”模型。以下是为您提供的示例执行此操作的代码:
model <- lm(target ~ birds + wolfs,
data = df[-(as.numeric(names(sort(abs(rstandard(lm(target ~ birds + wolfs, data=df))), decreasing=TRUE)))[1:2]),])
此处,初始模型,影响评估以及随后的数据子集都包含在第一个data =
之后的代码中。
另请注意,生成的模型将与您的代码生成的模型不同。那是因为你的g
没有正确识别出两个最有影响力的案例,因为你可以看到你是否只关注abs(rstandard(lm(target ~ birds + wolfs, data=df)))
的结果。我认为这与您使用unique()
有关,这似乎是不必要的,但我不确定。