[英]How can I filter out rows from linear regression based on another linear regression
我想進行一個線性回歸,該回歸將包括三個步驟: 1)在所有數據點上運行回歸2)使用rstandard的絕對rstandard
值找出10個離群值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),])
我不知道如何在不估計兩個模型的情況下做到這一點,第一個模型確定最有影響力的案例,第二個模型在沒有這些案例的情況下確定數據。 您可以簡化代碼並避免混亂的工作空間,但是,只需一次完成所有工作即可,並且將子集過程嵌入到調用中以估計“最終”模型。 這是為您提供的示例執行此操作的代碼:
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()
使用有關,這似乎不必要,但我不確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.