cooks.distance返回比我的数据集中更多的值

时间:2018-07-16 18:24:00

标签: r regression linear-regression data-mining lm

我了解如何通过包含在数据集中获得更少的值。但是,这是一个可重复的示例,其中cooks.distance返回的更多。除非我的R版本完全损坏,否则我完全不知道这怎么可能。

考虑

library (MASS)
lm.Boston<-lm(medv~crim+indus+age+tax,data=Boston)
cooks.distance(lm.Boston)
nrow(Boston) ## cooks.distance returns 506 values as expected which matches the obs in the dataset.
newBoston<-Boston[Boston$age>50,] ## Now arbitrarily remove some rows.  The number of records is now 359
lm.newBoston<-lm(medv~crim+indus+age+tax,data=newBoston)
cooks.distance(lm.newBoston) ## cooks.distance still returns 506 values.  It seems to be "Stuck" on the previous dataset

有人知道我在做什么错吗?

2 个答案:

答案 0 :(得分:2)

为方便起见,设置

CD <- cooks.distance(lm.Boston)
CDnew <- cooks.distance(lm.newBoston)

不要被向量的“名称”字段所欺骗。改为选中length(CD)length(CDnew)

您可以通过names(CD)names(CDnew)提取“名称”属性。它们分别与row.names(Boston)row.names(newBoston)一致。

不仅cooks.distance有这种行为;其他通用函数,例如predictresidualsrstandardfittedfitted.values是相同的。

答案 1 :(得分:1)

代码似乎在下面返回相等的数字:

library (MASS)

# Case - 1
lm.Boston<-lm(medv~crim+indus+age+tax,data=Boston)
nrow(Boston)
length(cooks.distance(lm.Boston))

enter image description here

# Case - 2
newBoston<-Boston[Boston$age>50,] 
lm.newBoston<-lm(medv~crim+indus+age+tax,data=newBoston)
nrow(newBoston)
length(cooks.distance(lm.newBoston))

enter image description here