Rのロジスティック回帰(オッズ比)


40

でロジスティック回帰分析を試みていRます。STATAを使用してこの資料をカバーするコースに参加しました。で機能を複製するのは非常に難しいと感じていますR。この分野で成熟していますか?ドキュメントやガイダンスはほとんど入手できないようです。オッズ比出力を生成すると、インストールを必要とするように思わepicalc及び/またはepitools私は仕事に行くことができますいずれも、および/または他の人を、古いまたはマニュアルに欠けています。glmロジスティック回帰を使用してきました。どんな提案も歓迎します。

これを本当の質問にした方がいいです。ロジスティック回帰を実行してオッズ比を生成するにはどうすればよいRですか?

単変量解析のために私がやったことは次のとおりです。

x = glm(Outcome ~ Age, family=binomial(link="logit"))

多変量の場合:

y = glm(Outcome ~ Age + B + C, family=binomial(link="logit"))

私は、見てきましたxysummary(x)summary(y)

x$coefficients価値はありますか?

回答:


36

あなたは相対オッズ比として推定効果を解釈するようにしたい場合は、単にんexp(coef(x))(あなたが与え、のオッズ比の乗法変動共変量が関連付けられている場合 1で増加)。この数量のプロファイル尤度間隔については、次のことができます。eβy=1β

require(MASS)
exp(cbind(coef(x), confint(x)))  

編集:@caracalは速かった...


1
@fabianの提案に対して+1。通常、同様の間隔を生成するこれを行うための劣った方法は、ロジットスケールで間隔を計算してからオッズスケールに変換することです cbind( exp(coef(x)), exp(summary(x)$coefficients[,1] - 1.96*summary(x)$coefficients[,2]), exp(summary(x)$coefficients[,1] + 1.96*summary(x)$coefficients[,2]) )。デルタ方式もあります:ats.ucla.edu/stat/r/faq/deltamethod.htm-ロックオフ11
15:19

42

Rの出力には通常、重要な情報のみが含まれており、さらに計算する必要があるのは正しいことです。

N  <- 100               # generate some data
X1 <- rnorm(N, 175, 7)
X2 <- rnorm(N,  30, 8)
X3 <- abs(rnorm(N, 60, 30))
Y  <- 0.5*X1 - 0.3*X2 - 0.4*X3 + 10 + rnorm(N, 0, 12)

# dichotomize Y and do logistic regression
Yfac   <- cut(Y, breaks=c(-Inf, median(Y), Inf), labels=c("lo", "hi"))
glmFit <- glm(Yfac ~ X1 + X2 + X3, family=binomial(link="logit"))

coefficients()推定回帰パラメータます。ただし、を解釈する方が簡単です(インターセプトを除く)。bjexp(bj)

> exp(coefficients(glmFit))
 (Intercept)           X1           X2           X3 
5.811655e-06 1.098665e+00 9.511785e-01 9.528930e-01

オッズ比を取得するには、元の二分DVの分類クロステーブルと、最初に選択する必要のある確率しきい値に応じた予測分類が必要です。ClassLog()パッケージ内の機能も見ることができますQuantPsyc関連する質問で言及され chlとして)。

# predicted probabilities or: predict(glmFit, type="response")
> Yhat    <- fitted(glmFit)
> thresh  <- 0.5  # threshold for dichotomizing according to predicted probability
> YhatFac <- cut(Yhat, breaks=c(-Inf, thresh, Inf), labels=c("lo", "hi"))
> cTab    <- table(Yfac, YhatFac)    # contingency table
> addmargins(cTab)                   # marginal sums
     YhatFac
Yfac   lo  hi Sum
  lo   41   9  50
  hi   14  36  50
  Sum  55  45 100

> sum(diag(cTab)) / sum(cTab)        # percentage correct for training data
[1] 0.77

オッズ比については、パッケージを使用するかvcd、手動で計算を行うことができます。

> library(vcd)                       # for oddsratio()
> (OR <- oddsratio(cTab, log=FALSE)) # odds ratio
[1] 11.71429

> (cTab[1, 1] / cTab[1, 2]) / (cTab[2, 1] / cTab[2, 2])
[1] 11.71429

> summary(glmFit)  # test for regression parameters ...

# test for the full model against the 0-model
> glm0 <- glm(Yfac ~ 1, family=binomial(link="logit"))
> anova(glm0, glmFit, test="Chisq")
Analysis of Deviance Table
Model 1: Yfac ~ 1
Model 2: Yfac ~ X1 + X2 + X3
  Resid. Df Resid. Dev Df Deviance P(>|Chi|)    
1        99     138.63                          
2        96     110.58  3   28.045 3.554e-06 ***

2
ありがとう-答えを注意深く調べる必要があります。STATAでは、オッズ比と信頼区間を簡単に実行logitlogisticて取得できます。私は、これが非常に複雑で、標準ではないように見えることに多少不満を感じていますRexp(cbind(coef(x), confint(x)))ODとCIを取得するために、以下のfabiansの回答から使用できますか?あなたの答えが何を提供しているのかはっきりしませんか?
-SabreWolfy

3
@SabreWolfy私はあなたが何のORを指しているのか分かりませんでした:元々、あなたは実際のカテゴリーメンバーシップと予測メンバーシップ(cTab私の答えの一部)を比較する分類表のORを意味すると思いました。しかし、今ではおそらく意味することがわかります。ファビアンが説明したように、は、が1単位増加したときに予測オッズが変化する係数に等しくなります。これは、「1ユニット増加後」と「1ユニット増加前」のオッズの比です。そう、あなたはただファビアンの答えを使うことができます。exp(bj)exp(bj)Xj
カラカル

4
実際に@SabreWolfy人々がstata / sas / spssなどの単一のボタンをクリックして、それが何を意味するかについての手掛かりがなくてもオッズ比(適合統計、タイプIII SS、ここで好きなものを挿入)を取得できることはイライラしますそれを計算する方法/特定の状況で意味があるかどうか/そして(おそらくもっと重要な)言語自体の実用的な知識がなくても。
rawr


5

epiDisplayパッケージはこれを非常に簡単に行います。

library(epiDisplay)
data(Wells, package="carData")
glm1 <- glm(switch~arsenic+distance+education+association, 
            family=binomial, data=Wells)
logistic.display(glm1)
Logistic regression predicting switch : yes vs no 

                       crude OR(95%CI)         adj. OR(95%CI)         P(Wald's test) P(LR-test)
arsenic (cont. var.)   1.461 (1.355,1.576)     1.595 (1.47,1.731)     < 0.001        < 0.001   

distance (cont. var.)  0.9938 (0.9919,0.9957)  0.9911 (0.989,0.9931)  < 0.001        < 0.001   

education (cont. var.) 1.04 (1.021,1.059)      1.043 (1.024,1.063)    < 0.001        < 0.001   

association: yes vs no 0.863 (0.746,0.999)     0.883 (0.759,1.027)    0.1063         0.1064    

Log-likelihood = -1953.91299
No. of observations = 3020
AIC value = 3917.82598

ロジスティックディスプレイをまたはのようなラテックスラッパーと組み合わせる方法はありますoutregxtable
信頼できるミスノマー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.