Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
# Cleaning the session
rm(list=ls());gc()
# Useul function to load and install al needed packages
# we are reading it from my gist on GitHub.
source("https://raw.githubusercontent.com/guidocor/R_utils/master/install.R")
install_and_detach(c("dplyr","ggplot2", "doBy"),load= T, clean = T)
theme_set(theme_bw()) # My favourite ggplot2 theme : )
parts = 30 # Our participants
trials = 30 # Our Trials
conds = 3
# Simulate some data. There are better ways, but by the way this is a easy
# 30 participants in two conditions with binary responses
response <- c( rbinom(parts*trials, 1, .3) ,
rbinom(parts*trials, 1, .65),
rbinom(parts*trials, 1, .59) )
condition <- c(rep(1, parts*trials), rep(2, parts*trials),rep(3, parts*trials))
participant <- sort(rep(1:(conds*parts), trials) )
# our data frame, ready
df <- data.frame(participant, condition, response)
# This is a trick to convert to factor (or numeric, etc) the data
df <- df[,c("participant", "condition", "response")]
to_factor <- c("participant", "condition")
df[,to_factor] <- lapply(df[,to_factor], factor)
# Factors are coded as 1, 2 and 3. We want they to be meaningful, so we must
# change them as follow:
levels(df$condition) <- c("Condition 1", "Condition 2", "Condition 3")
# Two ways of do the same one easier with summaryBy and other with dplyr
# Both are useful and apropiatte. In this particular
# case i think doBy function summaryBy is better
means.v <- summaryBy(response ~ participant + condition, data = df)
# First we have to group the data and then make a summary
# (Don't be afraid of using the pipe ( %>%), if you are in Rstudio pres ctrl+shift+M)
means <- df %>% group_by(., condition, participant) %>% summarise(., m = mean(response))
# We need to store the means of each condition for the plot
m.data <- means %>% summarise(., global.mean = mean(m))
# And finally the plot!
means.plot<-ggplot(means, aes(m)) + # set the ggplot boject
geom_density(alpha=.5, fill="#FF6666" ) + # you can pay with the alpha and the fill
# add a histogram, adapt the binwidth to your data!
geom_histogram(colour="black", fill="white", alpha = 0.4, binwidth = 0.05) +
# we want separate graphs for each condition, you can
# play with the number of columns with ncol!
facet_wrap(~condition, ncol = 1) +
ggtitle("Mean by each group") + # title
labs(x = "Mean of each participant",
y = "") + # labels in x
# Remember that we made a data frame wirh the mean of each condition?
# que are using it for plotting the mean in each density plot
geom_vline(data=m.data, aes(xintercept=global.mean),
linetype="dashed", size=1)
means.plot
# finally we can save the plot
ggsave(file = "./distributions.png", means.plot, height = 8, width = 4, dpi = 300)
# adjust the width, the height and the density per inch
# A version of the same data can be displayed as points on a boxplot.
# Suitable when you have few participants.
points <- ggplot(means, aes(m)) +
geom_point(data = means, aes(y = m, x = condition),
size = 3, alpha = 0.5, colour="#FF6666",
position = position_jitter(width = 0.6, height = 0.1)) +
geom_boxplot(data = means, aes(y=m, x=condition), alpha= 0.2 , fill = "#545454") # colour and alphas
# You can flip axis to get a more confortable display of results
points <- points + ggtitle("Mean by each group") +
labs(x = "", y = "Mean of each participant") + coord_flip()
points
# finally we can save the plot
ggsave(file = "./points.png", points, height = 4, width = 5, dpi = 300)
# adjust the width, the height and the density per inch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.