2022. 7. 8. 12:09ㆍStatistics/R
errorbar.
추정치와 그 오차 범위를 그림으로 나타낼 때 많이 쓴다.
나의 경우는 위험비와 그 confidence interval 을 나타낼 때 많이 쓰고,
errorbar를 이용해서 forest plot을 주로 그리고 있다.
forest plot 을 바로 그려주는 여러 패키지 들이 있지만..
다른 함수는 컨트롤이 어려워서 ggplot2 :: errorbar와 point 를 이용한다.
ggplot2 패키지는 사용이 매우 직관적이면서도 개어렵습...
뭔가 항상 잘 안된다 =)
해당 포스팅은 R코드들을 개인적으로 정리하고자 작성하였습니다.
※ 혹시 잘못된 곳이 있거나 의견있으시면 알려주세요!
"survival" package에 있는 'colon' data을 사용
forest plot을 그리는 것 다음의 step만 밟으면 나타난다.
step 1. HR, upper CI, lower CI를 구한다.
step 2. ggplot으로 plot base를 깐다.
step 3. geom_errorbar로 lower = lower CI / upper = upper CI
step 4. geom_point로 HR를 찍는다.
## step 1.
이건 분석이라기 보다 그림을 그리기 위함이므로 대충 cox 모형을 돌렸다. (변수 쑤셔넣기)
df <- colon # data 그냥 이름 길어서 저장함
df$age_65 <- ifelse(df$age >= 65, 1, 0)
summary(codph(Surv(time, status) ~ rx + sex + age_65 + node4 + adhere + extent + differ , data = df))
age_65는 그냥.. categorical variable 하나 더 만들고 싶어서....
이제 이 결과에서 HR = exp(coef) / lower CI = lower .95 / upper CI = upper .95 이 세개를 저장해서 plot 을 그릴 것이다.
저장은 알아서 예쁘게 하면 된다.
indexing 을 통해서 긁어와도 되고 excel로 한땀한땀 저장해도 된다.
data frame 형식으로 table 저장!
그림을 그려봅시다.
## step 2. ggplot 시작하기.
require(ggplot2) #package 불러오기
ggplot(table, aes(y = rownames(table), x = HR))
aes(~ x축, y축이 뭔지 설정해준다.)
보통 y 축을 따로 저장하는 편이기는 한데 이번엔 그림그리는데 문제가 없길래 그대로 rownames를 사용하였다.
이렇게 하면 그래프를 그릴 배경이 나타난다.
무슨 이유에선지는 모르지만 rowname 순서는 rxLev 로 시작해서 differ 로 끝나는데 y축은 지 맘대로 나타난다.
기준이 뭘까.. 궁금하지만 깊게 생각해보진 않았다. HR 오름차순 그런건가?
나중에 수정 가능하니 다음스텝 고고
## step 3. geom_errorbar로 lower = lower CI / upper = upper CI
bar 먼저 그리는 이유는 point를 찍고 bar를 그리면
이렇게 포인트 위로 라인이 지나가버리기 때문이다.
ggplot(table, aes(y = rownames(table), x = HR)) +
geom_errorbar(aes(xmin = lower, xmax = upper), width = 0.1, size = 1)
size로 가로 선 굵기, width 는
라인 양 끝의 크기를 나타낸다. 나의 경우는 보통 0으로 줘서 아예 없애 버린다.
## step 4. geom point 로 HR 찍기
ggplot(table, aes(y = rownames(table), x = HR)) +
geom_errorbar(aes(xmin = lower, xmax = upper), width = 0, size = 1) +
geom_point()
사이즈나 모양은 옵션으로 바꾸면 된다. (아래 링크에 들어가면 확인 가능)
https://ggplot2.tidyverse.org/articles/ggplot2-specs.html
Aesthetic specifications
Customising how aesthetic specifications are represented on your plot.
ggplot2.tidyverse.org
y축 순서! 사실 이게 간단한 방법인지는 모르겠으나... 아래 방법으로 하면 이름만 바뀌는 게 아니고 해당 errorbar들도 잘 따라오기 때문에 큰 문제는 없다.
▶rev 함수 이용해서 ylim에 지정해주면 원하는 순서대로 등장
ggplot(table, aes(y = rownames(table) , x = HR)) +
geom_errorbar(aes(xmin = lower, xmax = upper), width = 0, size = 1) +
geom_point(fill = "royalblue", size = 3, shape = 23) +
ylim(rev(rownames(table))
row 순서대로 변경 된 것을 확인 할 수 있다.
일단 그리기는 여기서 끝!
◎ 긴 글 읽어주셔서 감사합니다.
'Statistics > R' 카테고리의 다른 글
R :: openxlsx package (0) | 2023.02.16 |
---|---|
R 옵션 설정하기. (0) | 2022.12.06 |
installr :: R 업데이트 하기 (0) | 2022.11.25 |
R :: data 불러올 때 자주 발생하는 에러 (2) | 2022.11.25 |
ggplot2 :: errorbar 와 point로 그린 forest plot 조금 꾸미기 (0) | 2022.07.08 |