R/wrap.lm.R

Defines functions wrap.lm

Documented in wrap.lm

#' Linear regression
#'
#' @description Performs linear regression analyses. The function delegates
#' the primary computations to \code{\link[stats]{lm}} and
#' \code{\link[lm.beta]{lm.beta}}.
#'
#' @param model The linear model
#' @param standardized A logical argument: if \code{FALSE}, the function
#' returns unstandardized coefficients; if \code{TRUE}, the function returns
#' standardized coefficients
#'
#' @seealso \code{\link[stats]{lm}}, \code{\link[lm.beta]{lm.beta}}
#'
#' @examples
#' ## Linear regression with unstandardized coefficients
#' wrap.lm(model = bdata$DV3 ~ bdata$DV1 * bdata$DV2, standardized = FALSE)
#'
#' # Linear regression with standardized coefficients
#' wrap.lm(model = bdata$DV3 ~ bdata$DV1 * bdata$DV2, standardized = TRUE)
#' @import stringr lm.beta stats
#' @export
wrap.lm <- function(model,standardized=FALSE) {

  # Error checks
  if(standardized!=FALSE&standardized!=TRUE) {return("Argument \"standardized\" must be equal to FALSE or TRUE.")}

  summary <- summary(lm.beta(lm(model)))

  df_name <- ""
  if(regexpr("\\$",rownames(summary$coefficients)[2])>0) {
    df_name <- substr(rownames(summary$coefficients)[2],1,regexpr("\\$",rownames(summary$coefficients)[2])[1]-1)
    df_name <- paste(df_name,"\\$",sep="")
  }

  # Unstandardized regression coefficients
  if(standardized==F) {
    clip <- ""
    for (i in 1:(nrow(summary$coefficients))) {
      clip <- paste(clip,
                    "# ",gsub(df_name,"",gsub(":"," x ",rownames(summary$coefficients)[i])),": b = ",wrap.rd0(summary$coefficients[i,1],2),", t(",summary$df[2],") = ",wrap.rd0(summary$coefficients[i,4],2),", p",if (as.numeric(summary$coefficients[i,5]) < .001) {" < .001"},if (as.numeric(summary$coefficients[i,5]) >= .001) {" = "},if (as.numeric(summary$coefficients[i,5]) >= .001) {wrap.rd(summary$coefficients[i,5],3)},"\n",
                    sep="")
    }
    clip <- paste(substr(clip,1,nchar(clip)-1))
    wrap.writeClipboard(clip)

    return(
      for (i in 1:(nrow(summary$coefficients))) {
        cat(
          "# ",gsub(df_name,"",gsub(":"," x ",rownames(summary$coefficients)[i])),": b = ",wrap.rd0(summary$coefficients[i,1],2),", t(",summary$df[2],") = ",wrap.rd0(summary$coefficients[i,4],2),", p",if (as.numeric(summary$coefficients[i,5]) < .001) {" < .001"},if (as.numeric(summary$coefficients[i,5]) >= .001) {" = "},if (as.numeric(summary$coefficients[i,5]) >= .001) {wrap.rd(summary$coefficients[i,5],3)},"\n",
          sep="")
      }
    )
  }

  # Standardized regression coefficients
  if(standardized==T) {
    clip <- ""
    for (i in 1:(nrow(summary$coefficients))) {
      if(i==1&rownames(summary$coefficients)[i]=="(Intercept)") {clip <- paste(clip,"# (Intercept): Beta = 0.00","\n",sep="")}
      if(i>1|rownames(summary$coefficients)[i]!="(Intercept)") {
        clip <- paste(clip,
                      "# ",gsub(df_name,"",gsub(":"," x ",rownames(summary$coefficients)[i])),": Beta = ",wrap.rd0(summary$coefficients[i,2],2),", t(",summary$df[2],") = ",wrap.rd0(summary$coefficients[i,4],2),", p",if (as.numeric(summary$coefficients[i,5]) < .001) {" < .001"},if (as.numeric(summary$coefficients[i,5]) >= .001) {" = "},if (as.numeric(summary$coefficients[i,5]) >= .001) {wrap.rd(summary$coefficients[i,5],3)},"\n",
                      sep="")
      }
    }
    clip <- paste(substr(clip,1,nchar(clip)-1))
    wrap.writeClipboard(clip)
    clip <- ""
    return(
      for (i in 1:(nrow(summary$coefficients))) {
        if(i==1&rownames(summary$coefficients)[i]=="(Intercept)") {clip <- cat(clip,"# (Intercept): Beta = 0.00","\n",sep="")}
        if(i>1|rownames(summary$coefficients)[i]!="(Intercept)") {
          clip <- cat(clip,
                      "# ",gsub(df_name,"",gsub(":"," x ",rownames(summary$coefficients)[i])),": Beta = ",wrap.rd0(summary$coefficients[i,2],2),", t(",summary$df[2],") = ",wrap.rd0(summary$coefficients[i,4],2),", p",if (as.numeric(summary$coefficients[i,5]) < .001) {" < .001"},if (as.numeric(summary$coefficients[i,5]) >= .001) {" = "},if (as.numeric(summary$coefficients[i,5]) >= .001) {wrap.rd(summary$coefficients[i,5],3)},"\n",
                      sep="")
        }
      }
    )
  }
}
michaelkardas/behavioralwrappers documentation built on Jan. 2, 2020, 7:46 a.m.