0

のステップ機能を検証:クロスは、私はステップ関数からエラーを取得しようとしていますが、私はエラーを取得するR

library(boot) 
library(ISLR) 
attach(Wage) 
set.seed(5082) 
cv.error <- rep (0,12) 
for (i in 2:13){ 
    step.fit = glm(wage~cut(age,i), data = Wage) 
    cv.error[i] <- cv.glm(Wage ,step.fit, K= 10)$delta [1] 
} 

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
cut(age, i) has new levels (17.9,43.5], (43.5,69.1] 

代わりに自動で私は、特定のブレークを使用cut()インデックスを生成する場合、私はcv.glm()$delta [1]からエラーを取得することができます:これらはまったく同じ休憩cut(age,4)になりますにもかかわらず

fit <- glm(wage~cut(age,breaks=c(17.9,33.5,49,64.5,80.1)), data = Wage) 
cv.error <- cv.glm(Wage ,step.fit, K= 10)$delta [1]' 

何が起こっているのか、エラーを修正する方法は誰でも説明できます。

私の目標は、12種類のステップモデルからエラーを見つけて、cv.glm()$deltaエラーに基づいて最良のものを選ぶことです。

答えて

0

cut(age, i)は、glm()内のインライン作成としてのみ存在し、検証のために使用したWageデータセットの一部ではありませんでした。

library(boot) 
library(ISLR) 
data(Wage) # using attach is a bad practice 
set.seed(5082) 
cv.error <- rep (0,12) 
for (i in 2:13){ 
    Wage$tmp <- cut(Wage$age,i) 
    step.fit = glm(wage~tmp, data = Wage) 
    cv.error[i] <- cv.glm(Wage ,step.fit, K= 10)$delta [1] 
} 

cv.error 

最初の値が0値のみからであること[1] 0.000 1733.815 1682.731 1637.200 1631.049 1623.069 1613.099 1600.413 1613.127 1603.581 1603.601 1604.730 1602.462

注:我々はこのようにそれを修正することができiが2から始まるので、最初の要素には何も書き込まれませんでした。

+1

ありがとうございましたそれをはっきりと説明するために! –

+0

@OPolakunnilあなたは大歓迎です –

0

私は使用することを置く

??cut
## one way to extract the breakpoints 
labs <- levels(cut(aaa, 3)) 
cbind(lower = as.numeric(sub("\\((.+),.*", "\\1", labs)), 
     upper = as.numeric(sub("[^,]*,([^]]*)\\]", "\\1", labs))) 

cut出力からラベルを取得する方法に見て、ドキュメントの末尾に役立つノートを見つけました:

library(boot) 
library(ISLR) 
data(Wage) 
set.seed(5082) 
cv.error <- rep (0,12) 
for (i in 2:13){ 
    labs <- levels(cut(age, i)) 
    breaks <- unique(c(as.numeric(sub("\\((.+),.*", "\\1", labs)), 
        as.numeric(sub("[^,]*,([^]]*)\\]", "\\1", labs)))) 
    step.fit <- glm(wage~cut(age,unique(breaks)), data = Wage) 
    cv.error[i] <- cv.glm(Wage ,step.fit, K=10)$delta[1] 
} 

cv.error 
[1] 0.000 1733.815 1682.731 1637.200 1631.049 1623.069 1613.099 1600.413 1613.127 1603.581 1603.601 
[12] 1604.730 1602.462 
関連する問題