我正在運行線性迴歸,其中預測變量被另一個值分類,並且無法爲newdata生成模型化響應。R中的Predict.lm無法識別新數據
首先,我爲預測變量和誤差項生成一些隨機值。然後我構建響應。請注意,預測因子係數取決於分類變量的值。我構建了一個基於預測器及其類別的設計矩陣。
set.seed(1)
category = c(rep("red", 5), rep("blue",5))
x1 = rnorm(10, mean = 1, sd = 1)
err = rnorm(10, mean = 0, sd = 1)
y = ifelse(category == "red", x1 * 2, x1 * 3)
y = y + err
df = data.frame(x1 = x1, category = category)
dm = as.data.frame(model.matrix(~ category + 0, data = df))
dm = dm * df$x1
fit = lm(y ~ as.matrix(dm) + 0, data = df)
# This line will not produce a warning
predictOne = predict.lm(fit, newdata = dm)
# This line WILL produce a warning
predictTwo = predict.lm(fit, newdata = dm[1:5,])
的警告是:
'newdata' 有5行,但可變發現有(S)10行
除非我非常錯誤的,我不應該與變量名稱有任何問題。 (這個板子上有一兩個討論提出了這個問題。)請注意,第一個預測運行良好,但第二個預測沒有。唯一的變化是第二次預測只使用設計矩陣的前五行。
想法?
這裏真正的問題是你的,我們應該說,「創造性」嘗試通過'lm'的公式接口指定一個模型。 – joran
'predict.lm'幫助頁面說'newdata'參數需要是一個數據框。警告確實顯得有點偏離目標,但是可以說比當您可能認爲您獲得新預測時默認報告原始數據預測的默認行爲更好。 –