R/strobe_diff_byvar.R

Defines functions strobe_diff_byvar

Documented in strobe_diff_byvar

#' REWRITE UNDERWAY - replaced by 'print_diff_byvar'
#'
#' Print regression results according to STROBE
#'
#' Printable table of three dimensional regression analysis of group vs var for meas. By var. Includes p-values.
#' @param meas outcome meassure variable name in data-data.frame as a string. Can be numeric or factor. Result is calculated accordingly.
#' @param var binary exposure variable to compare against (active vs placebo). As string.
#' @param group groups to compare, as string.
#' @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_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){

  ## meas: sdmt
  ## var: rtreat
  ## group: genotype
  ## for dichotome exposure variable (var)

  d <- data
  m <- d[, c(meas)]
  v <- d[, c(var)]
  g <- d[, c(group)]
  ads <- d[, c(adj)]
  dat <- data.frame(m, v, g, ads)
  df <- data.frame(grp = c(NA, as.character(levels(g))))
  if (!is.factor(m)) {
    for (i in 1:length(levels(v))) {
      grp <- levels(dat$v)[i]
      di <- dat[dat$v == grp, ][, -2]
      mod <- lm(m ~ g, data = di)

      p <- coef(summary(mod))[2:length(levels(g)),4]
      p<-ifelse(p<0.001,"<0.001",round(p,3))
      p <- ifelse(p<=0.05|p=="<0.001",paste0("*",p),
                  ifelse(p>0.05&p<=0.1,paste0(".",p),p))
      pv<-c("-",p)

      co <- c("-", round(coef(mod)[-1], dec))
      ci<-round(confint(mod),dec)[2:length(levels(g)),]
      lo <- c("-", ci[,1])
      up <- c("-", ci[,2])
      ci <- paste0(co, " (", lo, " to ", up, ")")

      amod <- lm(m ~ ., data = di)

      pa <- coef(summary(amod))[2:length(levels(g)),4]
      pa<-ifelse(pa<0.001,"<0.001",round(pa,3))
      pa <- ifelse(pa<=0.05|pa=="<0.001",paste0("*",pa),
                   ifelse(pa>0.05&pa<=0.1,paste0(".",pa),pa))
      apv<-c("-",pa)

      aco <- c("-", round(coef(amod)[2:length(levels(g))],
                          dec))
      aci<-round(confint(amod),dec)[2:length(levels(g)),]
      alo <- c("-", aci[,1])
      aup <- c("-", aci[,2])
      aci <- paste0(aco, " (", alo, " to ", aup, ")")
      nr <- c()
      for (r in 1:length(levels(g))) {
        vr <- levels(di$g)[r]
        dr <- di[di$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(grp, ncol = 6), cbind(matrix(nr,
                                                       ncol = 2, byrow = TRUE), cbind(ci,pv, aci,apv)))
      colnames(irl) <- c("N",
                         "Mean (SD)",
                         "Difference",
                         "p-value",
                         "Adjusted Difference",
                         "Adjusted p-value")
      df <- cbind(df, irl)
    }
  }
  if (is.factor(m)) {
    for (i in 1:length(levels(v))) {
      grp <- levels(dat$v)[i]
      di <- dat[dat$v == grp, ][, -2]
      mod <- glm(m ~ g, family = binomial(), data = di)

      p <- coef(summary(mod))[2:length(levels(g)),4]
      p<-ifelse(p<0.001,"<0.001",round(p,3))
      p <- ifelse(p<=0.05|p=="<0.001",paste0("*",p),
                  ifelse(p>0.05&p<=0.1,paste0(".",p),p))
      pv<-c("-",p)

      co <- c("-", round(exp(coef(mod)[-1]), dec))
      ci <- suppressMessages(round(exp(confint(mod)),dec))[2:length(levels(g)),]
      lo <- c("-", ci[,1])
      up <- c("-", ci[,2])
      ci <- paste0(co, " (", lo, " to ", up, ")")

      amod <- glm(m ~ ., family = binomial(), data = di)

      pa <- coef(summary(amod))[2:length(levels(g)),4]
      pa<-ifelse(pa<0.001,"<0.001",round(pa,3))
      pa <- ifelse(pa<=0.05|pa=="<0.001",paste0("*",pa),
                   ifelse(pa>0.05&pa<=0.1,paste0(".",pa),pa))
      apv<-c("-",pa)

      aco <- c("-", suppressMessages(round(exp(coef(amod)[2:length(levels(g))]),
                                           dec)))
      aci <- suppressMessages(round(exp(confint(mod)),dec)[2:length(levels(g)),])
      alo <- c("-", aci[,1])
      aup <- c("-", aci[,2])
      aci <- paste0(aco, " (", alo, " to ", aup, ")")

      nr <- c()
      for (r in 1:length(levels(g))) {
        vr <- levels(di$g)[r]
        dr <- di[di$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(grp, ncol = 4), cbind(matrix(nr,
                                                       ncol = 2, byrow = TRUE), cbind(ci,pv, aci,apv)))
      colnames(irl) <- c("N",
                         paste0("N.", nl),
                         "OR",
                         "p-value",
                         "Adjusted OR",
                         "Adjusted p-value")
      df <- cbind(df, irl)
    }
  }
  return(df)
}
agdamsbo/daDoctoR documentation built on Aug. 30, 2022, 4:29 p.m.