前提・実現したいこと
R初心者です。一般化線形回帰に対して、Lassoで作成したモデルを比較しようとしています。
glmを用いた線形回帰の方は、モデルの要約(summary)により基本的な情報を出力することができました。
一方で、Lassoの方は係数の方はcoefficientsで出力することができましたが、モデルの要約(summary)を出しても比較するような情報が出てきませんでした。どのようにしたらモデルの情報が出てくるでしょうか(質問1)。
また、教科書的な本には、モデルの比較にはAICが一つの指標となるとあったので算出しようとしましたが、うまくいきませんでした。なぜ出力できないのでしょうか(質問2)。
常識的なことかもしれませんが、どうぞよろしくお願いいたします。
発生している問題・エラーメッセージ
#質問1 > summary(result_glm) Call: glm(formula = 顧客数 ~ 立地満足度 + 設備満足度 + 店舗面積満足度 + トレーナー満足度 + トレーナー数, family = gaussian(link = "identity"), data = csdat[, -1]) Deviance Residuals: Min 1Q Median 3Q Max -62.126 -37.775 -0.757 18.837 101.168 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -1.781 152.525 -0.012 0.99078 立地満足度 29.029 5.804 5.001 4.14e-05 *** 設備満足度 22.135 7.482 2.959 0.00685 ** 店舗面積満足度 23.390 7.324 3.193 0.00390 ** トレーナー満足度 40.200 33.885 1.186 0.24709 トレーナー数 -7.245 31.109 -0.233 0.81782 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for gaussian family taken to be 2115.22) Null deviance: 290427 on 29 degrees of freedom Residual deviance: 50765 on 24 degrees of freedom AIC: 322.15 Number of Fisher Scoring iterations: 2 > summary(result_lasso) Length Class Mode lambda 100 -none- numeric cvm 100 -none- numeric cvsd 100 -none- numeric cvup 100 -none- numeric cvlo 100 -none- numeric nzero 100 -none- numeric call 5 -none- call name 1 -none- character glmnet.fit 12 elnet list lambda.min 1 -none- numeric lambda.1se 1 -none- numeric index 2 -none- numeric 質問2 extractAIC(result_lasso) #AICの算出 モデル中の母数の個数、AIC(小さい方がモデル良好) UseMethod("extractAIC") でエラー: 'extractAIC' をクラス "cv.glmnet" のオブジェクトに適用できるようなメソッドがありません
該当のソースコード
R
1csdat <- read.csv("顧客満足度データ.csv") 2head(csdat, 10) #データ10行表示 3##glm(普通の線形回帰) 4result_glm <- glm(formula=顧客数~立地満足度+設備満足度+店舗面積満足度+トレーナー満足度+トレーナー数, data=csdat[,-1], family=gaussian(link="identity")) 5##推定された回帰係数 6as.matrix(result_glm$coefficients) #$coefficientsは係数を表示 7summary(result_glm) 8extractAIC(result_glm) #AICの算出 モデル中の母数の個数、AIC(小さい方がモデル良好) 9##推定された回帰係数 10#glmnet(lasso) 11result_lasso <- cv.glmnet(x=as.matrix(csdat[,c("立地満足度","設備満足度","店舗面積満足度","トレーナー満足度","トレーナー数")]), y=csdat$顧客数, family="gaussian",alpha=1) 12plot(result_lasso) 13##推定された回帰係数 14coefficients(result_lasso,s="lambda.min") 15names(result_lasso) 16result_lasso$lambda.min 17summary(result_lasso) 18extractAIC(result_lasso) #AICの算出 モデル中の母数の個数、AIC(小さい方がモデル良好) 19
試したこと
ネットで種々検索しましたが、明確な情報が得られていません。初心者なので、スキル・知識が不足しているだけかもしれません。
補足情報(FW/ツールのバージョンなど)
data 顧客満足度データ
店舗番号 顧客数 立地満足度 設備満足度 店舗面積満足度 トレーナー満足度 トレーナー数 接客研修 入会特典
1 1 595 4.2 5.4 5.9 6.8 12 0 1
2 2 483 4.7 4.1 3.6 6.1 11 0 0
3 3 601 7.5 6.3 5.5 5.6 11 1 0
4 4 439 5.2 6.3 4.5 4.1 9 1 0
5 5 617 5.3 6.2 4.3 7.4 12 1 1
6 6 592 7.7 5.9 6.1 4.2 9 1 1
7 7 709 5.8 5.7 6.2 8.8 14 1 1
8 8 462 3.1 4.6 4.7 7.7 13 0 0
9 9 494 4.0 4.1 5.6 4.8 10 1 0
10 10 471 4.4 4.0 7.1 3.5 8 1 1
11 11 519 6.9 3.4 3.0 4.0 9 0 1
12 12 410 5.6 4.3 1.1 5.6 11 1 0
13 13 382 5.7 2.4 4.3 4.7 10 1 0
14 14 687 5.2 8.6 6.8 4.6 10 0 0
15 15 453 4.2 6.8 5.5 3.6 9 1 0
16 16 515 7.8 2.7 4.6 5.1 10 1 0
17 17 440 5.8 4.0 3.7 3.9 9 0 0
18 18 248 2.1 3.8 2.3 2.4 7 0 0
19 19 527 6.1 6.1 6.1 4.5 9 0 0
20 20 541 4.3 4.5 4.4 6.7 12 0 1
21 21 425 3.4 5.1 5.1 4.2 9 1 0
22 22 483 4.7 4.6 5.2 6.2 11 0 0
23 23 366 3.5 4.6 4.1 2.5 7 1 0
24 24 683 4.0 7.1 7.6 5.1 10 1 1
25 25 460 4.1 4.3 4.1 6.0 11 0 1
26 26 495 2.5 7.4 7.4 5.7 11 0 1
27 27 509 6.4 1.9 4.1 5.3 10 1 1
28 28 482 5.3 5.7 6.2 4.1 9 0 0
29 29 399 3.3 4.9 4.4 3.7 9 0 0
30 30 512 7.0 5.1 6.7 3.5 8 0 1
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー