two new functions - major changes coming

This commit is contained in:
agdamsbo 2021-03-30 13:31:17 +02:00
parent e4be92daab
commit 90819eecaa
16 changed files with 266 additions and 24 deletions

View File

@ -1,6 +1,6 @@
Package: daDoctoR
Title: Functions For Health Research
Version: 0.21.1
Version: 0.21.2
Year: 2021
Author: Andreas Gammelgaard Damsbo <agdamsbo@pm.me>
Maintainer: Andreas Gammelgaard Damsbo <agdamsbo@pm.me>

View File

@ -18,6 +18,8 @@ export(hwe_geno)
export(hwe_sum)
export(plot_biv_olr)
export(plot_ord_odds)
export(print_reg_diff_bin)
export(quantile_cut)
export(rep_biv)
export(rep_epi_tests)
export(rep_glm)

View File

@ -1,8 +1,10 @@
#' Calculating age from date of birth
#'
#' For age calculations.
#' @param dob Date of birth.
#' @param enddate Date to calculate age at.
#' @param dob Date of birth. Data format follows standard POSIX layout. Format is yyyy-mm-dd.
#' @param enddate Date to calculate age at. Format is yyyy-mm-dd.
#' @param units Default is "years". Can be changed to "days".
#' @param precise Default is TRUE. Flag set whether to include calculations of spring years. Only of matter if using units = "days".
#' @keywords age
#' @export
#' @examples
@ -12,7 +14,7 @@
#' trunc(age_calc(dob,date))
age_calc<-function (dob, enddate = Sys.Date(), units = "years", precise = TRUE)
## Build upon the work of Jason P. Becker, as part of tihe eeptools
## Build upon the work of Jason P. Becker, as part of the eeptools
{
if (!inherits(dob, "Date") | !inherits(enddate, "Date")) {
stop("Both dob and enddate must be Date class objects")

109
R/print_reg_diff_bin.R Normal file
View File

@ -0,0 +1,109 @@
#' SHOULD BE COMBINED WITH strobe_pred (try transfer the REF) - or keep as a fast/slim version??
#'
#' Print-friendly regression results for easy export to text editor
#'
#' Printable table of regression analysis by group for outcome measure. Detects whether to perform logistic or linear regression.
#' output is list of
#' @param meas outcome measure variable name in data-data.frame as a string. Can be numeric or factor. Result is calculated accordingly.
#' @param group groups to compare, as string.
#' @param var Default is NULL.
#' @param adj variables to adjust for, as string.
#' @param data dataframe of data.
#' @param dec decimals for results, standard is set to 2. Mean and sd is dec-1.
#' @keywords strobe
#' @export
#' @examples
#' data('mtcars')
#' mtcars$vs<-factor(mtcars$vs)
#' mtcars$am<-factor(mtcars$am)
#' print_reg_diff_bin(meas="am",group="vs",adj=c("disp","wt"),data=mtcars)
print_reg_diff_bin<-function(meas,group,var=NULL,adj,data,dec=2){
d<-data
m<-d[,c(meas)]
g<-d[,c(group)]
ads<-d[,c(adj)]
dat<-data.frame(m,g,ads)
df<-data.frame(grp=c(group,as.character(levels(g))))
if(!is.factor(m)){
mod<-lm(m~g,data=dat)
ci<-confint(mod)
co<-round(coef(mod)[-1],dec)
lo<-round(ci[-1,1],dec)
up<-round(ci[-1,2],dec)
or_ci<-c("REF",paste0(co," (",lo," to ",up,")"))
amod<-lm(m~.,data=dat)
aci<-confint(amod)
aco<-round(coef(amod)[2:length(levels(g))],dec)
alo<-round(aci[2:length(levels(g)),1],dec)
aup<-round(aci[2:length(levels(g)),2],dec)
aor_ci<-c("REF",paste0(aco," (",alo," to ",aup,")"))
nr<-c()
for (r in 1:length(levels(g))){
vr<-levels(dat$g)[r]
dr<-dat[dat$g==vr,]
n<-as.numeric(nrow(dr[!is.na(dr$m),]))
mean<-round(mean(dr$m,na.rm = TRUE),dec-1)
sd<-round(sd(dr$m,na.rm = TRUE),dec-1)
ms<-paste0(mean," (",sd,")")
nr<-c(nr,n,ms)
}
irl<-rbind(matrix(NA,ncol=4),cbind(matrix(nr,ncol=2,byrow = TRUE),cbind(or_ci,aor_ci)))
colnames(irl)<-c("N","Mean (SD)","Difference","Adjusted Difference")
df<-cbind(df,irl)
ls<-list(linear.regression=df)
}
if(is.factor(m)){
di<-dat
mod<-glm(m~g,family=binomial(),data=di)
ci<-exp(confint(mod))
co<-round(exp(coef(mod))[-1],dec)
lo<-round(ci[-1,1],dec)
up<-round(ci[-1,2],dec)
or_ci<-c("REF",paste0(co," (",lo," to ",up,")"))
amod<-glm(m~.,family=binomial(),data=di)
aci<-exp(confint(amod))
aco<-round(exp(coef(amod))[2:length(levels(g))],dec)
alo<-round(aci[2:length(levels(g)),1],dec)
aup<-round(aci[2:length(levels(g)),2],dec)
aor_ci<-c("REF",paste0(aco," (",alo," to ",aup,")"))
nr<-c()
for (r in 1:length(levels(g))){
vr<-levels(dat$g)[r]
dr<-dat[dat$g==vr,]
n<-as.numeric(nrow(dr[!is.na(dr$m),]))
nl<-levels(m)[2]
out<-nrow(dr[dr$m==nl&!is.na(dr$m),])
pro<-round(out/n*100,0)
rt<-paste0(out," (",pro,"%)")
nr<-c(nr,n,rt)
}
irl<-rbind(matrix(NA,ncol=4),cbind(matrix(nr,ncol=2,byrow = TRUE),cbind(or_ci,aor_ci)))
colnames(irl)<-c("N",paste0("N.",nl),"OR","Adjusted OR")
df<-cbind(df,irl)
ls<-list(logistic.regression=df)
}
ls$adjustments<-names(ads)
return(ls)
}

17
R/quantile_cut.R Normal file
View File

@ -0,0 +1,17 @@
#' Easy function for splitting numeric variable in quantiles
#'
#' Using base/stats functions cut() and quantile().
#' @param x Variable to cut.
#' @param groups Number of groups.
#' @param na.rm Remove NA's. Default is TRUE.
#' @param group.names Names of groups to split to. Default is NULL, giving intervals as names.
#' @param ordered.f Set resulting vector as ordered. Default is FALSE.
#' @keywords quantile
#' @export
#' @examples
#' aa <- as.numeric(sample(1:1000,2000,replace = TRUE))
#' summary(quantile_cut(aa,groups=4)) ## Cuts quartiles
quantile_cut<-function(x,groups,na.rm=TRUE,group.names=NULL,ordered.f=FALSE){
cut(x, quantile(x,probs = seq(0, 1, 1/groups), na.rm = na.rm,names = TRUE, type = 7),include.lowest = TRUE,labels = group.names,ordered_result = ordered.f)
}

View File

@ -1,3 +1,5 @@
#' REWRITE UNDERWAY
#'
#' Print regression results according to STROBE
#'
#' Printable table of two dimensional regression analysis of group vs variable for outcome measure. By group. Includes p-value

View File

@ -1,3 +1,5 @@
#' REWRITE UNDERWAY
#'
#' Print regression results according to STROBE
#'
#' Printable table of three dimensional regression analysis of group vs var for meas. By var. Includes p-values.
@ -9,6 +11,11 @@
#' @param dec decimals for results, standard is set to 2. Mean and sd is dec-1.
#' @keywords strobe
#' @export
#' @examples
#' data('mtcars')
#' mtcars$vs<-factor(mtcars$vs)
#' mtcars$am<-factor(mtcars$am)
#' strobe_diff_byvar(meas="mpg",var="vs",group = "am",adj=c("disp","wt","hp"),data=mtcars)
strobe_diff_byvar<-function(meas,var,group,adj,data,dec=2){

View File

@ -1,15 +1,24 @@
#' OBSOLETE - USE print_reg_diff_bin
#'
#' Print regression results according to STROBE
#'
#' Printable table of regression analysis by group for meas. Detects wether to perform logistic or linear regression.
#' output is list of
#' @param meas outcome meassure variable name in data-data.frame as a string. Can be numeric or factor. Result is calculated accordingly.
#' @param groups groups to compare, as string.
#' @param group groups to compare, as string.
#' @param var Default is NULL
#' @param adj variables to adjust for, as string.
#' @param data dataframe of data.
#' @param dec decimals for results, standard is set to 2. Mean and sd is dec-1.
#' @keywords strobe
#' @export
#' @examples
#' data('mtcars')
#' mtcars$vs<-factor(mtcars$vs)
#' mtcars$am<-factor(mtcars$am)
#' strobe_diff_twodim(meas="am",group="vs",adj=c("disp","wt"),data=mtcars)
strobe_diff_twodim<-function(meas,group,adj,data,dec=2){
strobe_diff_twodim<-function(meas,group,var=NULL,adj,data,dec=2){
## meas: sdmt
## var: rtreat
## group: genotype

View File

@ -1,21 +1,25 @@
#' Regression model of predictors according to STROBE, bi- and multivariate.
#' Regression model of predictors according to STROBE, bi- and multivariable.
#'
#' Printable table of regression model according to STROBE for linear or binary outcome-variables.
#' Includes borth bivariate and multivariate in the same table.
#' Includes both bivariate and multivariate in the same table.
#' Output is a list, with the first item being the main "output" as a dataframe.
#' Automatically uses logistic regression model for dichotomous outcome variable and linear regression model for continous outcome variable. Linear regression will give estimated adjusted true mean in list.
#' Automatically uses logistic regression model for dichotomous outcome variable and linear regression model for continuous outcome variable. Linear regression will give estimated adjusted true mean in list.
#' For logistic regression gives count of outcome variable pr variable level.
#' @param meas binary outcome meassure variable, column name in data.frame as a string. Can be numeric or factor. Result is calculated accordingly.
#' @param meas binary outcome measure variable, column name in data.frame as a string. Can be numeric or factor. Result is calculated accordingly.
#' @param adj variables to adjust for, as string.
#' @param data dataframe of data.
#' @param dec decimals for results, standard is set to 2. Mean and sd is dec-1.
#' @param n.by.adj flag to indicate wether to count number of patients in adjusted model or overall for outcome meassure not NA.
#' @param n.by.adj flag to indicate whether to count number of patients in adjusted model or overall for outcome measure not NA.
#' @param p.val flag to include p-values in table, set to FALSE as standard.
#' @keywords logistic
#' @export
strobe_pred<-function(meas,adj,data,dec=2,n.by.adj=FALSE,p.val=FALSE){
## Wish list:
## - SPEED, maybe flags to include/exclude time consuming tasks
## - Include ANOVA in output list, flag to include
require(dplyr)
d<-data

View File

@ -7,9 +7,13 @@
age_calc(dob, enddate = Sys.Date(), units = "years", precise = TRUE)
}
\arguments{
\item{dob}{Date of birth.}
\item{dob}{Date of birth. Data format follows standard POSIX layout. Format is yyyy-mm-dd.}
\item{enddate}{Date to calculate age at.}
\item{enddate}{Date to calculate age at. Format is yyyy-mm-dd.}
\item{units}{Default is "years". Can be changed to "days".}
\item{precise}{Default is TRUE. Flag set whether to include calculations of spring years. Only of matter if using units = "days".}
}
\description{
For age calculations.

35
man/print_reg_diff_bin.Rd Normal file
View File

@ -0,0 +1,35 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/print_reg_diff_bin.R
\name{print_reg_diff_bin}
\alias{print_reg_diff_bin}
\title{SHOULD BE COMBINED WITH strobe_pred (try transfer the REF) - or keep as a fast/slim version??}
\usage{
print_reg_diff_bin(meas, group, var = NULL, adj, data, dec = 2)
}
\arguments{
\item{meas}{outcome measure variable name in data-data.frame as a string. Can be numeric or factor. Result is calculated accordingly.}
\item{group}{groups to compare, as string.}
\item{var}{Default is NULL.}
\item{adj}{variables to adjust for, as string.}
\item{data}{dataframe of data.}
\item{dec}{decimals for results, standard is set to 2. Mean and sd is dec-1.}
}
\description{
Print-friendly regression results for easy export to text editor
}
\details{
Printable table of regression analysis by group for outcome measure. Detects whether to perform logistic or linear regression.
output is list of
}
\examples{
data('mtcars')
mtcars$vs<-factor(mtcars$vs)
mtcars$am<-factor(mtcars$am)
print_reg_diff_bin(meas="am",group="vs",adj=c("disp","wt"),data=mtcars)
}
\keyword{strobe}

27
man/quantile_cut.Rd Normal file
View File

@ -0,0 +1,27 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/quantile_cut.R
\name{quantile_cut}
\alias{quantile_cut}
\title{Easy function for splitting numeric variable in quantiles}
\usage{
quantile_cut(x, groups, na.rm = TRUE, group.names = NULL, ordered.f = FALSE)
}
\arguments{
\item{x}{Variable to cut.}
\item{groups}{Number of groups.}
\item{na.rm}{Remove NA's. Default is TRUE.}
\item{group.names}{Names of groups to split to. Default is NULL, giving intervals as names.}
\item{ordered.f}{Set resulting vector as ordered. Default is FALSE.}
}
\description{
Using base/stats functions cut() and quantile().
}
\examples{
aa <- as.numeric(sample(1:1000,2000,replace = TRUE))
summary(quantile_cut(aa,groups=4)) ## Cuts quartiles
}
\keyword{quantile}

View File

@ -2,7 +2,7 @@
% Please edit documentation in R/strobe_diff_bygroup.R
\name{strobe_diff_bygroup}
\alias{strobe_diff_bygroup}
\title{Print regression results according to STROBE}
\title{REWRITE UNDERWAY}
\usage{
strobe_diff_bygroup(meas, var, group, adj, data, dec = 2)
}
@ -20,6 +20,9 @@ strobe_diff_bygroup(meas, var, group, adj, data, dec = 2)
\item{dec}{decimals for results, standard is set to 2. Mean and sd is dec-1. pval has 3 decimals.}
}
\description{
Print regression results according to STROBE
}
\details{
Printable table of two dimensional regression analysis of group vs variable for outcome measure. By group. Includes p-value
Group and variable has to be dichotomous factor.
}

View File

@ -2,7 +2,7 @@
% Please edit documentation in R/strobe_diff_byvar.R
\name{strobe_diff_byvar}
\alias{strobe_diff_byvar}
\title{Print regression results according to STROBE}
\title{REWRITE UNDERWAY}
\usage{
strobe_diff_byvar(meas, var, group, adj, data, dec = 2)
}
@ -20,6 +20,15 @@ strobe_diff_byvar(meas, var, group, adj, data, dec = 2)
\item{dec}{decimals for results, standard is set to 2. Mean and sd is dec-1.}
}
\description{
Print regression results according to STROBE
}
\details{
Printable table of three dimensional regression analysis of group vs var for meas. By var. Includes p-values.
}
\examples{
data('mtcars')
mtcars$vs<-factor(mtcars$vs)
mtcars$am<-factor(mtcars$am)
strobe_diff_byvar(meas="mpg",var="vs",group = "am",adj=c("disp","wt","hp"),data=mtcars)
}
\keyword{strobe}

View File

@ -2,22 +2,34 @@
% Please edit documentation in R/strobe_diff_twodim.R
\name{strobe_diff_twodim}
\alias{strobe_diff_twodim}
\title{Print regression results according to STROBE}
\title{OBSOLETE - USE print_reg_diff_bin}
\usage{
strobe_diff_twodim(meas, group, adj, data, dec = 2)
strobe_diff_twodim(meas, group, var = NULL, adj, data, dec = 2)
}
\arguments{
\item{meas}{outcome meassure variable name in data-data.frame as a string. Can be numeric or factor. Result is calculated accordingly.}
\item{group}{groups to compare, as string.}
\item{var}{Default is NULL}
\item{adj}{variables to adjust for, as string.}
\item{data}{dataframe of data.}
\item{dec}{decimals for results, standard is set to 2. Mean and sd is dec-1.}
\item{groups}{groups to compare, as string.}
}
\description{
Print regression results according to STROBE
}
\details{
Printable table of regression analysis by group for meas. Detects wether to perform logistic or linear regression.
output is list of
}
\examples{
data('mtcars')
mtcars$vs<-factor(mtcars$vs)
mtcars$am<-factor(mtcars$am)
strobe_diff_twodim(meas="am",group="vs",adj=c("disp","wt"),data=mtcars)
}
\keyword{strobe}

View File

@ -2,12 +2,12 @@
% Please edit documentation in R/strobe_pred.R
\name{strobe_pred}
\alias{strobe_pred}
\title{Regression model of predictors according to STROBE, bi- and multivariate.}
\title{Regression model of predictors according to STROBE, bi- and multivariable.}
\usage{
strobe_pred(meas, adj, data, dec = 2, n.by.adj = FALSE, p.val = FALSE)
}
\arguments{
\item{meas}{binary outcome meassure variable, column name in data.frame as a string. Can be numeric or factor. Result is calculated accordingly.}
\item{meas}{binary outcome measure variable, column name in data.frame as a string. Can be numeric or factor. Result is calculated accordingly.}
\item{adj}{variables to adjust for, as string.}
@ -15,15 +15,15 @@ strobe_pred(meas, adj, data, dec = 2, n.by.adj = FALSE, p.val = FALSE)
\item{dec}{decimals for results, standard is set to 2. Mean and sd is dec-1.}
\item{n.by.adj}{flag to indicate wether to count number of patients in adjusted model or overall for outcome meassure not NA.}
\item{n.by.adj}{flag to indicate whether to count number of patients in adjusted model or overall for outcome measure not NA.}
\item{p.val}{flag to include p-values in table, set to FALSE as standard.}
}
\description{
Printable table of regression model according to STROBE for linear or binary outcome-variables.
Includes borth bivariate and multivariate in the same table.
Includes both bivariate and multivariate in the same table.
Output is a list, with the first item being the main "output" as a dataframe.
Automatically uses logistic regression model for dichotomous outcome variable and linear regression model for continous outcome variable. Linear regression will give estimated adjusted true mean in list.
Automatically uses logistic regression model for dichotomous outcome variable and linear regression model for continuous outcome variable. Linear regression will give estimated adjusted true mean in list.
For logistic regression gives count of outcome variable pr variable level.
}
\keyword{logistic}