Почему функция предсказания LM в R добавляет строку к моему выводу - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь использовать функцию предсказания в R на основе базовой линейной модели. Мой набор тестов имеет 1459 значений, но когда я использую функцию прогнозирования, он создает 1460. Я попытался удалить NA из набора тестов и даже попытался сохранить их, но не знаю, откуда это значение.

Любая помощь будет принята с благодарностью. Спасибо!

MODEL <- lm(train$SalePrice ~ train$LotArea * train$GarageArea * 
factor(train$FullBath) * train$YearBuilt * factor(train$OverallQual))



test_final <-read.csv("/Users/ERIC/Documents/HOUSING_PRICES/test.csv", 
        header = TRUE)


    na.omit(test_final)


    prediction <- data.frame(predict(MODEL, test_final))


    Warning messages:
    1: 'newdata' had 1459 rows but variables found have 1460 rows 
    2: In predict.lm(MODEL, test_final) :
    prediction from a rank-deficient fit may be misleading

Данные через: https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data

1 Ответ

0 голосов
/ 08 ноября 2018

Во-первых, примечание: вам нужно переназначить вывод na.omit(), чтобы избавиться от пропущенных значений.

См. Здесь:

df <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA))
df
  x  y
1 1  0
2 2 10
3 3 NA
na.omit(df)
  x  y
1 1  0
2 2 10
df
  x  y
1 1  0
2 2 10
3 3 NA

Как видите, последнийвызов df показал вам первоначальную версию, включая NA s.Вам нужно будет переназначить, используя df <- na.omit(df).


Фактическая проблема:

Как указано @ 42 в комментариях, правильное использование формул решит эту проблему, то есть у вас больше не будет этого сообщения об ошибке.Однако у вас будет другой.Сначала позвольте мне показать вам:

#read in the data
testdf <- read.csv("test.csv")
train <- read.csv("train.csv")

# run initial model, and run model as suggested by 42
model_original <- lm(train$SalePrice ~ train$LotArea * train$GarageArea * factor(train$FullBath) * train$YearBuilt * factor(train$OverallQual))

mod_42 <- lm(SalePrice ~ LotArea * GarageArea * factor(FullBath) * YearBuilt * factor(OverallQual), data = train)

Теперь давайте запустим прогнозы:

prediction <- data.frame(predict(model_original, testdf))
Warning messages:
1: 'newdata' had 1459 rows but variables found have 1460 rows 
2: In predict.lm(model_original, testdf) :
  prediction from a rank-deficient fit may be misleading

Это привело к той же ошибке, что и у вас.Теперь давайте запустим прогнозы, используя второй подход:

prediction <- data.frame(predict(mod_42, testdf))
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor factor(FullBath) has new levels 4

Обратите внимание, что сообщение об ошибке теперь другое и указывает на более интересную проблему.

...