質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

1回答

4352閲覧

Rでlasso回帰を行った後のcalibration plotの作成

Dai_tkd

総合スコア13

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2018/09/12 04:34

編集2022/01/12 10:55

目的

現在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を二値変数にしているので、チューニングがうまくいっていないという意味なのかと思いますが、どこの部分かがわかりません。

誰か助けて頂けますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラーは、
回帰をしようとしているが目的変数が2値のfactorとなっておりおかしい

ということですね。

回帰をなさりたいのでしょうか、判別でしょうか
目的変数はどうなっておりますか0/1に分けたいのであれば回帰ではなく判別(分類)となります。

投稿2020/07/05 06:04

aokikenichi

総合スコア2210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問