2016-09-07 12 views
1

私はKaggleのウェブサイトから有名なタイタニックデータセットを持っています。ロジスティック回帰を使って乗客の生存を予測したい。 Rでglm()関数を使用しています。最初にデータフレーム(合計行= 891)を列車(行1から800)とテスト(行801から891)の2つのデータフレームに分割します。 コードはタイタニックデータセットでロジスティック回帰を適用する

` 
>> 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') 

`

を次のようにあると私はコードを私は次のエラーにevalの中

エラーを取得

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

(exprの最後の行を実行すると、envir、enclos):オブジェクト 'Age'が見つかりません

誰でも問題の内容を説明してください。私はnewteset変数をチェックしており、そこに問題はないようです。私はコメントとして、あなたは、列名に問題があり、

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

その後:ここ

はタイタニックデータへのリンクはまず、あなたがデータフレームに直接 sexcodeを追加する必要があります https://www.kaggle.com/c/titanic/download/train.csv

+1

問題は、あなたの 'newtest'データフレームは、列名が、'テストとして 'Age'、' Pclass'と 'Fare'を持っていないということです。 Age'、 'test.Pclass'、' test.Fare'です。それらの名前を変更する必要があります。 – Kabulan0lak

+0

助けてくれてありがとう。データフレームの列名を変更する方法を知っていますか? –

答えて

2

を設定しています手動で作成するため、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') 
関連する問題