R/save.interactionPlots.R

Defines functions interactionPlotTests save.interactionPlots

Documented in interactionPlotTests save.interactionPlots

interactionPlotTests <- function(dataset, DV, factor1, factor2) {
  require(ggplot2); require(Rmisc); require(ggpubr); require(ggrepel)

  #------------------------------------------------------------------------------------------------------------
  #------------------------------------------------------------------------------------------------------------
  ################################################## Plot1
  #------------------------------------------------------------------------------------------------------------
  #------------------------------------------------------------------------------------------------------------
  df <- data.frame(response  = dataset[,DV],
                   factor1   = as.factor(dataset[, factor1]),
                   factor2   = as.factor(dataset[, factor2]))

  descr <- paste(DV, '~', factor1)
  x <- aov(response ~ factor1, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.1 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  descr <- paste(DV, '~', factor1, '+', factor2)
  x <- aov(response ~ factor1 + factor2, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.2 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  descr <- paste(DV, '~', factor1, '*', factor2)
  x <- aov(response ~ factor1 * factor2, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.3 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  descr <- paste(DV, '~', factor1, ':', factor2)
  x <- aov(response ~ factor1 : factor2, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.4 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  res.all.1 <- paste(res.1, res.2, res.3, res.4, sep = '\n')

  ################################################## create GGPLOT
  SE <- summarySE(df, measurevar = 'response', groupvars = c('factor1', 'factor2'), na.rm = T)
  SE <- na.omit(SE)
  #------------------| Positions and labels
  pd <- position_dodge(0.2) # move error bars .05 to the left and right
  TheTitle <- paste(DV, '~', factor1)
  leg.title <- factor2
  X.axis <- factor1
  Y.axis <- DV

  #------------------| The Plot
  ThePlot1 <- ggplot(SE, aes(x=factor1, y=response, colour=factor2, group=factor2), show.legend=F) +
    theme_bw() +
    geom_line(aes(linetype=factor2),size=1.4, position=pd, show.legend=F) +
    {if(nlevels(as.factor(df$factor2))==2)scale_color_manual(values=c("black", "grey40"))} +
    geom_point(aes(shape=factor2), position=pd, show.legend=F) +
    geom_point(aes(size= N), position=pd)+
    geom_errorbar(aes(ymax=response+se, ymin=response-se), width=0.2,size=0.5, position=pd, show.legend=F) +
    guides(color=guide_legend(title=leg.title)) +
    guides(fill=F) +
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
    theme(plot.title = element_text(size = rel(2)))  +
    geom_label(hjust = 0, vjust = 1,aes(x = -Inf, y = Inf,
                                        label = res.all.1), colour = 'black', fill = "white", family = "Courier") +
    ggtitle(TheTitle) +
    xlab(X.axis) +
    ylab(Y.axis) +
    theme(panel.background = element_rect(fill = "white"))



  #------------------------------------------------------------------------------------------------------------
  #------------------------------------------------------------------------------------------------------------
  ################################################## Plot2
  #------------------------------------------------------------------------------------------------------------
  #------------------------------------------------------------------------------------------------------------
  df <- data.frame(response  = dataset[,DV],
                   factor1   = as.factor(dataset[, factor2]),
                   factor2   = as.factor(dataset[, factor1]))

  descr <- paste(DV, '~', factor2)
  x <- aov(response ~ factor1, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.1 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  descr <- paste(DV, '~', factor2, '+', factor1)
  x <- aov(response ~ factor1 + factor2, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.2 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  descr <- paste(DV, '~', factor2, '*', factor1)
  x <- aov(response ~ factor1 * factor2, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.3 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  descr <- paste(DV, '~', factor2, ':', factor1)
  x <- aov(response ~ factor1 : factor2, data = df); summm <- summary(x)
  p <- summm[[1]][["Pr(>F)"]][[1]]; f <- summm[[1]][["F value"]][[1]]
  degreeF <- paste('(', summm[[1]][["Df"]][[1]], ',', summm[[1]][["Df"]][[2]], ')', sep = '')
  res.4 <- paste(descr, ': ','F', degreeF, '=', round(f,2), ', ', 'p=', round(p, 4), sep = '')

  res.all.2 <- paste(res.1, res.2, res.3, res.4, sep = '\n')

  ################################################## create GGPLOT
  SE <- summarySE(df, measurevar = 'response', groupvars = c('factor1', 'factor2'), na.rm = T)
  SE <- na.omit(SE)
  #------------------| Positions and labels
  pd <- position_dodge(0.2) # move error bars .05 to the left and right
  TheTitle <- paste(DV, '~', factor2)
  leg.title <- factor1
  X.axis <- factor2
  Y.axis <- DV

  #------------------| The Plot
  ThePlot2 <- ggplot(SE, aes(x=factor1, y=response, colour=factor2, group=factor2), show.legend=F) +
    theme_bw() +
    geom_line(aes(linetype=factor2),size=1.4, position=pd, show.legend=F) +
    {if(nlevels(as.factor(df$factor2))==2)scale_color_manual(values=c("black", "grey40"))} +
    geom_point(aes(shape=factor2), position=pd, show.legend=F) +
    geom_point(aes(size= N), position=pd)+
    geom_errorbar(aes(ymax=response+se, ymin=response-se), width=0.2,size=0.5, position=pd, show.legend=F) +
    guides(color=guide_legend(title=leg.title)) +
    guides(fill=F) +
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
    theme(plot.title = element_text(size = rel(2)))  +
    geom_label(hjust = 0, vjust = 1,aes(x = -Inf, y = Inf,
                                        label = res.all.2), colour = 'black', fill = "white", family = "Courier") +
    ggtitle(TheTitle) +
    xlab(X.axis) +
    ylab(Y.axis) +
    theme(panel.background = element_rect(fill = "white"))

  #------------------------------------------------------------------------------------------------------------
  #------------------------------------------------------------------------------------------------------------
  ################################################## Mix together
  #------------------------------------------------------------------------------------------------------------
  #------------------------------------------------------------------------------------------------------------

  multiplot(ThePlot1, ThePlot2, cols = 2)

}
# interactionPlotTests(dataset = ToothGrowth, DV =  'len',factor1 = 'supp', factor2 = 'dose')



# setwd("/Users/alessandromiani/Documents/Scritti/Writing/Projects/2017 - R Package explora/functions/explora")

save.interactionPlots <- function(dataset, DV, factor1, factor2, pic_ParentFolder) {
  originalWD <- getwd()
  for(j in 1:length(factor1)) {
    for(i in 1:length(DV)) {
      ################################################## Start the j LOOP
      IVname <- factor1[j]
      parent_folder <- paste(originalWD, pic_ParentFolder, sep = '/')
      dir.create(file.path(parent_folder), showWarnings = T,recursive = T)
      setwd(file.path(parent_folder))
      ################################################## Start the i LOOP
      DVname <- DV[i]
      F1_name <- factor1[j]
      F2_name <- factor2
      filename_int <- paste(DVname,'~',F1_name,"+",F2_name, '.tiff', sep = '')
      ################################################## create GGPLOT
      png(filename = filename_int, width = 17, height = 7, units = 'in', res = 72)
      interactionPlotTests(dataset = dataset,
                           DV =  DVname,
                           factor1 = F1_name,
                           factor2 = F2_name)
      ################################################## Prepare for new one
      dev.off()
      setwd(originalWD)
    }
  }
}
# save.interactionPlots(dataset = ToothGrowth, DV =  'len', factor1 = 'supp', factor2 = 'dose', pic_ParentFolder = '__new')
alemiani/explora documentation built on May 28, 2019, 4:54 p.m.