반응형

비모수적 방법 non-parametric method

6.2.2 누적한계추정법 product-limit method

 

생명표 방법: 기간을 1, 6개월  특정 단위로 나눠 구분

누적한계추정법: 사건이 발생할 마다 해당 시점을 표기

 

누적한계추정법(product-limit method) 생존함수를 추정하는 대표적인 방법 하나로 연구자의 이름을 따서 Kaplan-Meier추정법이라고도 한다. 모든 환자의 생존시간 또는 중도절단 시간이 각각 관찰되었다고 하자. 모든 자료의 생존시간 도는 중도절단 x1,…,투을 순서대로 배열한 것을 t1<t2<…<tn이라 하고, δi = 0, 그렇지 않은 경우 δi =1로 정의한다. 즉 중도 절단 되지 않고 사건이 발생한 경우 status = 1, 중도절단된 경우 stats = 0 로 표기한다.

 

] 신장이식수술을 받은 15명 환자들의 호전기간(remission duration)이 아래와 같다고 하자. 여기서 +로 표기된 것은 중도절단된 자료를 가르킨다. 각 시점에서 생존함수를 누적한계추정법을 이용하여 추정해보자

 

. 신장이식 환자들의 호전기간 (단위 : )

3.0   4.0+  4.5  4.5  5.5  6.0  6.4  6.5  7.0  7.5  8.4+  10.0+  10.0  12.0  15.0

 

 

1. 데이터 불러오기

> library(survival)

> setwd('c:/Rwork')

> kidney<-read.table('kidney.txt',header=T)

> kidney #status =1 사건, 0 = 절단, 절단 표시 매우 중요

time status

1   3.0      1

2   4.0      0

3   4.5      1

4   4.5      1

5   5.5      1

6   6.0      1

7   6.4      1

8   6.5      1

9   7.0      1

10  7.5      1

11  8.4      0

12 10.0      0

13 10.0      1

14 12.0      1

15 15.0      1

> attach(kidney)

 

2. 누적한계추정치(Kaplan-Meier 추정치)

> fit1 = survfit(Surv(time,status)~1, data=kidney) #~ 우측에는 공변량

> summary(fit1)

Call: survfit(formula = Surv(time, status) ~ 1, data = kidney)

 

time n.risk n.event survival std.err lower 95% CI upper 95% CI

3.0     15       1    0.933  0.0644       0.8153        1.000

4.5     13       2    0.790  0.1081       0.6039        1.000

5.5     11       1    0.718  0.1198       0.5177        0.996

6.0     10       1    0.646  0.1275       0.4389        0.951

6.4      9       1    0.574  0.1320       0.3660        0.901

6.5      8       1    0.503  0.1336       0.2984        0.846

7.0      7       1    0.431  0.1324       0.2358        0.787

7.5      6       1    0.359  0.1283       0.1781        0.723

10.0      4       1    0.269  0.1237       0.1094        0.663

12.0      2       1    0.135  0.1135       0.0258        0.703

15.0      1       1    0.000     NaN           NA           NA

> fit1

Call: survfit(formula = Surv(time, status) ~ 1, data = kidney)

 

n  events  median 0.95LCL 0.95UCL

15      12       7       6      NA

Error: invalid multibyte character in parser at line 1

-> fit1 = survfit(Surv(time,status)~1, data=kidney) #~ 우측에는 공변량

6.5 에서의 생존확률은 50.3%, 7.0 지나면 생존율이 43.1% 50%이하가 된다.

 

3. 사망시점의 사분위수 추정치와 그의 신뢰구간, 가령 사망자가 50%되는 시점은 언제인가?

> quantile(fit1,probs=c(0.25,0.5,0.75),conf.int=T) #신뢰구간까지

$quantile

25   50   75

5.5  7.0 12.0

 

$lower

25  50  75

4.5 6.0 7.0

 

$upper

25  50  75

7.5  NA  NA

-> 생존확률이 75% 경우, 사망확률이 25% 경우의 시점은 5.5, 생존확률이 50% 경우 7.0, 생존확율이 25% 경우의 시점은 12.0

 

 

4. 누적한계추정치의 95% 신뢰구간 그래프

> plot(fit1,xlab='time',ylab='Survival function',lwd=2)

> legend(0.2,0.3,c('KM estimate','95% CI'),lty=c(1,2))


-> 점선은 신뢰구간을 의미, 실선은 생존함수추정치.생존확율이 50% 경우는 7.0일임을 있다.

 

 

출처: 보건정보 데이터분석 (이태림, 이재원, 김주한, 장대흥 공저)

