2016-09-07 57 views
1

我有从Kaggle网站着名的泰坦尼克号数据集。我想用逻辑回归来预测乘客的生存。我在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

错误(表达式的最后一行,envir,enclos):object'Age'not found

任何人都可以请解释是什么问题。我已经检查过新的变量,并且似乎没有任何问题。

这里是链接到泰坦尼克号的数据集https://www.kaggle.com/c/titanic/download/train.csv

+1

的问题是,你的'newtest'数据帧没有'Age','Pclass'和'Fare'列名,但'测试。年龄','test.Pclass'和'test.Fare'。你必须重命名它们。 – Kabulan0lak

+0

感谢您的帮助。我可以知道如何重命名数据框的列名称吗? –

回答

2

首先,你应该直接添加sexcode到数据帧:

data$sexcode <- ifelse(data$Sex == "male",1,0) 

然后,当我评论,你在你的列名有问题在newtest数据框中,因为您手动创建它。您可以直接使用test数据帧。

因此,这里是你的完整的工作代码:

data <- read.csv("train.csv", stringsAsFactors = FALSE) 
    data$Age[is.na(data$Age)] <- mean(data$Age, na.rm = TRUE) 
    data$sexcode <- ifelse(data$Sex == "male",1,0) 

    train <- data[1:800,] 
    test <- data[801:891,] 

    model <- glm(Survived~sexcode+Age+Pclass+Fare,family=binomial(link='logit'),data=train, control = list(maxit = 50)) 

    prediction <- predict(model,newdata = test,type='response')