[R] Cox PH model [Survival Analysis]

2023. 2. 1. 17:20ใ†๐Ÿง‘๐Ÿป‍๐Ÿ’ป With Data/๋ฐ์ดํ„ฐ ๋ถ„์„

์ฝ•์Šค ๋น„๋ก€ ์œ„ํ—˜ ๋ชจํ˜•์„ R์—์„œ ๊ตฌํ˜„ํ•ด๋ณด์ž.

 

library(survival)
library(survminer)

์ƒ์กด๋ถ„์„์˜ ํ•จ์ˆ˜๋“ค์ด ๋‹ด๊ธด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

๋ฐ์ดํ„ฐ๋Š” ์ด์ „ ํฌ์ŠคํŠธ์ธ ์นดํ”Œ๋ž€-๋งˆ์ด์–ด์—์„œ ์“ฐ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜์˜€๋‹ค.

# ์—ฐ์Šต ๋ฐ์ดํ„ฐ์ธ survivalDataExercise.csv๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค. (๋Œ“๊ธ€ ์ฃผ์‹œ๋ฉด ๊ณต์œ ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

 

๋ชจ๋ธ๋ง
cx.model = coxph(Surv(daysSinceFirstPurch, event) ~ gender+voucher+returned,data=surv)
#์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์ด๋ฒคํŠธ ~ (์„ฑ๋ณ„+์ฟ ํฐ์‚ฌ์šฉ์—ฌ๋ถ€+ํ™˜๋ถˆ์—ฌ๋ถ€)
summary(cx.model)

์œ„ ์ฝ”๋“œ๋Š” ์ฝ•์Šค ๋น„๋ก€ ์œ„ํ—˜ ๋ชจํ˜•์„ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ์ด๋‹ค.

์ข…์†๋ณ€์ˆ˜๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ๋…๋ฆฝ๋ณ€์ˆ˜์— ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ํŠน์„ฑ๋“ค์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

๊ฒฐ๊ณผ๊ฐ’

Pr์„ ํ†ตํ•ด ํ†ต๊ณ„์  ์œ ์˜์„ฑ์„ ๊ฒ€์ •ํ•˜๋Š” p-value๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ณด๋ฉด gendermale, voucher1, returned1์˜ p-value๊ฐ€ ๋ชจ๋‘ ์œ ์˜์ˆ˜์ค€๋ณด๋‹ค ํ•œ์ฐธ ์ž‘์•„, ๊ทธ ์˜ํ–ฅ๋ ฅ์ด ํ†ต๊ณ„์ ์œผ๋กœ ์œ ์˜๋ฏธํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

exp(coef)๋ฅผ ํ†ตํ•ด ๊ทธ ์˜ํ–ฅ๋ ฅ์„ ํ•ด์„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๊ทธ "์œ„ํ—˜๋น„"๋กœ์„œ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์œ„ํ—˜์ •๋„์ด๋‹ค. 

 

hazard Ratio
- ์—ฌ์„ฑ์— ๋Œ€ํ•œ ๋‚จ์„ฑ์˜ ์œ„ํ—˜๋น„ (๋‚จ์„ฑ / ์—ฌ์„ฑ) = 0.55
- ์ฟ ํฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์œ„ํ—˜๋น„ (์ฟ ํฐo / ์ฟ ํฐx) = 1.41
- ํ™˜๋ถˆ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์œ„ํ—˜๋น„ (ํ™˜๋ถˆo / ํ™˜๋ถˆx) = 1.74

 

์—ฌ์„ฑ๊ณ ๊ฐ์ด ๋‚จ์„ฑ๊ณ ๊ฐ์— ๋น„ํ•ด, ์ฟ ํฐ์„ ์ด์šฉํ•œ ๊ณ ๊ฐ, ํ™˜๋ถˆํ•œ ๊ณ ๊ฐ์ด ๋” ๋น ๋ฅด๊ฒŒ ์ดํƒˆํ•œ๋‹ค.

๊ทธ ์˜ํ–ฅ๋ ฅ์€ ๊ฐ๊ฐ 0.45, 0.41, 0.74 ์ •๋„์ด๋‹ค.

 

ggforest(cx.model) #์‹œ๊ฐํ™”

 

 

 