반응형
Posted by 마르띤
,
반응형

비모수적 방법 non-parametric method

6.2.1생명표 방법 life table method

 

생명표 방법 개념 추가 설명

 

] 협심증(angina pectoris) 있는 2,418명의 남성들에 대한 생존자료이다. 생명표에서 경과기관에 따른 생존확률을 구해보자

 

진단 경과 기관(단위: )

사망자

중도절단

( 0 – 1 ]

456

0

( 1 – 2 ]

226

39

( 2 – 3 ]

152

22

( 3 – 4 ]

171

23

( 4 – 5 ]

135

24

( 5 – 6 ]

125

107

( 6 – 7 ]

83

133

( 7 – 8 ]

74

102

( 8 – 9 ]

51

68

( 9 – 10 ]

42

64

( 10 – 11 ]

43

45

( 11 – 12 ]

34

53

( 12 – 13 ]

18

33

( 13 – 14 ]

9

27

( 14 – 15 ]

6

23

( 15 –

0

30

 

 

1. 데이터 입력

> library(KMsurv)

> setwd('C:/Rwork')

> 협심증환자자료 = read.csv('협심증환자자료.csv')

> head(협심증환자자료)

  time censor freq

1  0.5      1  456

2  0.5      0    0

3  1.5      1  226

4  1.5      0   39

5  2.5      1  152

6  2.5      0   22

> attach(협심증환자자료)

 

2. lifetab 함수 연구

> lifetab

function (tis, ninit, nlost, nevent)

(이하 생략)

-> tis: 시간, 길이는 17, ninit = 전체 데이터, 2418, nlost = 중도절단, nevent 사건발생 

 

3. nevent 자료 만들기

> which(censor==1) #사망 데이터

 [1]  1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31

> 집단.사망=협심증환자자료 [which(censor==1),]

> head(집단.사망)

   time censor freq

1   0.5      1  456

3   1.5      1  226

5   2.5      1  152

7   3.5      1  171

9   4.5      1  135

11  5.5      1  125

 

 4. nlost 자료 만들기

> which(censor==0) #절단 데이터

 [1]  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32

> 집단.절단=협심증환자자료[which(censor==0),]

> head(집단.절단)

   time censor freq

2   0.5      0    0

4   1.5      0   39

6   2.5      0   22

8   3.5      0   23

10  4.5      0   24

12  5.5      0  107

 

5. ninit전체데이터 자료 만들기

> 사망자수=집단.사망[,3]

> 사망자수

 [1] 456 226 152 171 135 125  83  74  51  42  43  34  18   9   6   0

> 절단자수=집단.절단[,3]

> 절단자수

 [1]   0  39  22  23  24 107 133 102  68  64  45  53  33  27  23  30

> =사망자수+절단자수

>

 [1] 456 265 174 194 159 232 216 176 119 106  88  87  51  36  29  30

> sum() #2418

[1] 2418

 

6. tis 시간 변수 자료 만들기

> = floor(집단.사망$time) #floor 내림값

>

 [1]  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

> lt=length()

> lt

[1] 16

> length()

[1] 17

> [lt+1] = NA

> [lt+1]

[1] NA

 

7. 생명표 만들기 

> 생명표=lifetab(,sum(),절단자수,사망자수)

> 생명표

      nsubs nlost  nrisk nevent      surv        pdf     hazard     se.surv

0-1    2418     0 2418.0    456 1.0000000 0.18858561 0.20821918 0.000000000

1-2    1962    39 1942.5    226 0.8114144 0.09440394 0.12353102 0.007955134

2-3    1697    22 1686.0    152 0.7170105 0.06464151 0.09440994 0.009179397

3-4    1523    23 1511.5    171 0.6523689 0.07380423 0.11991585 0.009734736

4-5    1329    24 1317.0    135 0.5785647 0.05930618 0.10804322 0.010138361

5-6    1170   107 1116.5    125 0.5192585 0.05813463 0.11859583 0.010304216

6-7     938   133  871.5     83 0.4611239 0.04391656 0.10000000 0.010379949

7-8     722   102  671.0     74 0.4172073 0.04601094 0.11671924 0.010450930

8-9     546    68  512.0     51 0.3711964 0.03697464 0.10483042 0.010578887

9-10    427    64  395.0     42 0.3342218 0.03553750 0.11229947 0.010717477

10-11   321    45  298.5     43 0.2986843 0.04302654 0.15523466 0.010890741

11-12   233    53  206.5     34 0.2556577 0.04209376 0.17941953 0.011124244

12-13   146    33  129.5     18 0.2135639 0.02968456 0.14937759 0.011396799

13-14    95    27   81.5      9 0.1838794 0.02030570 0.11688312 0.011765989

14-15    59    23   47.5      6 0.1635737 0.02066194 0.13483146 0.012259921

15-NA    30    30   15.0      0 0.1429117         NA         NA 0.013300258

           se.pdf   se.hazard

0-1   0.007955134 0.009697769

1-2   0.005975178 0.008201472

2-3   0.005069200 0.007649121

3-4   0.005428013 0.009153696

4-5   0.004945997 0.009285301

5-6   0.005033980 0.010588867

6-7   0.004690538 0.010962697

7-8   0.005175094 0.013545211

8-9   0.005024599 0.014659017

9-10  0.005307615 0.017300846

10-11 0.006269963 0.023601647

11-12 0.006847514 0.030646128

12-13 0.006682743 0.035110295

13-14 0.006514794 0.038894448

14-15 0.008035120 0.054919485

15-NA          NA          NA


nsubs  nlost   nrisk  nevent       surv        
생존자수 중도절단수 유효인원수 사망자수 생존함수
pdf     hazard      se.surv se.pdf se.hazard
확률밀도 함수 위험함수 생존함수의 표준오차 확률밀도 함수의 표준오차 위험함수의 표준오차


-> 5번째 surv 생존 함수, 7번째 hazard 위험 함수. 협심증 환자의 19% 1 이내, 28% 2 이내에 사망하는 것으로 추정된다. 따라서 협심증 환자가 2 이상 생존할 확률은 72% 된다는 것을 있다. 또한 5 이상 생존할 확률은 52%이다.

 

 

#전체 환자 생존확율이 70% 되는 지점

> names(생명표)

 [1] "nsubs"     "nlost"     "nrisk"     "nevent"    "surv"      "pdf"     

 [7] "hazard"    "se.surv"   "se.pdf"    "se.hazard"

> which.min(abs(생명표$surv-0.7))

[1] 3

> 생명표[3,]

    nsubs nlost nrisk nevent      surv        pdf     hazard     se.surv

2-3  1697    22  1686    152 0.7170105 0.06464151 0.09440994 0.009179397

       se.pdf   se.hazard

2-3 0.0050692 0.007649121

-> abs:절대값, which.min 최소값, 또는 생명표에서 3번째 행을 보면 survival 70% 가장 가까이 접근했음을 있다. 2 이상 생존할 확률은 72%

 

#전체 환자 생존확율이 50% 되는 지점

> which.min(abs(생명표$surv-0.5))

[1] 6

> 생명표[6,]

    nsubs nlost  nrisk nevent      surv        pdf    hazard    se.surv

5-6  1170   107 1116.5    125 0.5192585 0.05813463 0.1185958 0.01030422

        se.pdf  se.hazard

5-6 0.00503398 0.01058887

-> 5년이 지나면 surv 생존할 확률이 52% 됨을 있다.

 

 

8. 데이터 시각화 생존함수 추정치 그래프

 > plot([1:lt], 생명표[,5],type='s',xlab='year',ylab='Survival function',ylim=c(0,1),lwd=2)

> abline(h=0.5)

> abline(v=5)


> plot([1:lt], 생명표[,5],type='o',xlab='year',ylab='Survival function',ylim=c(0,1),lwd=2)

> abline(h=0.5)

> abline(v=5)         


 

 

9. 데이터 시각화 위험함수 추정치 그래프

> names(생명표)

 [1] "nsubs"     "nlost"     "nrisk"     "nevent"    "surv"      "pdf"     

 [7] "hazard"    "se.surv"   "se.pdf"    "se.hazard"

> mean(생명표$hazard)

[1] NA

> 생명표$hazard

 [1] 0.20821918 0.12353102 0.09440994 0.11991585 0.10804322 0.11859583

 [7] 0.10000000 0.11671924 0.10483042 0.11229947 0.15523466 0.17941953

[13] 0.14937759 0.11688312 0.13483146         NA

> mean(생명표$hazard,na.rm=T) #NA 값 제외한 평균

[1] 0.1294874

> plot([1:lt], 생명표[,7],type='s',xlab='',ylab='Hazard function',ylim=c(0,0.25),lwd=2)

> abline(h=0.1294874)

 

> plot([1:lt], 생명표[,7],type='o',xlab='',ylab='Hazard function',ylim=c(0,0.25),lwd=2)>

> abline(h=0.1294874)

 

 

 출처: 보건정보 데이터분석 (이태림, 이재원, 김주한, 장대흥 공저)

반응형
Posted by 마르띤
,