Untitled

카이제곱 (독립성) 검정 3+1가지 방법

  • 범주-범주 교차표를 이용한 연관성 확인
  • COPD데이터로 sex별 DM(당뇨)의 연관성 확인
# 데이터 준비
df1 <- read.csv("week4/4주차_코드/COPD_Lung_Cancer.csv", header=T)
head(df1)
##   PERSON_ID SEX DTH CTRB_PT_TYPE_CD   BMI BP_LWST BLDS TOT_CHOLE  HMG
## 1  10000065   1   0               8 25.73      90  112       177 12.2
## 2  10000183   1   0               9 22.77     100  105       177 15.7
## 3  10000269   1   0               8 24.54      70   76       156 13.1
## 4  10000471   1   0               1 21.63     100   70       228 14.0
## 5  10000788   2   0               7 25.65      54  113       199 12.1
## 6  10001096   2   0               3 19.84      60  137       182 12.0
##   FMLY_CANCER_PATIEN_YN SMK_STAT_TYPE DRNK_HABIT EXERCI_FREQ lungC copd
## 1                     1             1          1           1     0    0
## 2                     1             1          5           1     0    1
## 3                     1             1          1           1     1    1
## 4                    NA             1          1           1     0    1
## 5                     1             1          1           1     0    0
## 6                     1             1          1           1     0    0
##   Asthma DM Tub before_op_score after_op_score
## 1      0  1   0              44             52
## 2      1  1   0              44             53
## 3      0  1   1              37             60
## 4      0  1   0              50             44
## 5      1  1   0              31             43
## 6      0  0   0              34             49
# 방법1 : table( 칼럼인덱싱, 칼럼인덱싱 ) 을 chisq.test()에
chisq.test( table( df1$SEX, df1$DM )) # 0.8943
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(df1$SEX, df1$DM)
## X-squared = 0.017658, df = 1, p-value = 0.8943
# 방법2 : table없이 바로
chisq.test( df1$SEX, df1$DM ) # 0.8943
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  df1$SEX and df1$DM
## X-squared = 0.017658, df = 1, p-value = 0.8943
# 방법3 : xtabs( ~ 칼럼1+칼럼2, data= ) 를 summary()
x <- xtabs( ~ SEX + DM , data = df1 )
summary(x) #0.8412
## Call: xtabs(formula = ~SEX + DM, data = df1)
## Number of cases in table: 944 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 0.04013, df = 1, p-value = 0.8412
# 방법4 : mytable() 칼럼순서 상관x
library(moonBook) 
mytable( DM ~ SEX , data= df1) # 0.894
## 
##    Descriptive Statistics by 'DM'  
## ____________________________________ 
##             0           1        p  
##          (N=375)     (N=569)  
## ------------------------------------ 
##  SEX                           0.894
##    - 1 158 (42.1%) 236 (41.5%)      
##    - 2 217 (57.9%) 333 (58.5%)      
## ------------------------------------

비모수검정 2집단(mann-whitney, wilcoxon rank-sum) 3집단(kruskal wallis)

  • COPD 중 100개 행만 뽑아 정규분포를 안이루도록 만든다음
  • sex(2집단)별 BMI 평균차이 검정
  • SMK_STAT_TYPE(3집단)별 BMI 평균차이 검정
