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')
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.