目的
現在Rを用いて、lasso回帰(glmnet使用)と通常のロジスティック回帰の予測モデルを、calibration plotを使用して比較したいと思っています。
現時点でのlasso回帰のスクリプト
R
1 library(glmnet) 2 res_lasso <- as.matrix( @database@ ) 3 x_lasso <- res_lasso[,-1] 4 y_lasso <- res_lasso[,1] 5 glmnet_fit <- glmnet(x_lasso, y_lasso, family="binomial") 6 cv.glmnet_fit <- cv.glmnet(x_lasso, y_lasso, family="binomial",nfold=5) 7 opt_lambda <- cv.glmnet_fit$lambda.min 8 lasso_odds <- glmnet(x_lasso, y_lasso, lambda=opt_lambda, family="binomial")$beta 9 exp(lasso_odds)
logistic回帰のcalibration plotのスクリプト
スクリプトが理解できて作成したcalibration plotは以下になります。
R
1 library(rms) 2 f <- lrm(ADL ~ sex + ... + bmi ,data= dt, x=TRUE, y=TRUE) 3 cal <- calibrate(f, group=dt$ADL) 4 plot(cal)
同様にはlasso回帰のcalibrationは書けないのでしょうか?
library(caret)などを使用した方が良いのでしょうか?(train関数など?)
[追記]
他の方法として、以下の方法を試してみました。
データベースはres_lasssoという形にしています
R
1ctrl <- trainControl(method = "cv",classProbs=TRUE,number=10,selectionFunction = "best") 2#res_lasso_linar <- train(res_lasso[,-1],res_lasso[,1],method="glm",trControl=fitControl) 3linear_lift <- train(x=res_lasso[,-1],y=res_lasso[,1], 4 method = "glm", metric = "ROC", 5 trControl = ctrl) 6lift_results <- data.frame(Class = res_lasso[,1]) 7lift_results$LINEAR <- predict(linear_lift, res_lasso, type = "prob")[,"Class1"] 8head(lift_results)
すると、以下のエラーが出てきました。
You are trying to do regression and your outcome only has two possible values Are you trying to do classification? If so, use a 2 level factor as your outcome column.Error in evalSummaryFunction(y, wts = weights, ctrl = trControl, lev = classLevels, :
Error in evalSummaryFunction(y, wts = weights, ctrl = trControl, lev = classLevels, : train()'s use of ROC codes requires class probabilities. See the classProbs option of trainControl()
おそらくglmでoutcomeを二値変数にしているので、チューニングがうまくいっていないという意味なのかと思いますが、どこの部分かがわかりません。
誰か助けて頂けますと幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。