๋น„๋ก€ ์œ„ํ—˜ ๊ฐ€์ • ๊ฒ€ํ† 
cox.zph(cx.model) #์‹œ๊ฐ„๊ณผ ์ž”์ฐจ ๊ฐ„์˜ ๋…๋ฆฝ์„ฑ ๊ฒ€์ •

 

p < 0.05 (์œ ์˜์ˆ˜์ค€)์ด๋ฉด, ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋…๋ฆฝ์ ์ด๋ผ๋Š” ๊ท€๋ฌด๊ฐ€์„ค์„ ๊ธฐ๊ฐํ•œ๋‹ค.

 

์ด์—, gender ๋ณ€์ˆ˜๋Š” p๊ฐ’์ด ์œ ์˜์ˆ˜์ค€๋ณด๋‹ค ์ž‘์•„, ๊ทธ ์œ„ํ—˜๋น„๊ฐ€ ์‹œ๊ฐ„์— ๋…๋ฆฝ์ ์ด์ง€ ์•Š๊ณ  ์˜คํžˆ๋ ค ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฐ›๊ณ  ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์ด๋Š” ์‹œ๊ฐ„์ด ๊ทธ ์œ„ํ—˜๋น„์— ์˜ํ–ฅ์„ ์ฃผ๊ณ  ์žˆ์Œ์„ ์‹œ์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋•Œ๋ฌธ์— gender ๋ณ€์ˆ˜๋Š” ๊ทธ ์œ„ํ—˜๋น„๊ฐ€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ผ์ •ํ•˜๋‹ค๋Š” ๊ฐ€์ •์„ ์ถฉ์กฑํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†๋‹ค.

 

์ด์—, ๊ตํ˜ธ์ž‘์šฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋ธ์„ ์ƒˆ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ธตํ™”์ž‘์—…์„ ํ†ตํ•ด gender(๋‚จ/์—ฌ)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค.

 

cx.model2 = coxph(Surv(daysSinceFirstPurch, event) ~ voucher+returned+gender*daysSinceFirstPurch,data=surv) summary(cx.model2) #์‹œ๊ฐ„๊ณผ์˜ ๊ตํ˜ธ์ž‘์šฉ

or

co1 =  coxph(Surv(daysSinceFirstPurch, event) ~ voucher+returned, data=surv[surv$gender== "female",])
co2 =  coxph(Surv(daysSinceFirstPurch, event) ~ voucher+returned, data=surv[surv$gender== "male",])
#๋ฐ์ดํ„ฐ ์…‹ ๋ถ„๋ฆฌ

 

 

๋ฐ์ดํ„ฐ ์…‹์— ๋Œ€ํ•œ ์„ค๋ช… + ์นดํ”Œ๋ž€ ๋งˆ์ด์–ด ์ฐธ์กฐ

https://seollane22.tistory.com/5

 

[R] ์นดํ”Œ๋ž€ ๋งˆ์ด์–ด(kaplan-meier) [Survival Analysis]

R์—์„œ ์นดํ”Œ๋ž€ ๋งˆ์ด์–ด ๊ธฐ๋ฒ•์„ ๊ตฌํ˜„ํ•ด๋ณด์ž ์ด ๋ชจ๋ธ์€ ์ฃผ๋กœ ์˜๋ฃŒ ๋ฐ์ดํ„ฐ์—์„œ ๋งŽ์ด ์ด์šฉ๋˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์œผ๋กœ ์˜ฎ๊ฒจ ๊ณ ๊ฐ๋“ค์˜ ์ƒ์กด, ์ดํƒˆ์„ ๋ถ„์„ํ•ด๋ณธ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์—ฐ์Šต ๋ฐ์ดํ„ฐ์ธ surviva

seollane22.tistory.com

๊ฐœ๋…

https://seollane22.tistory.com/13

 

Cox PH Model [Survival analysis]

์•ž์„œ ์‚ดํŽด๋ณธ ์นดํ”Œ๋ž€ ๋งˆ์ด์–ด ๊ณก์„ ์€ ์ƒ์กด์œจ์˜ ์ฐจ์ด๋ฅผ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์—ฐ๊ตฌ์ž ์ž…์žฅ์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ƒ์กด์œจ์˜ ์ฆ๊ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ฑ๋ณ„, ๊ทธ๋ฃน ๋“ฑ ์–ด๋– ํ•œ ๋ณ€์ˆ˜์— ๋”ฐ๋ฅธ ์œ„

seollane22.tistory.com