안녕하세요 문건웅교수님
moonBook 너무 잘 쓰고 있습니다. 먼저 감사하다고 말씀드리고 싶습니다.
한가지 질문이 있습니다.
첨부한 ORplot 표에서 x축 OR 표시된 값들의 간격을 수정하는 방법은 없는지요?
그래프 모양은 이쁘나, x축 값들이 너무 촘촘히 표시되어 숫자들이 겹쳐나옵니다.
해결을 할 수 있는 방법이 있는지 여쭙고 싶습니다.
바쁘신와중에 감사합니다.
moonBook 애용자 올림
Comment 3
-
cardiomoon
2017.05.02 10:53
-
hawk1227
2017.05.03 05:05
문교수님, Code 감사합니다. 그런데, ggOR을 실행해보니
ORplot 처럼 type=3 같은 멋진 plot은 안되는 것 같은데요? 가능한지요?
-
cardiomoon
2017.05.03 10:39
시간이 나면 만들어보겠습니다.^^
제가 바빠서 moonBook패키지를 업데이트 못했습니다. 죄송합니다.
ggOR 함수를 쓰십시요. 이 함수는 web-r에서 사용하는 것인데 moonBook에는 포함되어 있지 않습니다. 다음과 같이 정의되어 있습니다.
extractOR2=function (x, digits = 2)
{
suppressMessages(a <- confint(x))
if(length(x$coef)==1){
result = c(exp(coef(x)), exp(a))
result = round(result, digits)
result = c(result, round(summary(x)$coefficient[, 4],4))
temp=names(result)[1]
res=data.frame(result)
result=t(res)
result=data.frame(result)
rownames(result)[1]=temp
}
else {
result = data.frame(exp(coef(x)), exp(a))
result = round(result, digits)
result = cbind(result, round(summary(x)$coefficient[, 4],4))
}
colnames(result) = c("OR", "lcl", "ucl", "p")
result
}
extractHR2=function (x, digits = 4)
{
digits = 2
out = summary(x)
a=out$conf.int
b=out$coef
res = data.frame(a[,1],a[,3],a[,4])
res=round(res,2)
res = cbind(res, round(b[,5], max(3, digits)))
colnames(res) = c("HR", "lcl", "ucl", "p")
rownames(res)=rownames(a)
res
}
ggOR<-function(x,pch=15,psize=2,lwd=1,width=0.2,col=NULL,show.p=TRUE,show.intercept=TRUE){
if(length(class(x))>1) {
if(class(x)[1]=="glm") {
res=extractOR2(x)
#if(ncol(res)>1) res=res[-1,]
}
} else if(class(x)=="glm") {
res=extractOR2(x)
#if(ncol(res)>1) res=res[-1,]
} else if(class(x)=="coxph") res=extractHR2(x)
else res=x
colnames(res)[1]="OR"
res$vars<-row.names(res)
res$color=ifelse(res$OR>=1,"pos","neg")
res$label=paste0(res$OR,ifelse(res$p>0.05,"",ifelse(res$p>0.01,"*","**")))
ticks<-c(seq(.2, 1, by =.2), seq(2, 9, by =1), seq(10, 100, by =10))
ticks
res$ORlabel=paste0(res$OR,"(",res$lcl,"-",res$ucl,")")
if(show.intercept) data=res
else data=res[-1,]
p<-ggplot(data, aes(y=OR, x = reorder(vars, OR))) +
geom_point(pch=pch,size=psize) +
geom_errorbar(aes(ymin=lcl, ymax=ucl), size=lwd,width=width) +
scale_y_log10(breaks=ticks, labels = ticks) +
geom_hline(yintercept = 1, linetype=2) +
theme(legend.position="none")+
labs(x="",y="")+
coord_flip()
#if ((!is.null(col)) & (length(col)==2)) p<-p+scale_colour_manual(values=col)
if(show.p) p<-p+geom_text(aes(label=label),vjust=-1.2)
if(FALSE){
p<- p+theme(plot.margin=unit(c(1,8,1,1),"lines"))+
geom_text(aes(label=ORlabel,x=Inf,y=OR),hjust=-0.1)
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)
}
p
}