2023. 1. 10. 11:44ใ๐ง๐ป๐ป With Data/๋ฐ์ดํฐ ๋ถ์
R์์ ์นดํ๋ ๋ง์ด์ด ๊ธฐ๋ฒ์ ๊ตฌํํด๋ณด์
์ด ๋ชจ๋ธ์ ์ฃผ๋ก ์๋ฃ ๋ฐ์ดํฐ์์ ๋ง์ด ์ด์ฉ๋์ง๋ง, ์ฐ๋ฆฌ๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ผ๋ก ์ฎ๊ฒจ ๊ณ ๊ฐ๋ค์ ์์กด, ์ดํ์ ๋ถ์ํด๋ณธ๋ค.
๋ฐ์ดํฐ๋ ์ฐ์ต ๋ฐ์ดํฐ์ธ survivalDataExercise.csv๋ฅผ ์ด์ฉํ์๋ค. (๋๊ธ ์ฃผ์๋ฉด ๊ณต์ ํด๋๋ฆฌ๊ฒ ์ต๋๋ค.)
๋จผ์
library(dplyr)
library(ggplot2)
library(survival)
library(survminer)
#๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉด install.packages("")
setwd("") #๊ฒฝ๋ก ์ค์
surv = read.csv("")#๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
๋ณ์๋ ์ต๊ทผ ๊ตฌ๋งค๋ก๋ถํฐ ๊ฒฝ๊ณผ๋ ์ผ์์ ์ฑ๋ณ, ์ํ๊ถ ์ด์ฉ์ฌ๋ถ, ํ๋ถ์ฌ๋ถ, ์ฌ๊ตฌ๋งค์ฌ๋ถ๊ฐ ์๋ค.
surv = surv %>% mutate(event = ifelse(boughtAgain==1, 0, 1),
gender = as.factor(gender),
voucher = as.factor(voucher),
returned = as.factor(returned),
boughtAgain = as.factor(boughtAgain))
#๋ฒ์ฃผํ ๋ณ์๋ก ๋ณํํ๊ธฐ + event๋ผ๋ ์ดํ ๋ณ์๋ก ๋ฃ์ด์ฃผ๊ธฐ (์ฌ๊ตฌ๋งค 1 = ์์กด / ์ฌ๊ตฌ๋งค 0 = ์ดํ ,์ฌ๋ง)
survobj = Surv(surv$daysSinceFirstPurch, surv$event)
#์์กด์ํ ์๋ณํ๊ธฐ. Surv ํจ์๋ก (๊ธฐ๊ฐ, ์ฌ๊ฑด)์ ๋ฃ์ด์ค์ ๊ธฐ๊ฐ์ ๋ฐ๋ฅธ ์์กด์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
km.model <- survfit(survobj ~ 1, data = surv, type="kaplan-meier")
summary(km.model) #๋ชจ๋ธ ๋ง๋ค๊ธฐ (๋ณ์ ๊ณ ๋ ค ์ํ์ ๋)
ggsurvplot(km.model,
risk.table = "nrisk_cumcensor", # Add risk table
ggtheme = theme_bw(), # Change ggplot2 theme
palette = c("#2E9FDF"),
title ='Kaplan-Meier Survival Model',
legend = 'none')
#์๊ฐํ
์ด์ ๊ฐ ๋ฒ์ฃผํ ๋ณ์์ ๋ฐ๋ฅธ ์์กด์จ์ ๋น๊ตํด๋ณด์.
surv_plots <- list() #ํ๋์ ๋ด์ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
surv_plots[[1]] = ggsurvplot(survfit(Surv(daysSinceFirstPurch, event) ~ gender, data = surv), conf.int = TRUE,
title = 'Kaplan-Meier for Gender', xlab = 'Time')
surv_plots[[2]] = ggsurvplot(survfit(Surv(daysSinceFirstPurch,event) ~ voucher, data = surv), conf.int = TRUE,
title = 'Kaplan-Meier for voucher', xlab = 'Time')
surv_plots[[3]] = ggsurvplot(survfit(Surv(daysSinceFirstPurch,event) ~ returned, data = surv), conf.int = TRUE,
title = 'Kaplan-Meier for returned', xlab = 'Time')
arrange_ggsurvplots(surv_plots, nrow = 2, ncol = 2)
์ ์ด๋ฏธ์ง๋ฅผ ํด์ํ๋ฉด ์ ์๋ฏธํ ์์ฌ์ ์ ์ป์ ์ ์๋ค.
์์ปจ๋ฐ, ์ฑ๋ณ, ํ๋ถ์ฌ๋ถ, ์ฟ ํฐ์ฌ์ฉ์ฌ๋ถ์ ์์กด์จ ์ฐจ์ด, ๊ฐ์ํญ์ ํ ๋์ ์ดํด๋ณผ ์ ์๋ ๊ฒ์ด๋ค.
๋ ๊ทธ๋ํ์ ์ฐจ์ด๋ฅผ ํต๊ณ์ ์ผ๋ก ๊ฒ์ ํ ์ ์๋ ๋ฐฉ๋ฒ ๋ํ ์กด์ฌํ๋ค.
๊ทธ๊ฒ์ ๋ก๊ทธ ์์ ๊ฒ์ ๋ฒ(log-rank test)์ด๋ค.
ํจ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
survdiff(Surv(daysSinceFirstPurch, event) ~ gender, data = surv) #์ฑ๋ณ์ ๋ฐ๋ฅธ
survdiff(Surv(daysSinceFirstPurch, event) ~ voucher, data = surv) #์ฟ ํฐ ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ฅธ
survdiff(Surv(daysSinceFirstPurch, event) ~ returned, data = surv) #ํ๋ถ ์ฌ๋ถ์ ๋ฐ๋ฅธ
ํ ์ฌ๋ก๋ก ์ฑ๋ณ์ ๋ฐ๋ฅธ ๋ก๊ทธ ์์ ๊ฒ์ ๊ฒฐ๊ณผ(๋งจ ์ ์ฝ๋ ๊ฒฐ๊ณผ)๋ฅผ ์ดํด๋ณด์.
์ด๋ p-value๋ฅผ ์ดํด๋ณด๋ฉด <2e-16์ด๋ค. ์ด๋ ์ ์์์ค 0.05๋ณด๋ค ํ์ฐธ ์์ ๊ฐ์ด๋ค.
์ด์ ๋ ๊ทธ๋ํ์ ์ฐจ์ด๊ฐ ์๋ค๋ผ๋ ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ๊ณ ๋ ๊ทธ๋ํ๋ ์ฐจ์ด๊ฐ ์๋ค๋ผ๊ณ ๊ฒฐ๋ก ์ ์ง๋๋ค.
์ฆ, ์์ ๊ฐ์ ๋ถ์๊ฒฐ๊ณผ๋ ๋จ์/์ฌ์ ๊ทธ๋ํ์์ ๋ณผ ์ ์๋ฏ์ด, ์ฌ์ฑ์ ์์กด์จ์ด ๋ ๋น ๋ฅด๊ฒ ๊ฐ์ํ๋ค๋ ๊ฒ์ด ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค.
์ด์, ์ฌ์ฑ์ ๋ถ์ก์ผ๋ ค๋ฉด ์ด๊ธฐ์ ๋ง์ผํ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ฌ์ผ ํ๋ค๋ ์์ฌ์ ์ ์ ์ ์๋ ๊ฒ์ด๋ค.
์ด์ ๊ฐ์ ํด์๋ค์ ๋ง์ผํ ์ธก๋ฉด์์ ๊ต์ฅํ ํฐ ์์ฌ์ ๊ณผ ๋์๊ฐ ๋ฐฉํฅ์ ์๋ ค์ค๋ค.
๊ด๋ จ๊ฐ๋
https://seollane22.tistory.com/4
์นดํ๋-๋ง์ด์ด ์ถ์ ๋ฒ [Survival analysis]
์์กด๋ถ์, ์ดํ๋ถ์(์ด์ ๋ถํฐ ์ด ๋์ ๊ตฌ๋ถํ์ง ์์ ์์ )์ R๊ณผ ํ์ด์ฌ์ ํตํด ์งํํ๊ฒ ๋ค. ๊ทธ ๋ถ์์ ์ฒซ๋ฒ์งธ๋ก ์นดํ๋ ๋ง์ด์ด ๊ธฐ๋ฒ์ R์ ํตํด ๊ตฌํํด๋ณด์. ๋จผ์ ๊ธฐ๋ฒ์ ๋ํ ์ค๋ช ์ด ํ์ํ๋ฐ
seollane22.tistory.com
'๐ง๐ปโ๐ป With Data > ๋ฐ์ดํฐ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PYTHON] ์์ฌ๊ฒฐ์ ๋๋ฌด (Decision Tree) (0) | 2023.02.07 |
---|---|
[R] Cox PH model [Survival Analysis] (0) | 2023.02.01 |
[R] ์ ํํ๊ท, ๋ก์ง์คํฑํ๊ท [Regression Analysis] (2) | 2023.01.25 |