理学療法士がまとめたノート

統計学備忘録 since2016

Rを使って統計学を勉強するブログです

makedummiesを使ったダミー変数の作成 

2018-07-19投稿、最終更新日2019-07-07

下のようなカテゴリカルデータをダミー変数に変更します

治療 効果
NO  NO
YES YES
YES NO
NO  YES
YES YES
YES YES
NO  YES
YES NO
NO  NO
NO  YES
NO  NO
NO  NO
YES YES
YES YES
YES YES
YES NO
NO  NO
NO  NO
YES YES
NO  NO
YES YES
YES YES
YES YES
NO  YES
NO  NO
YES YES
NO  NO
NO  NO
YES NO
NO  NO
NO  YES
NO  NO
NO  YES
YES NO
YES YES

サンプルデータをコピーしてRにペーストします

s_data <- read.table("clipboard", header=T )

summary(s_data)
  治療     効果   
 NO :18   NO :17  
 YES:17   YES:18  

makedummiesをインストールします

install.packages("makedummies")
library(makedummies)

一瞬でダミー変数に代わります

d_data <- makedummies(s_data, basal_level = TRUE)

   治療_NO 治療_YES 効果_NO 効果_YES
1        1        0       1        0
2        0        1       0        1
3        0        1       1        0
4        1        0       0        1
5        0        1       0        1

colnames(d_data) <- c("治療なし","治療あり","効果なし","効果あり")

   効果なし 効果あり 治療なし 治療あり
1         1        0        1        0
2         0        1        0        1
3         0        1        1        0
4         1        0        0        1
5         0        1        0        1
#1列目と3列目を使用した場合の分割表を作成
#行=治療(0=あり、1=なし)
#列=効果(0=あり、1=なし)

d_data2 <- xtabs(~d_data[,2]+d_data[,3])

           d_data[, 3]
d_data[, 1]  0  1
          0 12  5
          1  6 12

name <- list(治療=c("あり","なし"), 効果=c("あり","なし"))
dimnames(d_data2)<-name
d_data2

      効果
治療   あり なし
  あり   12    5
  なし    6   12

パッケージEpiで分割表の解析を一瞬で!

install.packages("Epi")
library(Epi) 
twoby2(d_data2)

2 by 2 table analysis: 
------------------------------------------------------ 
Outcome   : あり 
Comparing : あり vs. なし 

     あり なし    P(あり) 95% conf. interval
あり   12    5     0.7059    0.4581   0.8720
なし    6   12     0.3333    0.1580   0.5712

                                   95% conf. interval
             Relative Risk: 2.1176    1.0289   4.3584
         Sample Odds Ratio: 4.8000    1.1471  20.0850
Conditional MLE Odds Ratio: 4.5683    0.9465  25.7201
    Probability difference: 0.3725    0.0427   0.6073

             Exact P-value: 0.0437 
        Asymptotic P-value: 0.0317 
------------------------------------------------------

makedummiesの詳しい解説は、
github.com

オッズ比の信頼区間が1をまたいでいるのでパラメーターは有意になるはず!
ロジスティック回帰で確認してみます

fit <- glm(効果あり~治療あり, data = d_data, family = binomial)
summary(fit)

Call:
glm(formula = 効果あり ~ 治療あり, family = binomial, data = d_data)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.4823  -0.8346  -0.8346   0.9005   1.5645  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  -0.8755     0.5323  -1.645   0.1000  
治療あり      1.5686     0.7303   2.148   0.0317 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 48.492  on 34  degrees of freedom
Residual deviance: 43.512  on 33  degrees of freedom
AIC: 47.512

Number of Fisher Scoring iterations: 4