2017-09-04 43 views
0

,我有以下數據集: https://www.dropbox.com/s/kdbfp8dx2fstz6w/ames_train.Rdata?dl=0的R - 由於迴歸誤差顯然1個因子變量

在我應該找到最好的線性模型的項目。爲了節省,我想確保我不會遺漏任何重要的東西,所以我包括了所有變量,並希望根據p值向後排除它們。

但是,例如當我運行時:

firstreg = lm(price ~ ., data = (ames_train)) 

bestmod=bas.lm(price ~ ., data=ames_train, prior="BIC", modelprior = uniform()) 

我得到

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    i contrasti si possono applicare solo a variabili factor con 2 o più livelli 

我不明白這裏的問題,但因爲我測試了它,並沒有任何的變量似乎也只有1個因素:

l=sapply(ames_train, function(x) is.factor(x)) 
m <- ames_test[, l] 
ifelse(n <- sapply(m, function(x) length(levels(x))) == 1, "DROP", "NODROP") 

我可能忽略了一些小事,但我有點卡住了。任何幫助表示讚賞。其中,在模型中列NA

感謝

+0

'Utilities'只有一個級別存在於數據中,沒有一行沒有丟失數據。你可以複製出錯信息,如下所示:'lm(price〜。,data = data.frame(price = 1:10,x = rep(c(「A」,NA),20),y = rep(c (NA, 「B」,NA, 「C」),10)))'。數據框在每一行中缺少數據,其中一個預測值列只有一個級別。 – eipi10

回答

1

lm將刪除行。如果包含所有可能的列(無論如何這在統計上是一個糟糕的策略,並且加上大量的預測因子和因子級別),它會丟棄至少有一個觀察結果丟失的所有行,即na.omit(ames_test)的結果。正如你所看到的,這給你在數據集中沒有一個觀察。

作爲第一步,從模型中刪除那些有很多NAs的列。

+0

顯然,謝謝! –