MATLABでのロジスティック回帰のための名義予測子と連続予測子の間の相互作用のコーディング


8

したがって、データは次のように構成されています。

我々は持っています M参加者は、各参加者を3つのグループ(G A,B,C)、そして参加者ごとに N連続変数のサンプル。また、0または1の値を予測しようとしています。

これらの値を予測する際に、MATLABを使用して連続変数とカテゴリ変数間の相互作用をテストするにはどうすればよいでしょうか。


@Thislstheldロジスティック回帰をフィッティングするためにどのコードを使用していますか?
chl

@chl-'link'、 'logit'、またはmnrfitを使用したglmfitのいずれかが機能します。どちらも特に優先されません。
mpacer

これは統計的な質問ではないと思いますが、StackOverflowでより適切に配置されるプログラミングの質問...
Manoel Galdino

@chlによる返答が示すように、@ Manoelは、この質問は基本的に統計的な性質のものです。このような質問がトピックから外れていると、このサイトの質問の約半分になります。
whuber

回答:


9

最も簡単な方法であるIMOはglmfit、生の(観測された)値の行列または設計行列のいずれかを受け入れるため、設計行列を自分で作成することです。完全なモデルを作成すれば、相互作用項のコーディングはそれほど難しくありません。2つの予測子があるとします。x (連続)および g (カテゴリー、3つの順序付けられていないレベル、 g=1,2,3)。ウィルキンソンの表記法を使用してy ~ x + g + x:g、このモデルをとして記述し、左側は無視します(二項結果の場合は、ロジットリンク関数を使用します)。gレベルをコード化するために必要なダミーベクトルは2つだけ(特定の観測に対して存在/不在として)なので、5つの回帰係数と切片項があります。これは次のように要約できます。

β0+β1x+β2Ig=2+β3Ig=3+β4x×Ig=2+β5x×Ig=3,

どこ I のレベルをコード化する指標行列を表します g

Matlabでは、オンラインの例を使用して、次のようにします。

x = [2100 2300 2500 2700 2900 3100 3300 3500 3700 3900 4100 4300]';
g = [1 1 1 1 2 2 2 2 3 3 3 3]';
gcat = dummyvar(g);
gcat = gcat(:,2:3); % remove the first column
X = [x gcat x.*gcat(:,1) x.*gcat(:,2)]; 
n = [48 42 31 34 31 21 23 23 21 16 17 21]';
y = [1 2 0 3 8 8 14 17 19 15 17 21]';
[b, dev, stats] = glmfit(X, [y n], 'binomial', 'link', 'probit');

デフォルトで含まれているため、切片の列は含めませんでした。設計マトリックスは次のようになります

    2100           0           0           0           0
    2300           0           0           0           0
    2500           0           0           0           0
    2700           0           0           0           0
    2900           1           0        2900           0
    3100           1           0        3100           0
    3300           1           0        3300           0
    3500           1           0        3500           0
    3700           0           1           0        3700
    3900           0           1           0        3900
    4100           0           1           0        4100
    4300           0           1           0        4300

相互作用項はx、対応する列g(g = 2およびg = 3、最初のレベルは必要ないため)の積としてコード化されていることがわかります。

結果は、係数、標準誤差、統計量、および(stats構造体からの)p値として以下に示します。

   int.   -3.8929    2.0251   -1.9223    0.0546
   x       0.0009    0.0008    1.0663    0.2863
   g2     -3.2125    2.7622   -1.1630    0.2448
   g3     -5.7745    7.5542   -0.7644    0.4446
   x:g2    0.0013    0.0010    1.3122    0.1894
   x:g3    0.0021    0.0021    0.9882    0.3230

これで、相互作用のテストは、上の完全なモデルと縮小モデル(設計項の最後の2列である相互作用の項を省略)からの逸脱度の差を計算することで実行できます。これは手動で、またはlratiotest尤度比仮説検定を提供する関数を使用して行うことができます。完全なモデルの逸脱度は4.3122(dev)ですが、相互作用のないモデルの逸脱度は6.4200(私が使用しましたglmfit(X(:,1:3), [y n], 'binomial', 'link', 'probit');)であり、関連するLRテストには2つの自由度(2つのモデル間のパラメーター数の違い)があります。スケーリングされた逸脱度はGLMの対数尤度の2倍に過ぎないので、

[H, pValue, Ratio, CriticalValue] = lratiotest(4.3122/2, 6.4200/2, 2)

ここで、統計は χ22 df(臨界値は5.9915、を参照chi2inv(0.95, 2))。出力は重要ではない結果を示しています。観測されたサンプル間xとの間に相互作用が存在すると結論付けることはできませんg

上記の手順を、お好みの便利な関数にまとめることができると思います。(LRテストはごく少数のコマンドで手動で行われる可能性があることに注意してください!)


これらの結果を、次に示すR出力と照合しました。

Rコードは次のとおりです。

x <- c(2100,2300,2500,2700,2900,3100,3300,3500,3700,3900,4100,4300)
g <- gl(3, 4)
n <- c(48,42,31,34,31,21,23,23,21,16,17,21)
y <- c(1,2,0,3,8,8,14,17,19,15,17,21)
f <- cbind(y, n-y) ~ x*g
model.matrix(f)  # will be model.frame() for glm()
m1 <- glm(f, family=binomial("probit"))
summary(m1)

以下は、完全なモデルの係数の結果です。

Call:
glm(formula = f, family = binomial("probit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7124  -0.1192   0.1494   0.3036   0.5585  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)  
(Intercept) -3.892859   2.025096  -1.922   0.0546 .
x            0.000884   0.000829   1.066   0.2863  
g2          -3.212494   2.762155  -1.163   0.2448  
g3          -5.774400   7.553615  -0.764   0.4446  
x:g2         0.001335   0.001017   1.312   0.1894  
x:g3         0.002061   0.002086   0.988   0.3230  

2つのネストされたモデルを比較するために、次のコマンドを使用しました。

m0 <- update(m1, . ~ . -x:g)
anova(m1,m0)

次の「偏差テーブル」が生成されます。

Analysis of Deviance Table

Model 1: cbind(y, n - y) ~ x + g
Model 2: cbind(y, n - y) ~ x * g
  Resid. Df Resid. Dev Df Deviance
1         8     6.4200            
2         6     4.3122  2   2.1078

ところで、これを使用したい人のために、参考のために、2ではなく-2で除算する必要があります。そうしないと、エラーが返されます。参照en.wikipedia.org/wiki/Deviance_%28statistics%29
mpacer

また、多くの感謝-これは私の問題の理解と私が扱っていた問題の一般的なクラスの両方で信じられないほど役に立ちました:)。
mpacer 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.