私は、単純な分類問題に対して MATLAB を使用してロジスティック回帰を行うことに取り組んでいます。私の共変量は 0 ~ 1 の範囲の 1 つの連続変数ですが、カテゴリ応答は 0 (不正解) または 1 (正解) の 2 値変数です。
ロジスティック回帰を実行して、入力観測値 (上記の連続変数など) が正しいか正しくないかの確率を出力する予測子を確立しようとしています。これはかなり単純なシナリオですが、MATLAB でこれを実行するのに問題があります。
私のアプローチは次のとおりです。X
連続変数の値を含む1 つの列ベクトルと、各値(0 または 1 など)Y
の既知の分類を含む別の同じサイズの列ベクトルがあります。X
私は次のコードを使用しています:
[b,dev,stats] = glmfit(X,Y,'binomial','link','logit');
ただし、これによりp = 1.000
、係数 ( b
) が非常に高く (-650.5、1320.1)、関連する標準誤差値が 1e6 のオーダーである無意味な結果が得られます。
次に、追加のパラメーターを使用して、二項サンプルのサイズを指定しようとしました。
glm = GeneralizedLinearModel.fit(X,Y,'distr','binomial','BinomialSize',size(Y,1));
これにより、私が期待したものとより一致する結果が得られました。glmval
推定値の作成に使用される係数を抽出し( Y_fit = glmval(b,[0:0.01:1],'logit');
)、フィッティング用の配列を作成しました ( X_fit = linspace(0,1)
)。を使用して元のデータとモデルのプロットを重ね合わせたところfigure, plot(X,Y,'o',X_fit,Y_fit'-')
、結果として得られたモデルのプロットは、ロジスティック回帰プロットで典型的な「S」字型プロットの 1/4 の下のように見えました。
私の質問は次のとおりです。
1) を使用するとglmfit
奇妙な結果が得られたのはなぜですか?
2) 最初の質問にどのように対処すればよいですか: 入力値が与えられた場合、その分類が正しい確率はどれくらいですか?
3) モデル パラメータの信頼区間を取得するにはどうすればよいですか? からの出力glmval
を入力できるはずですが、私の使用では正しい結果が得られません。 stats
glmfit
glmfit
コメントや入力は非常に役立ちます。ありがとうございます。
更新 (2014 年 3 月 18 日)
mnrval
妥当な結果が得られるように思われることがわかりました。[b_fit,dev,stats] = mnrfit(X,Y+1);
whereを使用しY+1
て、バイナリ分類子を名義分類子にするだけです。
適切な入力範囲と「ii = 1:length(loopVal)」 で、さまざまな確率値[pihat,lower,upper] = mnrval(b_fit,loopVal(ii),stats);
を取得するためにループできます。pihat
loopVal = linspace(0,1)
このstats
パラメーターには大きな相関係数 (0.9973) がありますが、p 値b_fit
は 0.0847 と 0.0845 であり、解釈方法がよくわかりません。何かご意見は?また、なぜ私の例でmrnfit
うまくいくのでしょうか? を使用した場合の係数の p 値は両方ともであり、係数の推定値もまったく異なっていた glmfit
ことに注意してください。GeneralizedLinearModel.fit
p<<0.001
最後に、関数dev
からの出力をどのように解釈するのでしょうか? mnrfit
MATLAB ドキュメントには、「解ベクトルでの適合の逸脱。逸脱は、残差二乗和の一般化である」と記載されています。これはスタンドアロンの値として有用ですか、それともdev
他のモデルの値と比較するだけですか?