R中的回归树

时间:2011-12-05 16:52:11

标签: r regression rpart

我在R中制作回归树时遇到问题。我有一个包含17个属性的数据框

library(rpart)
rt.model <- rpart(razlika ~ ., learn)

我收到错误:

Error in `[.data.frame`(frame, predictors) : undefined columns selected

看起来很奇怪,因为我用一个非常类似的数据库做了类似的事情。您可以在http://uploading.com/files/de8a966d/exa.Rda/上下载数据框 - 然后加载

load("exa.Rda")

3 个答案:

答案 0 :(得分:20)

我认为问题不是你有一个矩阵而不是数据框。当我下载然后加载数据集时,我得到一个数据框,而不是矩阵。

问题是列名中包含错误的字符。使用gsub从列名中删除字符“ - ”,“”,“(”和“)”。或者,您只需使用colnames完全重新定义列名称。

或者像ulvund一样,只需调用data.frame,这会强制R为您清理列名称。

当我这样做时,rpart运行得很好。

答案 1 :(得分:4)

学习矩阵转换为数据框。

示例:

load("exa.Rda")
library(rpart)
learn <- data.frame(learn)
rt.model <- rpart(razlika ~ ., learn)
rt.model

的产率:

n= 226 

node), split, n, deviance, yval
      * denotes terminal node

  1) root 226 31417.5100   3.3849560  
    2) B.reb>=40.80799 117 12661.2300   0.4871795  
      4) B.ft>=0.7666193 31  2685.4190  -5.7741940  
        8) A.fg2< 0.4645683 22  1846.7730  -8.3181820  
         16) A.ft< 0.7464692 7   365.4286 -14.2857100 *
         17) A.ft>=0.7464692 15  1115.7330  -5.5333330 *
        9) A.fg2>=0.4645683 9   348.2222   0.4444444 *
      5) B.ft< 0.7666193 86  8322.3720   2.7441860  
       10) B.avg.conceded.< 98.19592 76  7255.6320   1.7105260  
         20) A.reb< 39.29941 19  1520.6320  -3.5789470 *
         21) A.reb>=39.29941 57  5026.2110   3.4736840  
           42) A.3pt< 0.3945418 35  2500.1710   0.7714286  
             84) A.ft< 0.7460665 17  1270.2350  -2.4705880 *
             85) A.ft>=0.7460665 18   882.5000   3.8333330 *
           43) A.3pt>=0.3945418 22  1863.8640   7.7727270  
             86) B.ft>=0.7214165 13   718.9231   4.0769230 *
             87) B.ft< 0.7214165 9   710.8889  13.1111100 *
       11) B.avg.conceded.>=98.19592 10   368.4000  10.6000000 *
    3) B.reb< 40.80799 109 16719.2500   6.4954130  
      6) A.fouls>=24.51786 23  2349.9130  -2.2173910  
       12) A.fg2< 0.4551468 16  1266.0000  -5.5000000 *
       13) A.fg2>=0.4551468 7   517.4286   5.2857140 *
      7) A.fouls< 24.51786 86 12156.3800   8.8255810  
       14) B.fouls< 22.80863 24  3271.9580   2.5416670  
         28) A.3pt< 0.3738479 9   626.0000  -6.0000000 *
         29) A.3pt>=0.3738479 15  1595.3330   7.6666670 *
       15) B.fouls>=22.80863 62  7569.8710  11.2580600  
         30) A.fouls< 22.32999 18  1650.5000   5.5000000 *
         31) A.fouls>=22.32999 44  5078.4320  13.6136400  
           62) A.ft.drawn>=29.18849 7   208.8571   3.8571430 *
           63) A.ft.drawn< 29.18849 37  4077.1890  15.4594600  
            126) A.fg2< 0.4588535 18  1696.5000  11.5000000 *
            127) A.fg2>=0.4588535 19  1831.1580  19.2105300 *

答案 2 :(得分:2)

如果列名是整数(1:N),即使它们存储为字符,也会发生这种情况。