multicox functionを定義
multicox<-function(d,ls,digits=2,time,event, cutoff=0.1, topn=NA){
# eval
data<-eval(parse(text = d))
time<-eval(parse(text=paste0(d,"$",time)))
event<-eval(parse(text=paste0(d,"$",event)))
# function makep
makep<-function(x){
pvalue<-ifelse(x>=0.1,as.character(round(x,digits=2)),
ifelse(x<0.1 & x>=0.01, as.character(round(x,digits=3)),
ifelse(x<0.01 & x>=0.001,as.character(round(x,digits=3)),
ifelse(x<0.001,"< 0.001",NA))))
return(pvalue)}
# function univariate cox
f.cox<-function(x)
{
# library
library(survival)
library(dplyr)
library(broom)
library(stringr)
library(purrr)
# univariate cox
factor<-eval(parse(text = paste0(d,"$",x)))
u.cox<-coxph(formula = Surv(time, event)~ factor, data = data)
u.cox<-u.cox %>%
tidy %>%
dplyr::mutate(HR=exp(estimate), HR_conf.low=exp(conf.low), HR_conf.high=exp(conf.high))%>%
dplyr::select(term,starts_with("HR"),p.value)%>%
dplyr::mutate(term=str_replace(term,"factor",x))%>%
dplyr::mutate(P.value=makep(p.value))%>%
dplyr::mutate_at (vars(starts_with("HR")),funs (round(.,digits = digits)))%>%
dplyr::rename(Factor=term)%>%
dplyr::select(Factor,HR,HR_conf.low,HR_conf.high,P.value,p.value)
}
# purrr
res.u<-map_dfr(ls,f.cox)
res.u<-cbind(res.u,ls)%>%
dplyr::mutate(ls=as.character(ls))
# making formula
res.ls<-res.u %>%
dplyr::filter(p.value< cutoff) %>%
dplyr::arrange(p.value)
#topn
ifelse(is.na(topn) == TRUE , res.ls<-res.ls,
res.ls <- res.ls %>%
dplyr::top_n(p.value, n = topn )
)
ls.factor<-as.list(res.ls$ls) %>%
paste0(.,collapse = " + ")
# multivariate lear regression
object<-paste0(
"m.cox<-coxph(formula = Surv(time, event)~",ls.factor , ",data = data)"
)
eval(parse(text=object))
# tidy and cleaning
res.multi<-m.cox %>%
tidy%>%
dplyr::mutate(HR=exp(estimate), HR_conf.low=exp(conf.low), HR_conf.high=exp(conf.high)) %>%
dplyr::select(term,starts_with("HR"),p.value)%>%
dplyr::mutate(P.value=makep(p.value))%>%
dplyr::mutate_at (vars(starts_with("HR")),funs (round(.,digits = digits)))%>%
dplyr::rename(Factor=term)%>%
dplyr::select(Factor,HR,HR_conf.low,HR_conf.high,P.value,p.value)
# cbind uni and multi
res.final<-res.u%>%
dplyr::left_join(res.multi,by="Factor",suffix=c("_Univariate","_Multivariate"))%>%
dplyr::select(-(p.value_Univariate),-(p.value_Multivariate),-(ls))
res.final
}
LS0tCnRpdGxlOiAibXVsdGljb3jjga7jg4bjgrnjg4giCm91dHB1dDogaHRtbF9ub3RlYm9vawoKLS0tCgojIOODh+ODvOOCv+OBruiqreOBv+i+vOOBvwpgYGB7ciB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KEtNc3VydikKZGF0YShibXQpCmBgYAoKIyBtdWx0aWNveCBmdW5jdGlvbuOCkuWumue+qQpgYGB7cn0KbXVsdGljb3g8LWZ1bmN0aW9uKGQsbHMsZGlnaXRzPTIsdGltZSxldmVudCwgY3V0b2ZmPTAuMSwgdG9wbj1OQSl7CiMgZXZhbApkYXRhPC1ldmFsKHBhcnNlKHRleHQgPSBkKSkgCnRpbWU8LWV2YWwocGFyc2UodGV4dD1wYXN0ZTAoZCwiJCIsdGltZSkpKQpldmVudDwtZXZhbChwYXJzZSh0ZXh0PXBhc3RlMChkLCIkIixldmVudCkpKQojIGZ1bmN0aW9uIG1ha2VwCm1ha2VwPC1mdW5jdGlvbih4KXsKICBwdmFsdWU8LWlmZWxzZSh4Pj0wLjEsYXMuY2hhcmFjdGVyKHJvdW5kKHgsZGlnaXRzPTIpKSwKICAgICAgICAgICAgICAgICBpZmVsc2UoeDwwLjEgJiB4Pj0wLjAxLCBhcy5jaGFyYWN0ZXIocm91bmQoeCxkaWdpdHM9MykpLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoeDwwLjAxICYgeD49MC4wMDEsYXMuY2hhcmFjdGVyKHJvdW5kKHgsZGlnaXRzPTMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh4PDAuMDAxLCI8IDAuMDAxIixOQSkpKSkKICByZXR1cm4ocHZhbHVlKX0KIyBmdW5jdGlvbiB1bml2YXJpYXRlIGNveApmLmNveDwtZnVuY3Rpb24oeCkKICB7CiAgIyBsaWJyYXJ5CiAgbGlicmFyeShzdXJ2aXZhbCkKICBsaWJyYXJ5KGRwbHlyKQogIGxpYnJhcnkoYnJvb20pCiAgbGlicmFyeShzdHJpbmdyKQogIGxpYnJhcnkocHVycnIpCgogICAgIyB1bml2YXJpYXRlIGNveAogIGZhY3RvcjwtZXZhbChwYXJzZSh0ZXh0ID0gcGFzdGUwKGQsIiQiLHgpKSkKICB1LmNveDwtY294cGgoZm9ybXVsYSA9IFN1cnYodGltZSwgZXZlbnQpfiBmYWN0b3IsIGRhdGEgPSBkYXRhKQogIHUuY294PC11LmNveCAlPiUgCiAgICB0aWR5ICU+JSAKICAgIGRwbHlyOjptdXRhdGUoSFI9ZXhwKGVzdGltYXRlKSwgSFJfY29uZi5sb3c9ZXhwKGNvbmYubG93KSwgSFJfY29uZi5oaWdoPWV4cChjb25mLmhpZ2gpKSU+JQogICAgZHBseXI6OnNlbGVjdCh0ZXJtLHN0YXJ0c193aXRoKCJIUiIpLHAudmFsdWUpJT4lCiAgICBkcGx5cjo6bXV0YXRlKHRlcm09c3RyX3JlcGxhY2UodGVybSwiZmFjdG9yIix4KSklPiUKICAgIGRwbHlyOjptdXRhdGUoUC52YWx1ZT1tYWtlcChwLnZhbHVlKSklPiUKICAgIGRwbHlyOjptdXRhdGVfYXQgKHZhcnMoc3RhcnRzX3dpdGgoIkhSIikpLGZ1bnMgKHJvdW5kKC4sZGlnaXRzID0gZGlnaXRzKSkpJT4lCiAgICBkcGx5cjo6cmVuYW1lKEZhY3Rvcj10ZXJtKSU+JQogICAgZHBseXI6OnNlbGVjdChGYWN0b3IsSFIsSFJfY29uZi5sb3csSFJfY29uZi5oaWdoLFAudmFsdWUscC52YWx1ZSkKICB9CiMgcHVycnIKcmVzLnU8LW1hcF9kZnIobHMsZi5jb3gpIApyZXMudTwtY2JpbmQocmVzLnUsbHMpJT4lCmRwbHlyOjptdXRhdGUobHM9YXMuY2hhcmFjdGVyKGxzKSkKIyBtYWtpbmcgZm9ybXVsYQpyZXMubHM8LXJlcy51ICU+JQogIGRwbHlyOjpmaWx0ZXIocC52YWx1ZTwgY3V0b2ZmKSAlPiUKICBkcGx5cjo6YXJyYW5nZShwLnZhbHVlKQojdG9wbgppZmVsc2UoaXMubmEodG9wbikgPT0gVFJVRSAsIHJlcy5sczwtcmVzLmxzLAogICAgICAgcmVzLmxzIDwtIHJlcy5scyAlPiUKICAgICAgICBkcGx5cjo6dG9wX24ocC52YWx1ZSwgbiA9IHRvcG4gKQogICAgICAgKQogIApscy5mYWN0b3I8LWFzLmxpc3QocmVzLmxzJGxzKSAlPiUKICBwYXN0ZTAoLixjb2xsYXBzZSA9ICIgKyAiKQojIG11bHRpdmFyaWF0ZSBsZWFyIHJlZ3Jlc3Npb24Kb2JqZWN0PC1wYXN0ZTAoCiJtLmNveDwtY294cGgoZm9ybXVsYSA9IFN1cnYodGltZSwgZXZlbnQpfiIsbHMuZmFjdG9yICwgIixkYXRhID0gZGF0YSkiCikKZXZhbChwYXJzZSh0ZXh0PW9iamVjdCkpCiMgdGlkeSBhbmQgY2xlYW5pbmcKcmVzLm11bHRpPC1tLmNveCAlPiUKICB0aWR5JT4lIAogIGRwbHlyOjptdXRhdGUoSFI9ZXhwKGVzdGltYXRlKSwgSFJfY29uZi5sb3c9ZXhwKGNvbmYubG93KSwgSFJfY29uZi5oaWdoPWV4cChjb25mLmhpZ2gpKSAlPiUKICBkcGx5cjo6c2VsZWN0KHRlcm0sc3RhcnRzX3dpdGgoIkhSIikscC52YWx1ZSklPiUKICBkcGx5cjo6bXV0YXRlKFAudmFsdWU9bWFrZXAocC52YWx1ZSkpJT4lCiAgZHBseXI6Om11dGF0ZV9hdCAodmFycyhzdGFydHNfd2l0aCgiSFIiKSksZnVucyAocm91bmQoLixkaWdpdHMgPSBkaWdpdHMpKSklPiUKICBkcGx5cjo6cmVuYW1lKEZhY3Rvcj10ZXJtKSU+JQogIGRwbHlyOjpzZWxlY3QoRmFjdG9yLEhSLEhSX2NvbmYubG93LEhSX2NvbmYuaGlnaCxQLnZhbHVlLHAudmFsdWUpCiMgY2JpbmQgdW5pIGFuZCBtdWx0aQpyZXMuZmluYWw8LXJlcy51JT4lCiAgZHBseXI6OmxlZnRfam9pbihyZXMubXVsdGksYnk9IkZhY3RvciIsc3VmZml4PWMoIl9Vbml2YXJpYXRlIiwiX011bHRpdmFyaWF0ZSIpKSU+JQogIGRwbHlyOjpzZWxlY3QoLShwLnZhbHVlX1VuaXZhcmlhdGUpLC0ocC52YWx1ZV9NdWx0aXZhcmlhdGUpLC0obHMpKQpyZXMuZmluYWwKfQpgYGAKIyBtdWx0aWNveOOBruWun+ihjAoKIyMg44Oq44K544OI44Gu5L2c5oiQCi0gZmFjdG9yc+OBq+OBr2NveOOBruWNmOWkiemHj+OCkuihjOOBhuWboOWtkOOBruODquOCueODiOOCkuS9nOaIkAoKIyMgbXVsdGljb3jplqLmlbAKLSBkIOODh+ODvOOCv+ODleODrOODvOODoOOBruWQjeWJjQotIGxzICDljZjlpInph4/jgpLooYzjgYbjg6rjgrnjg4jjga7mjIflrpoKLSBldmVudCDjgqTjg5njg7Pjg4jjga7mnInnhKEKLSB0aW1lICDjgqTjg5njg7Pjg4jjgb7jgafjga7mmYLplpMKLSBjdXRvZmYgIOWNmOWkiemHj+OBp3B2YWx1ZeOBjOOBk+OBruWApOOCiOOCiuWwj+OBleOBhOWgtOWQiOOBr+WkmuWkiemHj+OBq+e1hOOBv+i+vOOCgAotIEhSICDjga7kuLjjgoHjga7ljZjkvY0g5Yid5pyf6Kit5a6a44Gn44Gv5bCP5pWw54K556ysMuS9jQotIHRvcG7jgIDjgqTjg5njg7Pjg4jmlbDjgYzlsJHjgarjgYTjgajjgY3jgoTjgIHlpJrlpInph4/jgavmipXlhaXjgZnjgovlm6DlrZDmlbDjgpLliLbpmZDjgZnjgovjgajjgY3jgavkvb/nlKjjgIDjgoLjgZflm6DlrZDmlbDjgpIz44Gk44G+44Gn44Gn44GC44KM44GwIHRvcG49M+OBquOBqeOBqOaMh+WumgogICAgICAgIOS4i+OBruWun+ihjOS+i+OBp+OBr2N1dG9mZuOCkuWIh+OCi+WkieaVsOOBjOOCguOBqOOCguOBqDLlgIvjgarjga7jgafkvZXjgoLlirnmnpzjga/jgYLjgorjgb7jgZvjgpPjgYwKYGBge3J9CiNjb3jjgavjgYTjgozjgovlm6DlrZDjga7jg6rjgrnjg4gKZmFjdG9yczwtYygiejEiLCJ6MiIsInozIiwiejQiLCJ6NSIsIno2IiwiejciLCJ6OSIsInoxMCIpCnRhYjwtbXVsdGljb3goZCA9ICJibXQiLGxzID0gZmFjdG9ycywgZXZlbnQgPSAiZDEiLHRpbWUgPSAidDEiLCBjdXRvZmYgPSAwLjEsIGRpZ2l0cyA9IDIsIHRvcG4gPSAzKQpwcmludCh0YWIpCmBgYAoK