【问题标题】:cooks.distance returning more values than there are in my datasetcooks.distance 返回的值比我的数据集中的值多
【发布时间】:2018-07-16 18:23:59
【问题描述】:

我了解如何通过在数据集中获得更少的值。但这是一个可重复的示例,其中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

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

【问题讨论】:

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


    【解决方案1】:

    为方便起见,设置

    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 是相同的。

    【讨论】:

    • 哇——太尴尬了。唯一更令人尴尬的是,我会花费 DAYS 时间试图调和这一点。感谢闪电般的快速结果。你摇滚!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多