为什么R中的LM Prediction函数会在我的输出中添加一行

时间:2018-11-07 23:54:23

标签: r prediction kaggle

我正在尝试基于基本线性模型在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 :(得分:2)

首先,请注意:您必须重新分配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的初始版本。您将需要使用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

请注意,错误消息现在有所不同,并指出了一个更有趣的问题。