mirror of
https://github.com/agdamsbo/daDoctoR.git
synced 2024-11-22 03:40:23 +01:00
Two new functions: rep_olr and plot_ord_odds
This commit is contained in:
parent
a8afb7df46
commit
800b4e8199
@ -9,7 +9,8 @@ Description: Tools for Danish health research. A collection of
|
||||
Depends: R (>= 3.4.4)
|
||||
Imports: broom,
|
||||
dplyr,
|
||||
epiR
|
||||
epiR,
|
||||
ggplot2
|
||||
License: GPL (>= 2)
|
||||
Encoding: UTF-8
|
||||
LazyData: true
|
||||
|
@ -10,10 +10,12 @@ export(dob_extract_cpr)
|
||||
export(hwe_allele)
|
||||
export(hwe_geno)
|
||||
export(hwe_sum)
|
||||
export(plot_ord_odds)
|
||||
export(rep_biv)
|
||||
export(rep_epi_tests)
|
||||
export(rep_glm)
|
||||
export(rep_lm)
|
||||
export(rep_olr)
|
||||
export(rep_reg_cie)
|
||||
export(strobe_diff_bygroup)
|
||||
export(strobe_diff_byvar)
|
||||
|
39
R/plot_ord_odds.R
Normal file
39
R/plot_ord_odds.R
Normal file
@ -0,0 +1,39 @@
|
||||
#' Forrest plot from ordinal logistic regression
|
||||
#'
|
||||
#' Heavily inspired by https://www.r-bloggers.com/plotting-odds-ratios-aka-a-forrestplot-with-ggplot2/
|
||||
#' @param x ordinal logistic regression model.
|
||||
#' @param title plot title
|
||||
#' @param dec decimals for labels
|
||||
#' @param lbls labels for variable names. Carefull, as the right order is not checked automatically!
|
||||
#' @keywords forestplot
|
||||
#' @export
|
||||
#' @examples
|
||||
#' plot_ord_odds()
|
||||
|
||||
plot_ord_odds<-function(x, title = NULL,dec=3,lbls=NULL){
|
||||
|
||||
require(ggplot2)
|
||||
|
||||
odds<-data.frame(cbind(exp(coef(x)), exp(confint(x))))
|
||||
names(odds)<-c("or", "lo", "up")
|
||||
rodds<-round(odds,digits = dec)
|
||||
|
||||
if (!is.null(lbls)){
|
||||
odds$vars<-paste0(v.names," \n",paste0(rodds$or," [",rodds$lo,":",rodds$up,"]"))
|
||||
}
|
||||
else {
|
||||
odds$vars<-paste0(row.names(odds)," \n",paste0(rodds$or," [",rodds$lo,":",rodds$up,"]"))
|
||||
}
|
||||
|
||||
ticks<-c(seq(.1, 1, by =.1), seq(0, 10, by =1), seq(10, 100, by =10))
|
||||
odds$ord<-c(nrow(odds):1)
|
||||
|
||||
ggplot(odds, aes(y= or, x = reorder(vars,ord))) +
|
||||
geom_point() +
|
||||
geom_errorbar(aes(ymin=lo, ymax=up), width=.2) +
|
||||
scale_y_log10(breaks=ticks, labels = ticks) +
|
||||
geom_hline(yintercept = 1, linetype=2) +
|
||||
coord_flip() +
|
||||
labs(title = title, x = "Variables", y = "OR (95 % CI)") +
|
||||
theme_bw()
|
||||
}
|
@ -81,11 +81,10 @@ rep_glm<-function(meas,vars,string,ci=FALSE,data){
|
||||
|
||||
}}
|
||||
|
||||
pa<-as.numeric(df[,3])
|
||||
pa<-as.numeric(df[,"pv"])
|
||||
t <- ifelse(pa<=0.1,"include","drop")
|
||||
|
||||
pa<-ifelse(pa<0.001,"<0.001",pa)
|
||||
|
||||
t <- ifelse(pa<=0.1|pa=="<0.001","include","drop")
|
||||
|
||||
pa <- ifelse(pa<=0.05|pa=="<0.001",paste0("*",pa),
|
||||
ifelse(pa>0.05&pa<=0.1,paste0(".",pa),pa))
|
||||
|
||||
|
99
R/rep_olr.R
Normal file
99
R/rep_olr.R
Normal file
@ -0,0 +1,99 @@
|
||||
#' A repeated ordinal logistic regression function
|
||||
#'
|
||||
#' @description For bivariate analyses. The confint() function is rather slow, causing the whole function to hang when including many predictors and calculating the ORs with CI.
|
||||
#' @param meas Effect meassure. Input as c() of columnnames, use dput().
|
||||
#' @param vars variables in model. Input as c() of columnnames, use dput().
|
||||
#' @param str variables to test. Input as c() of columnnames, use dput().
|
||||
#' @param ci flag to get results as OR with 95% confidence interval.
|
||||
#' @param dta data frame to pull variables from.
|
||||
#' @keywords olr ordinal logistic regression
|
||||
#' @export
|
||||
#' @examples
|
||||
#' rep_olr()
|
||||
|
||||
|
||||
rep_olr<-function(meas,vars,string,ci=FALSE,data){
|
||||
|
||||
require(broom)
|
||||
require(MASS)
|
||||
|
||||
d<-data
|
||||
x<-data.frame(d[,c(string)])
|
||||
v<-data.frame(d[,c(vars)])
|
||||
names(v)<-c(vars)
|
||||
y<-d[,c(meas)]
|
||||
dt<-cbind(y,v)
|
||||
m1<-length(coef(polr(y~.,data = dt,Hess=TRUE)))
|
||||
|
||||
if (!is.factor(y)){stop("y should be a factor!")}
|
||||
|
||||
if (ci==TRUE){
|
||||
|
||||
df<-data.frame(matrix(ncol = 3))
|
||||
names(df)<-c("pred","or_ci","pv")
|
||||
|
||||
for(i in 1:ncol(x)){
|
||||
dat<-cbind(dt,x[,i])
|
||||
m<-polr(y~.,data=dat,Hess=TRUE)
|
||||
|
||||
ctable <- coef(summary(m))
|
||||
|
||||
l<-suppressMessages(round(exp(confint(m))[-c(1:m1),1],2))
|
||||
u<-suppressMessages(round(exp(confint(m))[-c(1:m1),2],2))
|
||||
or<-round(exp(coef(m))[-c(1:m1)],2)
|
||||
or_ci<-paste0(or," (",l," to ",u,")")
|
||||
|
||||
p <- (pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2)[1:length(coef(m))]
|
||||
pv<-round(p[-c(1:m1)],3)
|
||||
|
||||
|
||||
x1<-x[,i]
|
||||
|
||||
if (is.factor(x1)){
|
||||
pred<-paste(names(x)[i],levels(x1)[-1],sep = "_")}
|
||||
|
||||
else {pred<-names(x)[i]}
|
||||
|
||||
df<-rbind(df,cbind(pred,or_ci,pv))
|
||||
}}
|
||||
|
||||
if (ci==FALSE){
|
||||
|
||||
df<-data.frame(matrix(ncol = 3))
|
||||
names(df)<-c("pred","b","pv")
|
||||
|
||||
for(i in 1:ncol(x)){
|
||||
dat<-cbind(dt,x[,i])
|
||||
m<-polr(y~.,data=dat,Hess=TRUE)
|
||||
|
||||
b<-round(coef(m)[-c(1:m1)],2)
|
||||
|
||||
p <- (pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2)[1:length(coef(m))]
|
||||
pv<-round(p[-c(1:m1)],3)
|
||||
|
||||
x1<-x[,i]
|
||||
|
||||
if (is.factor(x1)){
|
||||
pred<-paste(names(x)[i],levels(x1)[-1],sep = "_")
|
||||
}
|
||||
|
||||
else {pred<-names(x)[i]}
|
||||
|
||||
df<-rbind(df,cbind(pred,b,pv))
|
||||
|
||||
}}
|
||||
|
||||
pa<-as.numeric(df[,c("pv")])
|
||||
t <- ifelse(pa<=0.1,"include","drop")
|
||||
pa<-ifelse(pa<0.001,"<0.001",pa)
|
||||
pa <- ifelse(pa<=0.05|pa=="<0.001",paste0("*",pa),
|
||||
ifelse(pa>0.05&pa<=0.1,paste0(".",pa),pa))
|
||||
|
||||
r<-data.frame(df[,1:2],pa,t)[-1,]
|
||||
|
||||
return(r)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
24
man/plot_ord_odds.Rd
Normal file
24
man/plot_ord_odds.Rd
Normal file
@ -0,0 +1,24 @@
|
||||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/plot_ord_odds.R
|
||||
\name{plot_ord_odds}
|
||||
\alias{plot_ord_odds}
|
||||
\title{Forrest plot from ordinal logistic regression}
|
||||
\usage{
|
||||
plot_ord_odds(x, title = NULL, dec = 3, lbls = NULL)
|
||||
}
|
||||
\arguments{
|
||||
\item{x}{ordinal logistic regression model.}
|
||||
|
||||
\item{title}{plot title}
|
||||
|
||||
\item{dec}{decimals for labels}
|
||||
|
||||
\item{lbls}{labels for variable names. Carefull, as the right order is not checked automatically!}
|
||||
}
|
||||
\description{
|
||||
Heavily inspired by https://www.r-bloggers.com/plotting-odds-ratios-aka-a-forrestplot-with-ggplot2/
|
||||
}
|
||||
\examples{
|
||||
plot_ord_odds()
|
||||
}
|
||||
\keyword{forestplot}
|
29
man/rep_olr.Rd
Normal file
29
man/rep_olr.Rd
Normal file
@ -0,0 +1,29 @@
|
||||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/rep_olr.R
|
||||
\name{rep_olr}
|
||||
\alias{rep_olr}
|
||||
\title{A repeated ordinal logistic regression function}
|
||||
\usage{
|
||||
rep_olr(meas, vars, string, ci = FALSE, data)
|
||||
}
|
||||
\arguments{
|
||||
\item{meas}{Effect meassure. Input as c() of columnnames, use dput().}
|
||||
|
||||
\item{vars}{variables in model. Input as c() of columnnames, use dput().}
|
||||
|
||||
\item{ci}{flag to get results as OR with 95% confidence interval.}
|
||||
|
||||
\item{str}{variables to test. Input as c() of columnnames, use dput().}
|
||||
|
||||
\item{dta}{data frame to pull variables from.}
|
||||
}
|
||||
\description{
|
||||
For bivariate analyses. The confint() function is rather slow, causing the whole function to hang when including many predictors and calculating the ORs with CI.
|
||||
}
|
||||
\examples{
|
||||
rep_olr()
|
||||
}
|
||||
\keyword{logistic}
|
||||
\keyword{olr}
|
||||
\keyword{ordinal}
|
||||
\keyword{regression}
|
Loading…
Reference in New Issue
Block a user