# 데이터 준비
df2 <- df1[1:100,]
head(df2)
##   PERSON_ID SEX DTH CTRB_PT_TYPE_CD   BMI BP_LWST BLDS TOT_CHOLE  HMG
## 1  10000065   1   0               8 25.73      90  112       177 12.2
## 2  10000183   1   0               9 22.77     100  105       177 15.7
## 3  10000269   1   0               8 24.54      70   76       156 13.1
## 4  10000471   1   0               1 21.63     100   70       228 14.0
## 5  10000788   2   0               7 25.65      54  113       199 12.1
## 6  10001096   2   0               3 19.84      60  137       182 12.0
##   FMLY_CANCER_PATIEN_YN SMK_STAT_TYPE DRNK_HABIT EXERCI_FREQ lungC copd
## 1                     1             1          1           1     0    0
## 2                     1             1          5           1     0    1
## 3                     1             1          1           1     1    1
## 4                    NA             1          1           1     0    1
## 5                     1             1          1           1     0    0
## 6                     1             1          1           1     0    0
##   Asthma DM Tub before_op_score after_op_score
## 1      0  1   0              44             52
## 2      1  1   0              44             53
## 3      0  1   1              37             60
## 4      0  1   0              50             44
## 5      1  1   0              31             43
## 6      0  0   0              34             49
# mann-whitney = wilcoxon rank sum test
# cf) wilcoxon signed rank -> signed = 절대값 = 차이를 이용 = 대응표본t-test의 비모수
wilcox.test( BMI ~ SEX, data = df2) # 0.6791
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  BMI by SEX
## W = 1189.5, p-value = 0.6791
## alternative hypothesis: true location shift is not equal to 0
wilcox.test( BMI ~ SEX, data = df2, exact = F) # 만약 동률이 생길 경우, exact = F 옵션줄 것
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  BMI by SEX
## W = 1189.5, p-value = 0.6791
## alternative hypothesis: true location shift is not equal to 0
# kruskal - wallis test 
kruskal.test( BMI ~ SMK_STAT_TYPE, data = df2) #0.1803
## 
##  Kruskal-Wallis rank sum test
## 
## data:  BMI by SMK_STAT_TYPE
## Kruskal-Wallis chi-squared = 3.4263, df = 2, p-value = 0.1803
Untitled

비모수 검정(Non-parametic)

  • 정규성을 만족하지 않거나 데이터가 작을 때 사용한다.

1. Mann-Whitney test (or Wilcoxon rank-sum test)

  • 독립표본 t-test (1범주-2집단에 대한 숫자형의 평균차이)에 대한 비모수적 검정
  • 2가지 방법이 있다.
# 데이터 준비
library(moonBook)
data(acs)

acs2 <- acs[1:100, ]
head(acs2)
##   age    sex cardiogenicShock   entry              Dx   EF height weight
## 1  62   Male               No Femoral           STEMI 18.0    168     72
## 2  78 Female               No Femoral           STEMI 18.4    148     48
## 3  76 Female              Yes Femoral           STEMI 20.0     NA     NA
## 4  89 Female               No Femoral           STEMI 21.8    165     50
## 5  56   Male               No  Radial          NSTEMI 21.8    162     64
## 6  73 Female               No  Radial Unstable Angina 22.0    153     59
##        BMI obesity  TC LDLC HDLC  TG  DM HBP smoking
## 1 25.51020     Yes 215  154   35 155 Yes  No  Smoker
## 2 21.91381      No  NA   NA   NA 166  No Yes   Never
## 3       NA      No  NA   NA   NA  NA  No Yes   Never
## 4 18.36547      No 121   73   20  89  No  No   Never
## 5 24.38653      No 195  151   36  63 Yes Yes  Smoker
## 6 25.20398     Yes 184  112   38 137 Yes Yes   Never
# 방법1 : mann-whitney test 1
#  - 물결로 칼럼명만 입력 & exact옵션주기 (a logical indicating whether an exact p-value should be computed.)
# **** exact 옵션 - 순서대로 나열 시, 같은 값이 존재하면 순서를 정하는데 문제가 생겨 디폴트인 exact test로 p-value를 구하지 못하고, 대신 정규 분포에 근사 시켜 p-value를 구한다. Exact=FALSE를 옵션으로 추가하여 정규분포에 근사 시키는 방법을 선택하면 디폴트인 exact test를 시도하지 않으므로 Warning을 없앨 수 있다.
wilcox.test( BMI ~ sex, data = acs2, exact = FALSE ) 
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  BMI by sex
## W = 946, p-value = 0.6327
## alternative hypothesis: true location shift is not equal to 0
# 방법2 : mann-whitney test 2
# - 직접 2개 집단(class, 수준)을 인덱싱하여 따로따로 데이터를 만든 뒤, 넣어주기
# - 이 경우는 exact = False옵션을 안주어도 된다.
male_bmi <- acs2[ acs2$sex == "Male", c("BMI")]
female_bmi <- acs2[ acs2$sex == "Female", c("BMI")]
wilcox.test(male_bmi, female_bmi)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  male_bmi and female_bmi
## W = 1069, p-value = 0.6327
## alternative hypothesis: true location shift is not equal to 0

