2016-09-07 54 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')