2017-08-26 11 views
1

私はいくつかの異なるトレーニングサンプルのモデルのテストエラーを確認するための検証アプローチを使用しようとしています。Rのループと代替を適用

library(ISLR) 
set.seed(1) 
train1 <- sample(10000,5000) 
train2 <- sample(10000,5000) 
train3 <- sample(10000,5000) 
trains <- c('train1','train2','train3') 
verror = rep(0,3) 
for (i in trains){ 
    glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i) 
    logitpred <- predict(glm.fit,Default[-i,],type='response') 
    classifier <- rep('No',length(logitpred)) 
    classifier[logitpred > 0.5] <- 'Yes' 
    verror[i] <- 1-mean(Default[-i,]$default==classifier) 
} 

私は「model.matrix.defaultでエラーが発生しました(MT、MF、対照的に): 変数1にはレベルがありません」を取得私のforループ 'でエラーが発生しますが、私は理由を理解することはできません。また、適用機能でこれを実装する簡単な方法はありますか?

答えて

2

問題は、文字列ではなく、ベクトルまたは数

あるiである代わりに

library(ISLR) 
set.seed(1) 
train1 <- sample(10000,5000) 
train2 <- sample(10000,5000) 
train3 <- sample(10000,5000) 
trains <- data.frame(train1,train2,train3)       ## changed 
verror = numeric()             ## changed 
for (i in trains){ 
    glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i) 
    logitpred <- predict(glm.fit,Default[-i,],type='response') 
    classifier <- rep('No',length(logitpred)) 
    classifier[logitpred > 0.5] <- 'Yes' 
    verror <- c(verror, 1-mean(Default[-i,]$default==classifier))  ## changed 
} 

または

を与えること sapply

verrorcalc <- function(i){ 
    glm.fit <- glm(default~income+balance,data=Default,family='binomial',subset=i) 
    logitpred <- predict(glm.fit,Default[-i,],type='response') 
    classifier <- rep('No',length(logitpred)) 
    classifier[logitpred > 0.5] <- 'Yes' 
    1-mean(Default[-i,]$default==classifier) 
} 
verror_alt <- sapply(trains, verrorcalc) 

を使用してのようなものを試してみてください

> verror 
[1] 0.0286 0.0236 0.0280 
> verror_alt 
train1 train2 train3 
0.0286 0.0236 0.0280 
関連する問題