2. wilcoxon signed rank test

  • 대응표본 t-test(실험 전/후 데이터의 평균차이)에 대한 비모수적 검정
# 데이터 준비( 실험 전/후 -> 데이터 개수 같아야함 )
x1 <- c(51.4, 52.0, 45.5, 54.5, 52.3, 50.9, 52.7, 50.3, 53.8, 53.1)
x2 <- c(50.1, 51.5, 45.9, 53.1, 51.8, 50.3, 52.0, 49.9, 52.5, 53.0)

# wilcoxon signed rank test : paired t-test의 비모수 검정
wilcox.test(x1, x2, 
            alternative = c("greater"), paired = TRUE, conf.level = 0.95, # 95% 신뢰구간 -> 5%유의수준
            exact = F) # 오류나서 내가 추가해준 것
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  x1 and x2
## V = 52.5, p-value = 0.006172
## alternative hypothesis: true location shift is greater than 0

3. kruskal wallis test 과 사후분ㅅ

  • 1way ANOVA의 비모수 검정
# 데이터 준비
head(acs2)
##   age    sex cardiogenicShock   entry              Dx   EF height weight
## 1  62   Male               No Femoral           STEMI 18.0    168     72
## 2  78 Female               No Femoral           STEMI 18.4    148     48
## 3  76 Female              Yes Femoral           STEMI 20.0     NA     NA
## 4  89 Female               No Femoral           STEMI 21.8    165     50
## 5  56   Male               No  Radial          NSTEMI 21.8    162     64
## 6  73 Female               No  Radial Unstable Angina 22.0    153     59
##        BMI obesity  TC LDLC HDLC  TG  DM HBP smoking
## 1 25.51020     Yes 215  154   35 155 Yes  No  Smoker
## 2 21.91381      No  NA   NA   NA 166  No Yes   Never
## 3       NA      No  NA   NA   NA  NA  No Yes   Never
## 4 18.36547      No 121   73   20  89  No  No   Never
## 5 24.38653      No 195  151   36  63 Yes Yes  Smoker
## 6 25.20398     Yes 184  112   38 137 Yes Yes   Never
# 1. kruskal wallis test
kruskal.test( weight ~ factor( smoking ), data=acs2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  weight by factor(smoking)
## Kruskal-Wallis chi-squared = 11.699, df = 2, p-value = 0.002882
# 2. 사후분석
# -  kruskal wallis test에서 3집단 중 적어도 하나의 집단이 차이가 있다고 할 경우
# 2_1. PMCMR 패키지 : kruskal willis test -> Tukey
# install.packages("PMCMR")
library(PMCMR)
## PMCMR is superseded by PMCMRplus and will be no longer maintained. You may wish to install PMCMRplus instead.
posthoc.kruskal.nemenyi.test(x=acs2$weight, g=as.factor(acs2$smoking), method="Tukey")
## Warning in posthoc.kruskal.nemenyi.test.default(x = acs2$weight, g =
## as.factor(acs2$smoking), : Ties are present, p-values are not corrected.
## 
##  Pairwise comparisons using Tukey and Kramer (Nemenyi) test  
##                    with Tukey-Dist approximation for independent samples 
## 
## data:  acs2$weight and as.factor(acs2$smoking) 
## 
##        Ex-smoker Never 
## Never  0.2784    -     
## Smoker 0.3899    0.0019
## 
## P value adjustment method: none
# install.packages("PMCMRplus") # 사용할려니 이것으로 깔아라고함( PMCMR은 더이상 지원 안할 예정)
# library(PMCMRplus)



# 2_2. n(on)par(ametic) comp(arison) 패키지 - mctp()함수
# 마찬가지로 Tukey로 하는 것 같다.
# - Estimation Method: Global Pseudo ranks 
# - Type of Contrast : Tukey 

# install.packages("nparcomp")
require(nparcomp)
## Loading required package: nparcomp
## Loading required package: multcomp
## Loading required package: mvtnorm
## Loading required package: survival
## Loading required package: TH.data
## Loading required package: MASS
## 
## Attaching package: 'TH.data'
## The following object is masked from 'package:MASS':
## 
##     geyser
result=mctp(weight~smoking, data=acs2)
## 
##  #----------------Nonparametric Multiple Comparisons for relative effects---------------# 
##  
##  - Alternative Hypothesis:  True differences of relative effects are less or equal than 0 
##  - Estimation Method:  Global Pseudo Ranks 
##  - Type of Contrast : Tukey 
##  - Confidence Level: 95 % 
##  - Method = Fisher with 33 DF 
##  
##  #--------------------------------------------------------------------------------------# 
## 
summary(result) # Analysis 탭으로 확인
## 
##  #----------------Nonparametric Multiple Comparisons for relative effects---------------# 
##  
##  - Alternative Hypothesis:  True differences of relative effects are less or equal than 0 
##  - Estimation Method: Global Pseudo ranks 
##  - Type of Contrast : Tukey 
##  - Confidence Level: 95 % 
##  - Method = Fisher with 33 DF 
##  
##  #--------------------------------------------------------------------------------------# 
##  
##  #----Data Info-------------------------------------------------------------------------# 
##              Sample Size    Effect     Lower     Upper
## Ex-smoker Ex-smoker   20 0.5054632 0.4243261 0.5863135
## Never         Never   39 0.3836336 0.3237192 0.4473026
## Smoker       Smoker   37 0.6109032 0.5455423 0.6725069
## 
##  #----Contrast--------------------------------------------------------------------------# 
##                    Ex-smoker Never Smoker
## Never - Ex-smoker         -1     1      0
## Smoker - Ex-smoker        -1     0      1
## Smoker - Never             0    -1      1
## 
##  #----Analysis--------------------------------------------------------------------------# 
##                    Estimator  Lower Upper Statistic     p.Value
## Never - Ex-smoker     -0.122 -0.309 0.074    -1.522 0.289976447
## Smoker - Ex-smoker     0.105 -0.093 0.296     1.296 0.403133946
## Smoker - Never         0.227  0.081 0.364     3.767 0.001777051
## 
##  #----Overall---------------------------------------------------------------------------# 
##   Quantile     p.Value
## 1 2.443167 0.001777051
## 
##  #--------------------------------------------------------------------------------------#

mytable()로 한다면? (사후분석은x)

  • method = 1 : 정규분포 가정 모수적 -> 2개 평균 +- 표준편차 제시하는 t-test
  • method = 2 : 비모수적인 통계방법 가정 -> 중앙값 [ 1, 3] 제시하는 비모수 2개 -> wilcox(대응표본), mann(독립표본)
  • method = 3 : 실제로 잔차의 정규성 검정(샤피로) 등등 해놓고 나서 알아서 판단하게 한다
head(acs2)
##   age    sex cardiogenicShock   entry              Dx   EF height weight
## 1  62   Male               No Femoral           STEMI 18.0    168     72
## 2  78 Female               No Femoral           STEMI 18.4    148     48
## 3  76 Female              Yes Femoral           STEMI 20.0     NA     NA
## 4  89 Female               No Femoral           STEMI 21.8    165     50
## 5  56   Male               No  Radial          NSTEMI 21.8    162     64
## 6  73 Female               No  Radial Unstable Angina 22.0    153     59
##        BMI obesity  TC LDLC HDLC  TG  DM HBP smoking
## 1 25.51020     Yes 215  154   35 155 Yes  No  Smoker
## 2 21.91381      No  NA   NA   NA 166  No Yes   Never
## 3       NA      No  NA   NA   NA  NA  No Yes   Never
## 4 18.36547      No 121   73   20  89  No  No   Never
## 5 24.38653      No 195  151   36  63 Yes Yes  Smoker
## 6 25.20398     Yes 184  112   38 137 Yes Yes   Never
library(moonBook)
# method = 2 : 강제로 비모수적 검정
# - 2집단  mann-whitney(독립표본), wilcox(대응표본), 3집단 kruskal - willis test
mytable(smoking ~ weight, data = acs2, method = 2) # 0.003 - 직접수행한것에 반올림만 하면 똑같다!
## 
##               Descriptive Statistics by 'smoking'              
## ________________________________________________________________ 
##            Ex-smoker          Never            Smoker        p  
##              (N=20)           (N=42)           (N=38)     
## ---------------------------------------------------------------- 
##  weight 60.0 [54.0;69.5] 59.0 [50.0;64.0] 65.0 [60.0;71.0] 0.003
## ----------------------------------------------------------------
# - 직접 kruksal
kruskal.test( weight ~ factor( smoking ), data=acs2) #  0.002882
## 
##  Kruskal-Wallis rank sum test
## 
## data:  weight by factor(smoking)
## Kruskal-Wallis chi-squared = 11.699, df = 2, p-value = 0.002882
# method = 3 : 잔차의 정규성 검정을 통해 판단후 모수적or비모수적 검정 ( 2집단 : t-test or mann/wilcoxon ) (3집단 : anova or kruskal )
mytable(smoking ~ weight, data = acs2, method = 3) # 직접 모수/비모수인지 잔차로 정규성을 검정한 뒤 -> 그에 따라 검정 -> 평균+-표준편차면 정규성O 모수적 /  중앙값[1Q, 3Q]면 정규성X 비모수적
## 
##        Descriptive Statistics by 'smoking'      
## _________________________________________________ 
##          Ex-smoker     Never      Smoker      p  
##           (N=20)      (N=42)      (N=38)   
## ------------------------------------------------- 
##  weight 62.6 ± 10.2 57.7 ±  9.0 66.0 ±  9.7 0.001
## -------------------------------------------------
Untitled

범주-범주의 교차표(contingency table) 만드는 2가지 방법

  • table()
  • descr패키지의 CrossTable()
# 데이터 준비
library(moonBook)
data(acs)


# 1. table()
table(acs$sex)
## 
## Female   Male 
##    287    570
table(acs$sex, acs$obesity)
##         
##           No Yes
##   Female 194  93
##   Male   373 197
# 2. descr패키지-CrossTable
# install.packages("descr")
library(descr)
a <- CrossTable(acs$sex, acs$obesity) # 빈도 뿐만 아니라 비율도 보여준다.
a
##    Cell Contents 
## |-------------------------|
## |                       N | 
## | Chi-square contribution | 
## |           N / Row Total | 
## |           N / Col Total | 
## |         N / Table Total | 
## |-------------------------|
## 
## ================================
##            acs$obesity
## acs$sex       No     Yes   Total
## --------------------------------
## Female       194      93     287
##            0.089   0.175        
##            0.676   0.324   0.335
##            0.342   0.321        
##            0.226   0.109        
## --------------------------------
## Male         373     197     570
##            0.045   0.088        
##            0.654   0.346   0.665
##            0.658   0.679        
##            0.435   0.230        
## --------------------------------
## Total        567     290     857
##            0.662   0.338        
## ================================

카이제곱 검정 - 관측값과 특정한 확률(기존의 기대값)와의 적합도 검정

  • H0 : 관측값과 기대값이 동일하다 ( chisq.test ( 범주별 빈도, p = 기대값 ))
  • 동전의 앞면/뒷면의 확률은 1/2인데, 관측결과 90/200, 110/200 이 나왔다면
  • 그게 적합하게 나온 건지 확인하는 것
# 1. 관측값 
obs <- c(19, 41, 40) # 19 / 전체 수 로 확률계산이 내부에서 될 것이고, 기대값과 비교할 듯..

# 2. 특정한 확률(기대값)
null.probs <- c(2/10, 3/10, 5/10)

# 3. 적합도 검정
chisq.test(obs, p = null.probs)
## 
##  Chi-squared test for given probabilities
## 
## data:  obs
## X-squared = 6.0833, df = 2, p-value = 0.04776
#### acs데이터로 해보기
# 1. table()로 범주의 빈도를 관측값으로 가져오기
smk_type <- table(acs$smoking) # 범주1개를 table()을 이용하여, 범주별 빈도를 변수에 담음
smk_type
## 
## Ex-smoker     Never    Smoker 
##       204       332       321
# 2. 기대값(특정확률)은 직접 변수에 입력해주기 (집단의 수만큼)
smk_type_prob <- c(0.3, 0.35, 0.35)

# 3. 관측값(범주별 빈도) + 기대값으로 카이제곱 적합도 검정
chisq.test( smk_type, p = smk_type_prob)
## 
##  Chi-squared test for given probabilities
## 
## data:  smk_type
## X-squared = 15.869, df = 2, p-value = 0.0003582

카이제곱 검정(Chisq test) - 2개 범주 독립성 검정의 3가지 방법대

  • chisq.test( 칼럼인덱싱, 칼럼인덱싱 )
  • H0 : 두 범주 X, Y는 독립이다.
  • 범주-범주의 교차표를 바탕으로 2개의 범주의 연관성(독립성)검정
  • X-squared : 카이제곱 검정통계량 -> 교차표상 각 cell의 ( (x-E)^2 / E)를 구해서 다 더한 것
# 1. 교차표(table) 생성 후 검정
table( acs$sex, acs$obesity )
##         
##           No Yes
##   Female 194  93
##   Male   373 197
chisq.test(table( acs$sex, acs$obesity ))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(acs$sex, acs$obesity)
## X-squared = 0.30627, df = 1, p-value = 0.58
# 2. 바로 검정
chisq.test(acs$sex, acs$obesity)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  acs$sex and acs$obesity
## X-squared = 0.30627, df = 1, p-value = 0.58
# 3. xtabs(교차표) & summary로 검정
xtabs( ~ sex + obesity, data = acs )
##         obesity
## sex       No Yes
##   Female 194  93
##   Male   373 197
summary( xtabs( ~ sex + obesity, data = acs ) )
## Call: xtabs(formula = ~sex + obesity, data = acs)
## Number of cases in table: 857 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 0.3968, df = 1, p-value = 0.5288

카이제곱 검정 다중비교 - 범주-범주이나, 독립변수의 집단이 3개 이상이어서 nC2로 -> 종속변수(2집단)에 독립인지 아닌지 본다.

  • fifer 패키지의 chisq.post.hoc( table() )
# 깃허브로 설치
# library(devtools)
# install_github("cran/fifer")

# 다중검정 in 3x3
library(fifer)
## Loading required package: MASS
table( acs$smoking, acs$Dx )
##            
##             NSTEMI STEMI Unstable Angina
##   Ex-smoker     42    66              96
##   Never         50    97             185
##   Smoker        61   141             119
chisq.post.hoc( table( acs$smoking, acs$Dx ) )
## Adjusted p-values used the fdr method.
##             comparison  raw.p  adj.p
## 1  Ex-smoker vs. Never 0.1112 0.1112
## 2 Ex-smoker vs. Smoker 0.0233 0.0350
## 3     Never vs. Smoker 0.0000 0.0000
chisq.post.hoc( table( acs$Dx, acs$smoking ) )
## Adjusted p-values used the fdr method.
##                   comparison  raw.p  adj.p
## 1           NSTEMI vs. STEMI 0.2964 0.2964
## 2 NSTEMI vs. Unstable Angina 0.0114 0.0172
## 3  STEMI vs. Unstable Angina 0.0000 0.0000

Fisher’s exact Test

  • 범주-범주의 교차표에서 각 cell의 Expected(기대값)이 5가 안되는 것이 25%이상(1/4이상)시 사용
# 교차표
table(mtcars$carb, mtcars$cyl)
##    
##     4 6 8
##   1 5 2 0
##   2 6 0 4
##   3 0 0 3
##   4 0 4 6
##   6 0 1 0
##   8 0 0 1
# 카이검정제곱 -> 카이제곱 approximation은 정확하지 않을수도 있습니다 -> Fisher로!
chisq.test(table(mtcars$carb, mtcars$cyl))
## Warning in chisq.test(table(mtcars$carb, mtcars$cyl)): Chi-squared
## approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(mtcars$carb, mtcars$cyl)
## X-squared = 24.389, df = 10, p-value = 0.006632
# fisher's exact test
fisher.test(mtcars$carb, mtcars$cyl)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  mtcars$carb and mtcars$cyl
## p-value = 0.0003345
## alternative hypothesis: two.sided

Trend test

  • 순서를 가진 3집단이상의 범주(독립변수)에 대해 종속변수(2집단의 범주)가
  • H0 : 비율이 동일하다(일정하다)
  • H1 : 증가/감소 추세가 있다
# 1. trend-test 기본 
# 독립변수가 열 / 종속변수의 2개 집단이 행으로 나열된 교차표를 생각하자.
# 독립변수의 집단이 3개라고 가정 -> 3열
# 종속변수의 집단 2개 -> 2행 
prop.trend.test( c(15, 10, 30), # 종속변수 집단1 
                 c(35, 22, 44)) # 종속변수 집단2
## 
##  Chi-squared Test for Trend in Proportions
## 
## data:  c(15, 10, 30) out of c(35, 22, 44) ,
##  using scores: 1 2 3
## X-squared = 5.2588, df = 1, p-value = 0.02184
# 2. DescTools 패키지 - CochranArmitageTest()
# install.packages("DescTools")
library("DescTools")

# 데이터(matrix) 준비  2행 3열(독립변수 집단개수 = 열)
test <- matrix(c(2372,1859,2373,                 3065,2837,3065), byrow=TRUE, nrow=2)

# Desc( test )
# trend test 
CochranArmitageTest(test)
## 
##  Cochran-Armitage test for trend
## 
## data:  test
## Z = 0.011174, dim = 3, p-value = 0.9911
## alternative hypothesis: two.sided


5명의 발표자가 있었고, 나는 해당사항이 없었다.

나는 거의 BioInformatics에 필요한 기초 자료 학습에 집중하였고, 나만의 분석라이브러리도 만들었다. 또한, 민감한 의료데이터의 샘플을 받아 처리과정도 살펴보았다.

어느 인턴들보다 많은 학습을 했다고 자부하고, 교수님 & 연구실분들에게 크게 감사하고 있다.특히 논문에 사용되는 통계기법들을 학습하고 직접 r로 구현해본 것.
내 논문실험에 직접 대입해본 것
데이터를 보는 눈이 생긴 것
sql을 학습해본 것
등등 이다.

발표에 당선된 연구들은 거의다 해당 연구실의 대학원생들이 진행하던 연구를 그대로 받아온 것 같다. Figure나 연구결과들은 단기간(인턴기간)동안 나올 수 있는 결과물이 아니었다..
나는 직접 계획하고 실험하여 머신러닝 딥러닝 연구를 한의학에 적용하였지만, 의과학과 연구발표와는 거리가 있으므로 크게 발표나 수상에 염려를 두지 않았다.
하지만, 연구실마다 다양한 발표가 있었고, 그분들은 직접 실험하는데 보조를 했을 것이다.

나는 수상은 못했지만, 경험하지 못했고, 앞으로도 경험할 수 없는 것들을 얻고 간다!
부상으로 서울대 마크의 독서대를 받았다!

'한의대 생활 > 본4 - SNUBI 인턴생활' 카테고리의 다른 글

02. 19 분석 피드백  (0) 2019.02.20
02. 07 새로운 의료데이터 받기  (0) 2019.02.09
02. 01 첫 cdm 스터디  (0) 2019.02.01
01. 29 식권 대량구매  (0) 2019.01.30
01. 24 Pandas세미나 듣고옴  (0) 2019.01.24

비모수 통계 분석 ( Non parametic )

  1. 모집단의 분포가 정규분포가 아님 -> 표본은 도저히 정규분포를 가정 불가능
  2. 표본의 수가 n < 10으로 도저히 정규분포가 될 수 없는 경우
  3. 10 <= n <= 30 이나 but 정규성 검정(shapiro test)를 통과 못한 경우
  4. 순서를 가진 경우

모수 : 모평균, 모표준편차, 모분산 -> 현실적으로는 추출된 표본의 평균,표준편차,분산으로 -> 모집단의 모수들을 추정

모수 검정 : 정규성=모수적 특성=정규분포를 따르니, 서로 다른집단이라도 정규성을 이용하여 평균차이로 집단의 차이를 밝힌다. 표본이 정규성을 만족한다면, 모집단도 정규분포 -> 표본 집단들의 평균차이 = 모집단들의 평균차이 = 모집단들이 차이난다

비모수 검정 : 실제 표본들로 만들어진 평균이 아니라 표본들을 나열한 뒤, 부호,절대값(signed)이나 순위(rank)를 이용해서 검정한다. 대신 검졍력은 모수적 방법들에 비해 떨어진다.

제시 통계량 : 모수 검정시에는 평균 +- 표준편차을 제시, 비모수 검정시에는 중앙값 + [1QR, 3QR]을 제시

cf)

