# assign random data in a data frame for illustration
# (note that the 'subject' is only for illustration; since each row contains the
# data of a single subject, no additional subject id is needed)
dat_1 = data.frame(
subject = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14),
grouping1 = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2),
grouping2 = c(1, 2, 1, 2, 2, 1,2, 1,2,1, 1, 1, 2, 1),
value_1_a = c(36.2, 45.2, 41, 24.6, 30.5, 28.2, 40.9, 45.1,
31, 16.9, 40.1, 42.1, 41, 12.9),
value_2_a = c(-14.1, 58.5,-25.5, 42.2,-13, 4.4, 55.5,-28.5,
25.6,-37.1, 55.1,-38.5, 28.6,-34.1),
value_1_b = c(83, 71, 111, 70, 92, 75, 110, 111, 110, 85,
132, 121, 151, 95),
value_2_b = c(8.024,-14.162, 3.1,-2.1,-1.5, 0.91, 11.53,
18.37, 0.3,-0.59, 12.53, 13.37, 2.3,-3),
value_1_c = c(27.4, -17.6, -32.7, 0.4, 37.2, 1.7, 18.2, 8.9,
1.9, 0.4, 2.7, 14.2, 3.9, 4.9),
value_2_c = c(7.7,-0.8, 2.2, 14.1, 22.1,-47.7,-4.8, 8.6,
6.2, 18.2,-6.8, 5.6, 7.2, 13.2)
)
head(dat_1) # see what we have
# plot for factors 'grouping1', 'grouping2'
plot_neat(
data_per_subject = dat_1,
values = 'value_1_a',
between_vars = c('grouping1', 'grouping2')
)
# same as above, but with bars and renamed factors
plot_neat(
data_per_subject = dat_1,
values = 'value_1_a',
between_vars = c('grouping1', 'grouping2'),
type = 'bar',
factor_names = c(grouping1 = 'experimental condition', grouping2 = 'gender')
)
# \donttest{
# same, but with different (lighter) gray scale bars
plot_neat(
dat_1,
values = 'value_1_a',
between_vars = c('grouping1', 'grouping2'),
type = 'bar',
factor_names = c(grouping1 = 'experimental condition', grouping2 = 'gender'),
bar_colors = c('#555555', '#BBBBBB')
)
# same, but with red and blue bars
plot_neat(
dat_1,
values = 'value_1_a',
between_vars = c('grouping1', 'grouping2'),
type = 'bar',
factor_names = c(grouping1 = 'experimental condition', grouping2 = 'gender'),
bar_colors = c('red', 'blue') # equals c('#FF0000', '#0000FF')
)
# within-subject factor for 'value_1_a' vs. 'value_1_b' vs. 'value_1_c'
# (automatically named 'within_factor'), between-subject factor 'grouping1'
plot_neat(
dat_1,
values = c('value_1_a', 'value_1_b', 'value_1_c'),
between_vars = c('grouping1', 'grouping2')
)
# }
# same, but panelled by 'within_factor'
plot_neat(
dat_1,
values = c('value_1_a', 'value_1_b', 'value_1_c'),
between_vars = c('grouping1', 'grouping2'),
panels = 'within_factor'
)
# \donttest{
# same, but SE for error bars instead of (default) SD
plot_neat(
dat_1,
values = c('value_1_a', 'value_1_b', 'value_1_c'),
between_vars = c('grouping1', 'grouping2'),
panels = 'within_factor',
eb_method = se
)
# same, but 95% CI for error bars instead of SE
# (arguably more meaningful than SEs)
plot_neat(
dat_1,
values = c('value_1_a', 'value_1_b', 'value_1_c'),
between_vars = c('grouping1', 'grouping2'),
panels = 'within_factor',
eb_method = mean_ci
)
# same, but using medians and Median Absolute Deviations
plot_neat(
dat_1,
values = c('value_1_a', 'value_1_b', 'value_1_c'),
between_vars = c('grouping1', 'grouping2'),
panels = 'within_factor',
method = stats::median,
eb_method = stats::mad
)
# }
# within-subject factor 'number' for variables with number '1' vs. number '2'
# ('value_1_a' and 'value_1_b' vs. 'value_2_a' and 'value_2_b'), factor 'letter'
# for variables with final letter 'a' vs. final letter 'b' ('value_1_a' and
# 'value_2_a' vs. 'value_1_b' and 'value_2_b')
plot_neat(
dat_1,
values = c('value_1_a', 'value_2_a', 'value_1_b', 'value_2_b'),
within_ids = list(
letters = c('_a', '_b'),
numbers = c('_1', '_2')
)
)
# \donttest{
# same as above, but now including between-subject factor 'grouping2'
plot_neat(
dat_1,
values = c('value_1_a', 'value_2_a', 'value_1_b', 'value_2_b'),
within_ids = list(
letters = c('_a', '_b'),
numbers = c('_1', '_2')
),
between_vars = 'grouping2'
)
# }
# same as above, but renaming factors and values for display
plot_neat(
dat_1,
values = c('value_1_a', 'value_2_a', 'value_1_b', 'value_2_b'),
within_ids = list(
letters = c('_a', '_b'),
numbers = c('_1', '_2')
),
between_vars = 'grouping2',
factor_names = c(numbers = 'session (first vs. second)'),
value_names = c(
'_1' = 'first',
'_2' = 'second',
'1' = 'group 1',
'2' = 'group 2'
)
)
# \donttest{
# In real datasets, these could of course be more meaningful. For example, let's
# say participants rated the attractiveness of pictures with low or high levels
# of frightening and low or high levels of disgusting qualities. So there are
# four types of ratings:
# 'low disgusting, low frightening' pictures
# 'low disgusting, high frightening' pictures
# 'high disgusting, low frightening' pictures
# 'high disgusting, high frightening' pictures
# this could be meaningfully assigned e.g. as below
pic_ratings = data.frame(
subject = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
rating_fright_low_disgust_low = c(36.2, 45.2, 41, 24.6, 30.5, 28.2, 40.9, 45.1, 31, 16.9),
rating_fright_high_disgust_low = c(-14.1, 58.5,-25.5, 42.2,-13, 4.4, 55.5,-28.5, 25.6,-37.1),
rating_fright_low_disgust_high = c(83, 71, 111, 70, 92, 75, 110, 111, 110, 85),
rating_fright_high_disgust_high = c(8.024,-14.162, 3.1,-2.1,-1.5, 0.91, 11.53, 18.37, 0.3,-0.59)
)
head(pic_ratings) # see what we have
# the same logic applies as for the examples above, but now the
# within-subject differences can be more meaningfully specified, e.g.
# 'disgust_low' vs. 'disgust_high' for levels of disgustingness, while
# 'fright_low' vs. 'fright_high' for levels of frighteningness
plot_neat(
pic_ratings,
values = c(
'rating_fright_low_disgust_low',
'rating_fright_high_disgust_low',
'rating_fright_low_disgust_high',
'rating_fright_high_disgust_high'
),
within_ids = list(
disgustingness = c('disgust_low', 'disgust_high'),
frighteningness = c('fright_low', 'fright_high')
)
)
# now let's say the ratings were done in two separate groups
pic_ratings = data.frame(
subject = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
group_id = c(1, 2, 1, 2, 2, 1, 1, 1, 2, 1),
rating_fright_low_disgust_low = c(36.2, 45.2, 41, 24.6, 30.5, 28.2, 40.9, 45.1, 31, 16.9),
rating_fright_high_disgust_low = c(-14.1, 58.5,-25.5, 42.2,-13, 4.4, 55.5,-28.5, 25.6,-37.1),
rating_fright_low_disgust_high = c(83, 71, 111, 70, 92, 75, 110, 111, 110, 85),
rating_fright_high_disgust_high = c(8.024,-14.162, 3.1,-2.1,-1.5, 0.91, 11.53, 18.37, 0.3,-0.59)
)
# now include the 'group_id' factor in the plot
plot_neat(
pic_ratings,
values = c(
'rating_fright_low_disgust_low',
'rating_fright_high_disgust_low',
'rating_fright_low_disgust_high',
'rating_fright_high_disgust_high'
),
within_ids = list(
disgustingness = c('disgust_low', 'disgust_high'),
frighteningness = c('fright_low', 'fright_high')
),
between_vars = 'group_id'
)
# }
## DISPERSION PLOTS
plot_neat(values = rnorm(100))
# with smaller binwidth (hence more bins)
plot_neat(values = rnorm(100), binwidth = 0.2)
# without normal distribution line
plot_neat(values = rnorm(100), parts = c('h', 'd', 'b'))
# without histrogram
plot_neat(values = rnorm(100), parts = c('d', 'n', 'b'))
# blue density, fully opaque histogram
plot_neat(values = rnorm(100),
part_colors = c(dc = 'blue', ha = 1))
Run the code above in your browser using DataLab