R/wrap.anova.main.R

Defines functions wrap.anova.main

Documented in wrap.anova.main

#' ANOVA (main effects & interaction effects)
#'
#' @description Computes main effects and interaction effects for ANOVA with
#' up to 1 within-subjects factor and up to 3 between-subjects factors. The function
#' delegates the primary computations to \code{\link[ez]{ezANOVA}}. Note that this
#' function assumes categorical (i.e., unordered) independent variables and fixed
#' effects. In the output, hp2 denotes partial eta squared.
#'
#' @param dv1 Column vector containing the between-subjects dependent variable
#' OR multiple column vectors containing the within-subjects dependent variables
#' @param iv1,iv2,iv3 Column vectors containing the between-subjects independent variables
#' @param type Numeric argument representing sum-of-squares type (\code{1}, \code{2}, or \code{3})
#'
#' @seealso \code{\link[ez]{ezANOVA}}
#'
#' @examples
#' ## ANOVA with 1 within-subjects factor
#' wrap.anova.main(dv1 = bdata[c(4, 5)])
#'
#' ## ANOVA with 2 between-subjects factors
#' wrap.anova.main(dv1 = bdata$DV1, iv1 = bdata$IV1, iv2 = bdata$IV2)
#'
#' ## ANOVA with 1 within-subjects factor & 2 between-subjects factors
#' wrap.anova.main(dv1 = bdata[c(4, 5)], iv1 = bdata$IV1, iv2 = bdata$IV2)
#' @import stringr effsize ez tidyr
#' @export
wrap.anova.main <- function(dv1,iv1=NULL,iv2=NULL,iv3=NULL,type=3) {

  options(scipen=999)

  # Error checks
  if(is.null(dv1)) {return(paste("Cannot find the column vector inputted to parameter dv1."))}
  if(is.null(substitute(iv1))==F&is.null(iv1)==T) {return(paste("Cannot find the column vector inputted to parameter iv1."))}
  if(is.null(substitute(iv2))==F&is.null(iv2)==T) {return(paste("Cannot find the column vector inputted to parameter iv2."))}
  if(is.null(substitute(iv3))==F&is.null(iv3)==T) {return(paste("Cannot find the column vector inputted to parameter iv3."))}
  for (i in 1:ncol(as.data.frame(dv1))) {
    if(is.numeric(as.data.frame(dv1)[,i])==F) {return("Error: Must enter numeric columns for the \"dv1\" parameter.")}
    for (j in 1:nrow(as.data.frame(dv1))) {
      if(is.na(as.data.frame(dv1)[j,i])==T) {return("Error: One or more entries in the dv1 argument is NA.")}
    }
  }
  if(is.null(iv1)==F) {
    for (i in 1:length(iv1)) {
      if(is.na(iv1[i]==T)) {return("Error: One or more entries in the iv1 argument is NA.")}
    }
  }
  if(is.null(iv2)==F) {
    for (i in 1:length(iv2)) {
      if(is.na(iv2[i]==T)) {return("Error: One or more entries in the iv2 argument is NA.")}
    }
  }
  if(is.null(iv3)==F) {
    for (i in 1:length(iv3)) {
      if(is.na(iv3[i]==T)) {return("Error: One or more entries in the iv3 argument is NA.")}
    }
  }
  if(is.data.frame(iv1)==T|is.data.frame(iv2)==T|is.data.frame(iv3)==T) {
    return("Error: Must enter column vectors, rather than data frames, for the independent variables.")
  }
  if(type!=1&type!=2&type!=3) {return("Error: Argument \"type\" must be equal to 1, 2, or 3.")}
  if(is.null(iv1)==F) {if(is.factor(iv1)==F) {print("Note: Argument iv1 will be converted to a factor variable.")}}
  if(is.null(iv2)==F) {if(is.factor(iv2)==F) {print("Note: Argument iv2 will be converted to a factor variable.")}}
  if(is.null(iv3)==F) {if(is.factor(iv3)==F) {print("Note: Argument iv3 will be converted to a factor variable.")}}

  if(is.data.frame(dv1)==T) {
    df_temp <- get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv)
    if(is.null(iv1)==F&is.data.frame(iv1)==F) {df_temp[substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)] <- as.factor(iv1)}
    if(is.null(iv2)==F&is.data.frame(iv2)==F) {df_temp[substring(deparse(substitute(iv2)),str_locate_all(pattern=coll('$'),deparse(substitute(iv2)))[[1]][1]+1)] <- as.factor(iv2)}
    if(is.null(iv3)==F&is.data.frame(iv3)==F) {df_temp[substring(deparse(substitute(iv3)),str_locate_all(pattern=coll('$'),deparse(substitute(iv3)))[[1]][1]+1)] <- as.factor(iv3)}
    assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1), df_temp, envir=.GlobalEnv)
  }

  if(is.data.frame(dv1)==F) {
    df_temp <- get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="$")-1),envir = .GlobalEnv)
    if(is.null(iv1)==F&is.data.frame(iv1)==F) {df_temp[substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)] <- as.factor(iv1)}
    if(is.null(iv2)==F&is.data.frame(iv2)==F) {df_temp[substring(deparse(substitute(iv2)),str_locate_all(pattern=coll('$'),deparse(substitute(iv2)))[[1]][1]+1)] <- as.factor(iv2)}
    if(is.null(iv3)==F&is.data.frame(iv3)==F) {df_temp[substring(deparse(substitute(iv3)),str_locate_all(pattern=coll('$'),deparse(substitute(iv3)))[[1]][1]+1)] <- as.factor(iv3)}
    assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="$")-1), df_temp, envir=.GlobalEnv)
  }

  print("ASSUMPTIONS: This function assumes categorical (i.e., unordered) independent variables and fixed effects.")
  if(is.data.frame(dv1)==F) {

    # 3-way between-subjects ANOVA
    if(is.null(iv1)==F&is.null(iv2)==F&is.null(iv3)==F) {
      dv1 <- as.numeric(dv1); iv1_ <- factor(iv1); iv2_ <- factor(iv2); iv3_ <- factor(iv3)
      x <- options('contrasts') # store original contrasts
      options(contrasts = c('contr.sum','contr.poly'))

      # assign variable names so that you can produce the IV names within the output as well
      iv1name <- substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)
      iv2name <- substring(deparse(substitute(iv2)),str_locate_all(pattern=coll('$'),deparse(substitute(iv2)))[[1]][1]+1)
      iv3name <- substring(deparse(substitute(iv3)),str_locate_all(pattern=coll('$'),deparse(substitute(iv3)))[[1]][1]+1)
      df <- as.data.frame(cbind(dv1,iv1_,iv2_,iv3_,1:length(iv1_)))
      colnames(df) <- c("dv1","iv1","iv2","iv3","userAnovaIDNum0")
      df$userAnovaIDNum0 <- factor(df$userAnovaIDNum0); df$iv1 <- factor(df$iv1); df$iv2 <- factor(df$iv2); df$iv3 <- factor(df$iv3)
      Anova <- ezANOVA(data=df,dv=dv1,wid=userAnovaIDNum0,between=.(iv1,iv2,iv3),detailed=T,type=type)$ANOVA
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function

      wrap.writeClipboard(
        paste("# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
              "\n","# ",iv2name," (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
              "\n","# ",iv3name," (main effect): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
              "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[5],", ",Anova$DFd[5],") = ",wrap.rd0(Anova$F[5],2),", p",if (as.numeric(Anova$p[5]) < .001) {" < .001"},if (as.numeric(Anova$p[5]) >= .001) {" = "},if (as.numeric(Anova$p[5]) >= .001) {wrap.rd(Anova$p[5],3)},", hp2 = ",wrap.rd(Anova$SSn[5]/(Anova$SSn[5]+Anova$SSd[5]),2),
              "\n","# ",iv1name," x ",iv3name," (2-way interaction): F(",Anova$DFn[6],", ",Anova$DFd[6],") = ",wrap.rd0(Anova$F[6],2),", p",if (as.numeric(Anova$p[6]) < .001) {" < .001"},if (as.numeric(Anova$p[6]) >= .001) {" = "},if (as.numeric(Anova$p[6]) >= .001) {wrap.rd(Anova$p[6],3)},", hp2 = ",wrap.rd(Anova$SSn[6]/(Anova$SSn[6]+Anova$SSd[6]),2),
              "\n","# ",iv2name," x ",iv3name," (2-way interaction): F(",Anova$DFn[7],", ",Anova$DFd[7],") = ",wrap.rd0(Anova$F[7],2),", p",if (as.numeric(Anova$p[7]) < .001) {" < .001"},if (as.numeric(Anova$p[7]) >= .001) {" = "},if (as.numeric(Anova$p[7]) >= .001) {wrap.rd(Anova$p[7],3)},", hp2 = ",wrap.rd(Anova$SSn[7]/(Anova$SSn[7]+Anova$SSd[7]),2),
              "\n","# ",iv1name," x ",iv2name," x ",iv3name," (3-way interaction): F(",Anova$DFn[8],", ",Anova$DFd[8],") = ",wrap.rd0(Anova$F[8],2),", p",if (as.numeric(Anova$p[8]) < .001) {" < .001"},if (as.numeric(Anova$p[8]) >= .001) {" = "},if (as.numeric(Anova$p[8]) >= .001) {wrap.rd(Anova$p[8],3)},", hp2 = ",wrap.rd(Anova$SSn[8]/(Anova$SSn[8]+Anova$SSd[8]),2),
              sep="")
      )
      return(
        cat("\n","# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
            "\n","# ",iv2name," (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
            "\n","# ",iv3name," (main effect): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
            "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[5],", ",Anova$DFd[5],") = ",wrap.rd0(Anova$F[5],2),", p",if (as.numeric(Anova$p[5]) < .001) {" < .001"},if (as.numeric(Anova$p[5]) >= .001) {" = "},if (as.numeric(Anova$p[5]) >= .001) {wrap.rd(Anova$p[5],3)},", hp2 = ",wrap.rd(Anova$SSn[5]/(Anova$SSn[5]+Anova$SSd[5]),2),
            "\n","# ",iv1name," x ",iv3name," (2-way interaction): F(",Anova$DFn[6],", ",Anova$DFd[6],") = ",wrap.rd0(Anova$F[6],2),", p",if (as.numeric(Anova$p[6]) < .001) {" < .001"},if (as.numeric(Anova$p[6]) >= .001) {" = "},if (as.numeric(Anova$p[6]) >= .001) {wrap.rd(Anova$p[6],3)},", hp2 = ",wrap.rd(Anova$SSn[6]/(Anova$SSn[6]+Anova$SSd[6]),2),
            "\n","# ",iv2name," x ",iv3name," (2-way interaction): F(",Anova$DFn[7],", ",Anova$DFd[7],") = ",wrap.rd0(Anova$F[7],2),", p",if (as.numeric(Anova$p[7]) < .001) {" < .001"},if (as.numeric(Anova$p[7]) >= .001) {" = "},if (as.numeric(Anova$p[7]) >= .001) {wrap.rd(Anova$p[7],3)},", hp2 = ",wrap.rd(Anova$SSn[7]/(Anova$SSn[7]+Anova$SSd[7]),2),
            "\n","# ",iv1name," x ",iv2name," x ",iv3name," (3-way interaction): F(",Anova$DFn[8],", ",Anova$DFd[8],") = ",wrap.rd0(Anova$F[8],2),", p",if (as.numeric(Anova$p[8]) < .001) {" < .001"},if (as.numeric(Anova$p[8]) >= .001) {" = "},if (as.numeric(Anova$p[8]) >= .001) {wrap.rd(Anova$p[8],3)},", hp2 = ",wrap.rd(Anova$SSn[8]/(Anova$SSn[8]+Anova$SSd[8]),2),
            sep="")
      )
    }

    # 2-way between-subjects ANOVA
    if(is.null(iv1)==F&is.null(iv2)==F) {
      dv1 <- as.numeric(dv1); iv1_ <- factor(iv1); iv2_ <- factor(iv2)
      x <- options('contrasts') # store original contrasts
      options(contrasts = c('contr.sum','contr.poly'))

      # assign variable names so that you can produce the IV names within the output as well
      iv1name <- substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)
      iv2name <- substring(deparse(substitute(iv2)),str_locate_all(pattern=coll('$'),deparse(substitute(iv2)))[[1]][1]+1)

      df <- data.frame(dv1,iv1_,iv2_,1:length(iv1_))
      colnames(df) <- c("dv1","iv1","iv2","userAnovaIDNum0")
      df$userAnovaIDNum0 <- factor(df$userAnovaIDNum0); df$iv1 <- factor(df$iv1); df$iv2 <- factor(df$iv2)
      Anova <- ezANOVA(data=df,dv=dv1,wid=userAnovaIDNum0,between=.(iv1,iv2),detailed=T,type=type)$ANOVA
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function

      wrap.writeClipboard(
        paste("# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
              "\n","# ",iv2name," (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
              "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
              sep="")
      )
      return(
        cat("\n","# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
            "\n","# ",iv2name," (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
            "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
            sep="")
      )
    }

    # One-way between-subjects ANOVA
    if(is.null(iv2)==T) {
      if(is.null(iv1)==F) {iv1 <- factor(iv1)}

      df <- data.frame(iv1,dv1)
      x <- options('contrasts') # store original contrasts
      options(contrasts = c('contr.sum','contr.poly'))

      # assign variable names so that you can produce the IV names within the output as well
      df <- cbind(df,1:nrow(df))
      colnames(df) <- c("iv1","dv1","userAnovaIDNum0")
      df$userAnovaIDNum0 <- factor(df$userAnovaIDNum0); df$iv1 <- factor(df$iv1)
      Anova <- ezANOVA(data=df,dv=dv1,wid=userAnovaIDNum0,between=iv1,detailed=T,type=type)$ANOVA
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function

      wrap.writeClipboard(
        paste("# F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
              sep="")
      )
      return(
        cat("\n","# F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
            sep="")
      )
    }
  }

  # One or more repeated measures.
  if(is.data.frame(dv1)==T) {
    data_frame <- get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv)
    data_frame$userAnovaIDNum <- NULL
    original_column_names <- names(data_frame)
    duplicates <- which(duplicated(original_column_names))
    for (i in 1:length(duplicates)) {
      names(data_frame)[duplicates[i]] <- paste(names(data_frame)[duplicates[i]],runif(1))
    }
    data_frame$userAnovaIDNum <- 0
    for (i in 1:nrow(data_frame)) {
      data_frame$userAnovaIDNum[i] <- i
    }
    assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1), data_frame, envir = .GlobalEnv)

    x <- options('contrasts') # store original contrasts
    options(contrasts = c('contr.sum','contr.poly'))

    # One-way ANOVA, within-subjects
    if(is.null(iv1)==T) {
      temp0 <- colnames(dv1)
      temp <- gather(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),,envir = .GlobalEnv),Ratings,Scale,one_of(temp0),factor_key=TRUE)
      temp$userAnovaIDNum0 <- factor(temp[[which(colnames(temp)==colnames(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv))[grep('^userAnovaIDNum', names(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv)))[1]])]])
      Anova <- ezANOVA(data=data.frame(temp),dv=Scale,wid=userAnovaIDNum0,within=.(Ratings),detailed=T,type=type)$ANOVA
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function
      data_frame$userAnovaIDNum <- NULL
      names(data_frame) <- original_column_names
      assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1), data_frame, envir = .GlobalEnv)

      if (Anova$p[2]<.001) {
        wrap.writeClipboard(paste(" # F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$"F"[2],2),", p < .001",", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),sep=""))
        return(cat("\n"," # F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$"F"[2],2),", p < .001",", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),sep=""))
      }

      else {
        wrap.writeClipboard(paste(" # F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$"F"[2],2),", p = ",wrap.rd(Anova$p[2],3),", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),sep=""))
        return(cat("\n"," # F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$"F"[2],2),", p = ",wrap.rd(Anova$p[2],3),", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),sep=""))
      }
    }

    ### Two-way ANOVA with one factor within-subjects
    if(is.null(iv1)==F&is.null(iv2)==T) {

      # assign variable names so that you can produce the IV names within the output as well
      iv1name <- substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)
      temp0 <- colnames(dv1)
      temp <- gather(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv),Ratings,Scale,one_of(temp0),factor_key=TRUE)
      temp$userAnovaIDNum0 <- factor(temp[[which(colnames(temp)==colnames(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv))[grep('^userAnovaIDNum', names(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv)))[1]])]])
      Anova <- eval(parse(text=paste0('ezANOVA(data=data.frame(temp),dv=Scale,wid=userAnovaIDNum0,within=.(Ratings),between=.(', sub('.*\\$', '', substitute(iv1))[3],'),detailed=T,type=type)$ANOVA')))
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function
      data_frame$userAnovaIDNum <- NULL
      names(data_frame) <- original_column_names
      assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1), data_frame, envir = .GlobalEnv)

      wrap.writeClipboard(
        paste("# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
              "\n","# Within-Subjects (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
              "\n","# ",iv1name," x Within-Subjects (2-way interaction): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
              sep="")
      )
      return(
        cat("\n","# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
            "\n","# Within-Subjects (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
            "\n","# ",iv1name," x Within-Subjects (2-way interaction): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
            sep="")
      )
    }

    ### Three-way ANOVA with one factor within-subjects
    if(is.null(iv1)==F&is.null(iv2)==F&is.null(iv3)==T) {

      # assign variable names so that you can produce the IV names within the output as well
      iv1name <- substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)
      iv2name <- substring(deparse(substitute(iv2)),str_locate_all(pattern=coll('$'),deparse(substitute(iv2)))[[1]][1]+1)
      temp0 <- colnames(dv1)
      temp <- gather(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv),Ratings,Scale,one_of(temp0),factor_key=TRUE)
      temp$userAnovaIDNum0 <- factor(temp[[which(colnames(temp)==colnames(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv))[grep('^userAnovaIDNum', names(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv)))[1]])]])
      Anova <- eval(parse(text=paste0('ezANOVA(data=data.frame(temp),dv=Scale,wid=userAnovaIDNum0,within=.(Ratings),between=.(', sub('.*\\$', '', substitute(iv1))[3],',', sub('.*\\$', '', substitute(iv2))[3],'),detailed=T,type=type)$ANOVA')))
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function
      data_frame$userAnovaIDNum <- NULL
      names(data_frame) <- original_column_names
      assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1), data_frame, envir = .GlobalEnv)

      wrap.writeClipboard(
        paste("# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
              "\n","# ",iv2name," (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
              "\n","# Within-Subjects (main effect): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
              "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[5],", ",Anova$DFd[5],") = ",wrap.rd0(Anova$F[5],2),", p",if (as.numeric(Anova$p[5]) < .001) {" < .001"},if (as.numeric(Anova$p[5]) >= .001) {" = "},if (as.numeric(Anova$p[5]) >= .001) {wrap.rd(Anova$p[5],3)},", hp2 = ",wrap.rd(Anova$SSn[5]/(Anova$SSn[5]+Anova$SSd[5]),2),
              "\n","# ",iv1name," x Within-Subjects (2-way interaction): F(",Anova$DFn[6],", ",Anova$DFd[6],") = ",wrap.rd0(Anova$F[6],2),", p",if (as.numeric(Anova$p[6]) < .001) {" < .001"},if (as.numeric(Anova$p[6]) >= .001) {" = "},if (as.numeric(Anova$p[6]) >= .001) {wrap.rd(Anova$p[6],3)},", hp2 = ",wrap.rd(Anova$SSn[6]/(Anova$SSn[6]+Anova$SSd[6]),2),
              "\n","# ",iv2name," x Within-Subjects (2-way interaction): F(",Anova$DFn[7],", ",Anova$DFd[7],") = ",wrap.rd0(Anova$F[7],2),", p",if (as.numeric(Anova$p[7]) < .001) {" < .001"},if (as.numeric(Anova$p[7]) >= .001) {" = "},if (as.numeric(Anova$p[7]) >= .001) {wrap.rd(Anova$p[7],3)},", hp2 = ",wrap.rd(Anova$SSn[7]/(Anova$SSn[7]+Anova$SSd[7]),2),
              "\n","# ",iv1name," x ",iv2name," x Within-Subjects (3-way interaction): F(",Anova$DFn[8],", ",Anova$DFd[8],") = ",wrap.rd0(Anova$F[8],2),", p",if (as.numeric(Anova$p[8]) < .001) {" < .001"},if (as.numeric(Anova$p[8]) >= .001) {" = "},if (as.numeric(Anova$p[8]) >= .001) {wrap.rd(Anova$p[8],3)},", hp2 = ",wrap.rd(Anova$SSn[8]/(Anova$SSn[8]+Anova$SSd[8]),2),
              sep="")
      )
      return(
        cat("\n","# ",iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
            "\n","# ",iv2name," (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
            "\n","# Within-Subjects (main effect): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
            "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[5],", ",Anova$DFd[5],") = ",wrap.rd0(Anova$F[5],2),", p",if (as.numeric(Anova$p[5]) < .001) {" < .001"},if (as.numeric(Anova$p[5]) >= .001) {" = "},if (as.numeric(Anova$p[5]) >= .001) {wrap.rd(Anova$p[5],3)},", hp2 = ",wrap.rd(Anova$SSn[5]/(Anova$SSn[5]+Anova$SSd[5]),2),
            "\n","# ",iv1name," x Within-Subjects (2-way interaction): F(",Anova$DFn[6],", ",Anova$DFd[6],") = ",wrap.rd0(Anova$F[6],2),", p",if (as.numeric(Anova$p[6]) < .001) {" < .001"},if (as.numeric(Anova$p[6]) >= .001) {" = "},if (as.numeric(Anova$p[6]) >= .001) {wrap.rd(Anova$p[6],3)},", hp2 = ",wrap.rd(Anova$SSn[6]/(Anova$SSn[6]+Anova$SSd[6]),2),
            "\n","# ",iv2name," x Within-Subjects (2-way interaction): F(",Anova$DFn[7],", ",Anova$DFd[7],") = ",wrap.rd0(Anova$F[7],2),", p",if (as.numeric(Anova$p[7]) < .001) {" < .001"},if (as.numeric(Anova$p[7]) >= .001) {" = "},if (as.numeric(Anova$p[7]) >= .001) {wrap.rd(Anova$p[7],3)},", hp2 = ",wrap.rd(Anova$SSn[7]/(Anova$SSn[7]+Anova$SSd[7]),2),
            "\n","# ",iv1name," x ",iv2name," x Within-Subjects (3-way interaction): F(",Anova$DFn[8],", ",Anova$DFd[8],") = ",wrap.rd0(Anova$F[8],2),", p",if (as.numeric(Anova$p[8]) < .001) {" < .001"},if (as.numeric(Anova$p[8]) >= .001) {" = "},if (as.numeric(Anova$p[8]) >= .001) {wrap.rd(Anova$p[8],3)},", hp2 = ",wrap.rd(Anova$SSn[8]/(Anova$SSn[8]+Anova$SSd[8]),2),
            sep="")
      )
    }

    ### Four-way ANOVA with one factor within-subjects
    if(is.data.frame(dv1)==T&is.null(iv1)==F&is.null(iv2)==F&is.null(iv3)==F) {

      # assign variable names so that you can produce the IV names within the output as well
      iv1name <- substring(deparse(substitute(iv1)),str_locate_all(pattern=coll('$'),deparse(substitute(iv1)))[[1]][1]+1)
      iv2name <- substring(deparse(substitute(iv2)),str_locate_all(pattern=coll('$'),deparse(substitute(iv2)))[[1]][1]+1)
      iv3name <- substring(deparse(substitute(iv3)),str_locate_all(pattern=coll('$'),deparse(substitute(iv3)))[[1]][1]+1)
      temp0 <- colnames(dv1)
      temp <- gather(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv),Ratings,Scale,one_of(temp0),factor_key=TRUE)
      temp$userAnovaIDNum0 <- factor(temp[[which(colnames(temp)==colnames(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv))[grep('^userAnovaIDNum', names(get(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1),envir = .GlobalEnv)))[1]])]])
      Anova <- eval(parse(text=paste0('ezANOVA(data=data.frame(temp),dv=Scale,wid=userAnovaIDNum0,within=.(Ratings),between=.(', sub('.*\\$', '', substitute(iv1))[3],',',sub('.*\\$', '', substitute(iv2))[3],',',sub('.*\\$', '', substitute(iv3))[3],'),detailed=T,type=type)$ANOVA')))
      options(contrasts= c(x$contrasts[1],x$contrasts[2])) # reset contrasts to whatever they were before calling this function
      data_frame$userAnovaIDNum <- NULL
      names(data_frame) <- original_column_names
      assign(substr(deparse(substitute(dv1)),1,which(strsplit(deparse(substitute(dv1)), "")[[1]]=="[")-1), data_frame, envir = .GlobalEnv)

      wrap.writeClipboard(
        paste("# ", iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
              "\n","# ",iv2name, " (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
              "\n","# ",iv3name, " (main effect): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
              "\n","# Within-Subjects (main effect): F(",Anova$DFn[5],", ",Anova$DFd[5],") = ",wrap.rd0(Anova$F[5],2),", p",if (as.numeric(Anova$p[5]) < .001) {" < .001"},if (as.numeric(Anova$p[5]) >= .001) {" = "},if (as.numeric(Anova$p[5]) >= .001) {wrap.rd(Anova$p[5],3)},", hp2 = ",wrap.rd(Anova$SSn[5]/(Anova$SSn[5]+Anova$SSd[5]),2),
              "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[6],", ",Anova$DFd[6],") = ",wrap.rd0(Anova$F[6],2),", p",if (as.numeric(Anova$p[6]) < .001) {" < .001"},if (as.numeric(Anova$p[6]) >= .001) {" = "},if (as.numeric(Anova$p[6]) >= .001) {wrap.rd(Anova$p[6],3)},", hp2 = ",wrap.rd(Anova$SSn[6]/(Anova$SSn[6]+Anova$SSd[6]),2),
              "\n","# ",iv1name," x ",iv3name," (2-way interaction): F(",Anova$DFn[7],", ",Anova$DFd[7],") = ",wrap.rd0(Anova$F[7],2),", p",if (as.numeric(Anova$p[7]) < .001) {" < .001"},if (as.numeric(Anova$p[7]) >= .001) {" = "},if (as.numeric(Anova$p[7]) >= .001) {wrap.rd(Anova$p[7],3)},", hp2 = ",wrap.rd(Anova$SSn[7]/(Anova$SSn[7]+Anova$SSd[7]),2),
              "\n","# ",iv2name," x ",iv3name," (2-way interaction): F(",Anova$DFn[8],", ",Anova$DFd[8],") = ",wrap.rd0(Anova$F[8],2),", p",if (as.numeric(Anova$p[8]) < .001) {" < .001"},if (as.numeric(Anova$p[8]) >= .001) {" = "},if (as.numeric(Anova$p[8]) >= .001) {wrap.rd(Anova$p[8],3)},", hp2 = ",wrap.rd(Anova$SSn[8]/(Anova$SSn[8]+Anova$SSd[8]),2),
              "\n","# ",iv1name," x Within-Subjects (2-way interaction): F(",Anova$DFn[9],", ",Anova$DFd[9],") = ",wrap.rd0(Anova$F[9],2),", p",if (as.numeric(Anova$p[9]) < .001) {" < .001"},if (as.numeric(Anova$p[9]) >= .001) {" = "},if (as.numeric(Anova$p[9]) >= .001) {wrap.rd(Anova$p[9],3)},", hp2 = ",wrap.rd(Anova$SSn[9]/(Anova$SSn[9]+Anova$SSd[9]),2),
              "\n","# ",iv2name," x Within-Subjects (2-way interaction): F(",Anova$DFn[10],", ",Anova$DFd[10],") = ",wrap.rd0(Anova$F[10],2),", p",if (as.numeric(Anova$p[10]) < .001) {" < .001"},if (as.numeric(Anova$p[10]) >= .001) {" = "},if (as.numeric(Anova$p[10]) >= .001) {wrap.rd(Anova$p[10],3)},", hp2 = ",wrap.rd(Anova$SSn[10]/(Anova$SSn[10]+Anova$SSd[10]),2),
              "\n","# ",iv3name," x Within-Subjects (2-way interaction): F(",Anova$DFn[11],", ",Anova$DFd[11],") = ",wrap.rd0(Anova$F[11],2),", p",if (as.numeric(Anova$p[11]) < .001) {" < .001"},if (as.numeric(Anova$p[11]) >= .001) {" = "},if (as.numeric(Anova$p[11]) >= .001) {wrap.rd(Anova$p[11],3)},", hp2 = ",wrap.rd(Anova$SSn[11]/(Anova$SSn[11]+Anova$SSd[11]),2),
              "\n","# ",iv1name," x ",iv2name," x ",iv3name," (3-way interaction): F(",Anova$DFn[12],", ",Anova$DFd[12],") = ",wrap.rd0(Anova$F[12],2),", p",if (as.numeric(Anova$p[12]) < .001) {" < .001"},if (as.numeric(Anova$p[12]) >= .001) {" = "},if (as.numeric(Anova$p[12]) >= .001) {wrap.rd(Anova$p[12],3)},", hp2 = ",wrap.rd(Anova$SSn[12]/(Anova$SSn[12]+Anova$SSd[12]),2),
              "\n","# ",iv1name," x ",iv2name," x Within-Subjects (3-way interaction): F(",Anova$DFn[13],", ",Anova$DFd[13],") = ",wrap.rd0(Anova$F[13],2),", p",if (as.numeric(Anova$p[13]) < .001) {" < .001"},if (as.numeric(Anova$p[13]) >= .001) {" = "},if (as.numeric(Anova$p[13]) >= .001) {wrap.rd(Anova$p[13],3)},", hp2 = ",wrap.rd(Anova$SSn[13]/(Anova$SSn[13]+Anova$SSd[13]),2),
              "\n","# ",iv1name," x ",iv3name," x Within-Subjects (3-way interaction): F(",Anova$DFn[14],", ",Anova$DFd[14],") = ",wrap.rd0(Anova$F[14],2),", p",if (as.numeric(Anova$p[14]) < .001) {" < .001"},if (as.numeric(Anova$p[14]) >= .001) {" = "},if (as.numeric(Anova$p[14]) >= .001) {wrap.rd(Anova$p[14],3)},", hp2 = ",wrap.rd(Anova$SSn[14]/(Anova$SSn[14]+Anova$SSd[14]),2),
              "\n","# ",iv2name," x ",iv3name," x Within-Subjects (3-way interaction): F(",Anova$DFn[15],", ",Anova$DFd[15],") = ",wrap.rd0(Anova$F[15],2),", p",if (as.numeric(Anova$p[15]) < .001) {" < .001"},if (as.numeric(Anova$p[15]) >= .001) {" = "},if (as.numeric(Anova$p[15]) >= .001) {wrap.rd(Anova$p[15],3)},", hp2 = ",wrap.rd(Anova$SSn[15]/(Anova$SSn[15]+Anova$SSd[15]),2),
              "\n","# ",iv1name," x ",iv2name," x ",iv3name," x Within-Subjects (4-way interaction): F(",Anova$DFn[16],", ",Anova$DFd[16],") = ",wrap.rd0(Anova$F[16],2),", p",if (as.numeric(Anova$p[16]) < .001) {" < .001"},if (as.numeric(Anova$p[16]) >= .001) {" = "},if (as.numeric(Anova$p[16]) >= .001) {wrap.rd(Anova$p[16],3)},", hp2 = ",wrap.rd(Anova$SSn[16]/(Anova$SSn[16]+Anova$SSd[16]),2),
              sep="")
      )
      return(
        cat("\n","# ", iv1name," (main effect): F(",Anova$DFn[2],", ",Anova$DFd[2],") = ",wrap.rd0(Anova$F[2],2),", p",if (as.numeric(Anova$p[2]) < .001) {" < .001"},if (as.numeric(Anova$p[2]) >= .001) {" = "},if (as.numeric(Anova$p[2]) >= .001) {wrap.rd(Anova$p[2],3)},", hp2 = ",wrap.rd(Anova$SSn[2]/(Anova$SSn[2]+Anova$SSd[2]),2),
            "\n","# ",iv2name, " (main effect): F(",Anova$DFn[3],", ",Anova$DFd[3],") = ",wrap.rd0(Anova$F[3],2),", p",if (as.numeric(Anova$p[3]) < .001) {" < .001"},if (as.numeric(Anova$p[3]) >= .001) {" = "},if (as.numeric(Anova$p[3]) >= .001) {wrap.rd(Anova$p[3],3)},", hp2 = ",wrap.rd(Anova$SSn[3]/(Anova$SSn[3]+Anova$SSd[3]),2),
            "\n","# ",iv3name, " (main effect): F(",Anova$DFn[4],", ",Anova$DFd[4],") = ",wrap.rd0(Anova$F[4],2),", p",if (as.numeric(Anova$p[4]) < .001) {" < .001"},if (as.numeric(Anova$p[4]) >= .001) {" = "},if (as.numeric(Anova$p[4]) >= .001) {wrap.rd(Anova$p[4],3)},", hp2 = ",wrap.rd(Anova$SSn[4]/(Anova$SSn[4]+Anova$SSd[4]),2),
            "\n","# Within-Subjects (main effect): F(",Anova$DFn[5],", ",Anova$DFd[5],") = ",wrap.rd0(Anova$F[5],2),", p",if (as.numeric(Anova$p[5]) < .001) {" < .001"},if (as.numeric(Anova$p[5]) >= .001) {" = "},if (as.numeric(Anova$p[5]) >= .001) {wrap.rd(Anova$p[5],3)},", hp2 = ",wrap.rd(Anova$SSn[5]/(Anova$SSn[5]+Anova$SSd[5]),2),
            "\n","# ",iv1name," x ",iv2name," (2-way interaction): F(",Anova$DFn[6],", ",Anova$DFd[6],") = ",wrap.rd0(Anova$F[6],2),", p",if (as.numeric(Anova$p[6]) < .001) {" < .001"},if (as.numeric(Anova$p[6]) >= .001) {" = "},if (as.numeric(Anova$p[6]) >= .001) {wrap.rd(Anova$p[6],3)},", hp2 = ",wrap.rd(Anova$SSn[6]/(Anova$SSn[6]+Anova$SSd[6]),2),
            "\n","# ",iv1name," x ",iv3name," (2-way interaction): F(",Anova$DFn[7],", ",Anova$DFd[7],") = ",wrap.rd0(Anova$F[7],2),", p",if (as.numeric(Anova$p[7]) < .001) {" < .001"},if (as.numeric(Anova$p[7]) >= .001) {" = "},if (as.numeric(Anova$p[7]) >= .001) {wrap.rd(Anova$p[7],3)},", hp2 = ",wrap.rd(Anova$SSn[7]/(Anova$SSn[7]+Anova$SSd[7]),2),
            "\n","# ",iv2name," x ",iv3name," (2-way interaction): F(",Anova$DFn[8],", ",Anova$DFd[8],") = ",wrap.rd0(Anova$F[8],2),", p",if (as.numeric(Anova$p[8]) < .001) {" < .001"},if (as.numeric(Anova$p[8]) >= .001) {" = "},if (as.numeric(Anova$p[8]) >= .001) {wrap.rd(Anova$p[8],3)},", hp2 = ",wrap.rd(Anova$SSn[8]/(Anova$SSn[8]+Anova$SSd[8]),2),
            "\n","# ",iv1name," x Within-Subjects (2-way interaction): F(",Anova$DFn[9],", ",Anova$DFd[9],") = ",wrap.rd0(Anova$F[9],2),", p",if (as.numeric(Anova$p[9]) < .001) {" < .001"},if (as.numeric(Anova$p[9]) >= .001) {" = "},if (as.numeric(Anova$p[9]) >= .001) {wrap.rd(Anova$p[9],3)},", hp2 = ",wrap.rd(Anova$SSn[9]/(Anova$SSn[9]+Anova$SSd[9]),2),
            "\n","# ",iv2name," x Within-Subjects (2-way interaction): F(",Anova$DFn[10],", ",Anova$DFd[10],") = ",wrap.rd0(Anova$F[10],2),", p",if (as.numeric(Anova$p[10]) < .001) {" < .001"},if (as.numeric(Anova$p[10]) >= .001) {" = "},if (as.numeric(Anova$p[10]) >= .001) {wrap.rd(Anova$p[10],3)},", hp2 = ",wrap.rd(Anova$SSn[10]/(Anova$SSn[10]+Anova$SSd[10]),2),
            "\n","# ",iv3name," x Within-Subjects (2-way interaction): F(",Anova$DFn[11],", ",Anova$DFd[11],") = ",wrap.rd0(Anova$F[11],2),", p",if (as.numeric(Anova$p[11]) < .001) {" < .001"},if (as.numeric(Anova$p[11]) >= .001) {" = "},if (as.numeric(Anova$p[11]) >= .001) {wrap.rd(Anova$p[11],3)},", hp2 = ",wrap.rd(Anova$SSn[11]/(Anova$SSn[11]+Anova$SSd[11]),2),
            "\n","# ",iv1name," x ",iv2name," x ",iv3name," (3-way interaction): F(",Anova$DFn[12],", ",Anova$DFd[12],") = ",wrap.rd0(Anova$F[12],2),", p",if (as.numeric(Anova$p[12]) < .001) {" < .001"},if (as.numeric(Anova$p[12]) >= .001) {" = "},if (as.numeric(Anova$p[12]) >= .001) {wrap.rd(Anova$p[12],3)},", hp2 = ",wrap.rd(Anova$SSn[12]/(Anova$SSn[12]+Anova$SSd[12]),2),
            "\n","# ",iv1name," x ",iv2name," x Within-Subjects (3-way interaction): F(",Anova$DFn[13],", ",Anova$DFd[13],") = ",wrap.rd0(Anova$F[13],2),", p",if (as.numeric(Anova$p[13]) < .001) {" < .001"},if (as.numeric(Anova$p[13]) >= .001) {" = "},if (as.numeric(Anova$p[13]) >= .001) {wrap.rd(Anova$p[13],3)},", hp2 = ",wrap.rd(Anova$SSn[13]/(Anova$SSn[13]+Anova$SSd[13]),2),
            "\n","# ",iv1name," x ",iv3name," x Within-Subjects (3-way interaction): F(",Anova$DFn[14],", ",Anova$DFd[14],") = ",wrap.rd0(Anova$F[14],2),", p",if (as.numeric(Anova$p[14]) < .001) {" < .001"},if (as.numeric(Anova$p[14]) >= .001) {" = "},if (as.numeric(Anova$p[14]) >= .001) {wrap.rd(Anova$p[14],3)},", hp2 = ",wrap.rd(Anova$SSn[14]/(Anova$SSn[14]+Anova$SSd[14]),2),
            "\n","# ",iv2name," x ",iv3name," x Within-Subjects (3-way interaction): F(",Anova$DFn[15],", ",Anova$DFd[15],") = ",wrap.rd0(Anova$F[15],2),", p",if (as.numeric(Anova$p[15]) < .001) {" < .001"},if (as.numeric(Anova$p[15]) >= .001) {" = "},if (as.numeric(Anova$p[15]) >= .001) {wrap.rd(Anova$p[15],3)},", hp2 = ",wrap.rd(Anova$SSn[15]/(Anova$SSn[15]+Anova$SSd[15]),2),
            "\n","# ",iv1name," x ",iv2name," x ",iv3name," x Within-Subjects (4-way interaction): F(",Anova$DFn[16],", ",Anova$DFd[16],") = ",wrap.rd0(Anova$F[16],2),", p",if (as.numeric(Anova$p[16]) < .001) {" < .001"},if (as.numeric(Anova$p[16]) >= .001) {" = "},if (as.numeric(Anova$p[16]) >= .001) {wrap.rd(Anova$p[16],3)},", hp2 = ",wrap.rd(Anova$SSn[16]/(Anova$SSn[16]+Anova$SSd[16]),2),
            sep="")
      )
    }
  }
}
michaelkardas/behavioralwrappers documentation built on Jan. 2, 2020, 7:46 a.m.