비모수 통계 분석의 종류

1~2집단에 대한 숫자형의 평균차이

  1. 대응표본 t-test -> Wilcoxon signed rank test
  2. 독립표본 t-test -> Mann-Whitney test or Wilcoxon rank-sum test

3집단의 숫자형의 평균차이(요인1개)

  1. one way ANOVA -> Kruskal-Wallis test

1. Wilcoxon signed rank test ( 대응표본 t-test의 비모수 검정 )

H0 : before와 after의 크기가 같다.

  1. 짝지어전 실험 전/후 자료를 빼서 diff를 구한다.
  2. diff에 절대값(signed)를 취한 뒤, 크기를 내림차순(rank)나열한다
  3. 동률 처리로서 절대값 diff값이 같은 애들은 순서를 더해서 평균을 준다.
    • 예를들어, 1 -1 -> rank 1, 2 -> rank 1.5, 1.5
  4. 절대값을 취하기전의 부호끼리 그 순위들을 다 더한다(diff순위의 부호별 합).
    • diff가 양이었던 애들의 순위들 합 vs 음이었던 애들의 순위들 합
  5. 양의 순위합과 음의 순위합을 비교하여 크기 차이가 있는지 검정(자세한 내용 확인필요)

2. Mann-Whitney test ( 독립표본 t-test의 비모수 검정 )

Wilcoxon rank-sum test라고도 하는 것 같다.

H0 : 두군의 크기가 같다

  1. 독립된 2집단의 자료들을 집단 관계없이 모두 섞는다(n수 늘리는 작업)
  2. 내림차순으로 정렬하여 순위(rank)
  3. 동률 처리
  4. 섞기전의 집단별로 순위들의 합(rank-sum)을 구한다
  5. 집단별로 순위합을 비교하여 크기 차이가 있는지 검정

3. Kruskal-wallis test( one way ANOVA의 비모수 검정 )

H0 : 세군의 평균이 모두 같다

  1. 3집단의 자료들을 집단과 관계없이 모두 섞는다.

  2. 내림차순으로 정렬한다.

  3. 동률처리는 더해서 평균

  4. 다시 집단별 순위합의 평균

  5. 비모수라도 사후검정이 가능하다.

+ Recent posts