【发布时间】:2017-01-15 02:11:38
【问题描述】:
我有来自 Kaggle 网站的著名的 Titanic 数据集。我想使用逻辑回归预测乘客的生存情况。我在 R 中使用 glm() 函数。我首先将我的数据帧(总行数 = 891)分成两个数据帧,即训练(从第 1 行到第 800 行)和测试(从第 801 行到第 891 行)。 代码如下
`
>> data <- read.csv("train.csv", stringsAsFactors = FALSE)
>> names(data)
`[1] "PassengerId" "Survived" "Pclass" "Name" "Sex" "Age" "SibSp"
[8] "Parch" "Ticket" "Fare" "Cabin" "Embarked" `
#Replacing NA values in Age column with mean value of non NA values of Age.
>> data$Age[is.na(data$Age)] <- mean(data$Age, na.rm = TRUE)
#Converting sex into binary values. 1 for males and 0 for females.
>> sexcode <- ifelse(data$Sex == "male",1,0)
#dividing data into train and test data frames
>> train <- data[1:800,]
>> test <- data[801:891,]
#setting up the model using glm()
>> model <- glm(Survived~sexcode[1:800]+Age+Pclass+Fare,family=binomial(link='logit'),data=train, control = list(maxit = 50))
#creating a data frame
>> newtest <- data.frame(sexcode[801:891],test$Age,test$Pclass,test$Fare)
>> prediction <- predict(model,newdata = newtest,type='response')
`
当我运行最后一行代码时
prediction <- predict(model,newdata = newtest,type='response')
我收到以下错误
eval 中的错误(expr、envir、enclos):找不到对象“年龄”
谁能解释一下问题是什么。我检查了 newteset 变量,似乎没有任何问题。
这里是泰坦尼克号数据集https://www.kaggle.com/c/titanic/download/train.csv的链接
【问题讨论】:
-
问题是你的
newtest数据框没有Age、Pclass和Fare作为列名,而是test.Age、test.Pclass和test.Fare。您必须重命名它们。
标签: r prediction