In this assignment we’ll learn about dplyr and tidyr, two packages from the tidyverse that allow elegant and easily understandable data tidying and manipulation. We’ll do this by working through the steps of loading an actual dataset, tidying it up, and carrying out some basic analyses.
The dataset we’re using comes from the OSF Reproduciblity project replication of a study by Maya Tamir, Christopher Mitchell, and our very own James Gross (“Hedonic and Instrumental Motives in Anger Regulation,” Tamir, Mitchell, and Gross, Psychological Science, 2008). You can find the replication report here, and the original paper here. The replication tests two hypotheses from the original paper:
Rating hypothesis: Participants will prefer listening to angry music (or recalling an anger-inducing experience) before playing a confrontational (violent) game, but will prefer listening to exciting or neutral music (or recalling a calm experience) before a neutral game. This is assessed through preference ratings where the participants read a description of a game, and then are asked to rate on a likert scale.
Performance hypothesis: Subjects would perform better after listening to angry music on a confrontational game (not one of the ones described in the materials for the previous hypothesis, to avoid contamination), but would perform better on a non-confrontational game (again, not described in the materials for hypothesis 1) after listening to non-angry music. This is computed by having the subjects play without music for 5 minutes, and then after/with music for 5 minutes, and comparing change scores depending on the music type.
First, let’s load the libraries we’re going to use.
library(foreign) # for reading spss formatted data
library(tidyr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(stringr) # useful for some string manipulation
library(ggplot2)
d = read.spss("data/Tamiretal2008ReplicationData.sav", to.data.frame=T)
## Warning in read.spss("data/Tamiretal2008ReplicationData.sav", to.data.frame
## = T): data/Tamiretal2008ReplicationData.sav: Unrecognized record type 7,
## subtype 18 encountered in system file
Take a look at the data structure:
head(d)
## Subject Cond Exper
## 1 1 2 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 2 2 3 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 3 3 1 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 4 4 4 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 5 5 5 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 6 6 6 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## Inifile Date Time Game1Angry1 Game1Angry2 Game1Angry3
## 1 default.mlp 13642819200 40781 6 6 5
## 2 default.mlp 13642819200 50753 7 7 7
## 3 default.mlp 13642819200 54540 6 5 7
## 4 default.mlp 13642905600 34952 4 1 1
## 5 default.mlp 13642905600 49095 6 6 7
## 6 default.mlp 13642905600 59714 5 5 6
## Game1AngryFriends Game1AngryStrangers Game1CalmFriends
## 1 2 5 2
## 2 7 7 6
## 3 2 2 2
## 4 6 6 2
## 5 6 6 2
## 6 3 4 5
## Game1CalmStrangers Game1ExcitedFriends Game1ExcitedStrangers
## 1 2 1 2
## 2 6 6 6
## 3 2 2 2
## 4 1 3 4
## 5 2 5 5
## 6 4 6 4
## Game1Exciting1 Game1Exciting2 Game1Exciting3 Game1Intro Game1Neutral1
## 1 3 2 6 ok 2
## 2 5 3 2 ok 1
## 3 2 3 4 ok 1
## 4 5 4 5 ok 1
## 5 1 3 2 ok 3
## 6 3 2 4 ok 2
## Game1Neutral2 Game1Neutral3 Game2Angry1 Game2Angry2 Game2Angry3
## 1 4 4 6 4 6
## 2 1 1 7 6 7
## 3 2 3 5 3 6
## 4 2 2 6 2 6
## 5 2 4 5 6 6
## 6 2 4 6 5 6
## Game2AngryFriends Game2AngryStrangers Game2CalmFriends
## 1 3 6 1
## 2 6 7 2
## 3 3 3 3
## 4 3 6 1
## 5 5 6 1
## 6 3 5 3
## Game2CalmStrangers Game2ExcitedFriends Game2ExcitedStrangers
## 1 2 1 1
## 2 3 5 5
## 3 3 3 3
## 4 1 2 4
## 5 1 4 4
## 6 2 5 4
## Game2Exciting1 Game2Exciting2 Game2Exciting3 Game2Intro Game2Neutral1
## 1 3 2 4 ok 1
## 2 5 2 1 ok 1
## 3 2 5 2 ok 4
## 4 3 2 2 ok 1
## 5 1 2 2 ok 4
## 6 2 2 3 ok 2
## Game2Neutral2 Game2Neutral3 Game3Angry1 Game3Angry2 Game3Angry3
## 1 3 1 2 2 3
## 2 1 2 6 3 5
## 3 3 1 2 2 3
## 4 1 3 2 1 6
## 5 4 5 3 5 6
## 6 3 4 2 2 5
## Game3AngryFriends Game3AngryStrangers Game3CalmFriends
## 1 3 2 7
## 2 3 2 6
## 3 4 4 3
## 4 5 4 2
## 5 1 3 5
## 6 1 1 4
## Game3CalmStrangers Game3ExcitedFriends Game3ExcitedStrangers
## 1 6 6 5
## 2 5 6 5
## 3 3 4 4
## 4 2 5 6
## 5 5 6 5
## 6 3 4 2
## Game3Exciting1 Game3Exciting2 Game3Exciting3 Game3Intro Game3Neutral1
## 1 2 2 3 ok 5
## 2 4 3 3 ok 2
## 3 3 6 2 ok 2
## 4 3 1 3 ok 2
## 5 3 1 3 ok 2
## 6 1 2 2 ok 5
## Game3Neutral2 Game3Neutral3 Game4Angry1 Game4Angry2 Game4Angry3
## 1 6 5 2 2 2
## 2 1 5 2 5 2
## 3 3 3 5 2 2
## 4 2 6 1 1 2
## 5 4 5 3 4 3
## 6 4 4 2 3 3
## Game4AngryFriends Game4AngryStrangers Game4CalmFriends
## 1 2 2 5
## 2 4 4 2
## 3 4 5 2
## 4 1 1 2
## 5 2 3 5
## 6 1 2 4
## Game4CalmStrangers Game4ExcitedFriends Game4ExcitedStrangers
## 1 5 7 4
## 2 4 3 4
## 3 4 4 5
## 4 2 4 4
## 5 5 5 6
## 6 4 5 4
## Game4Exciting1 Game4Exciting2 Game4Exciting3 Game4Intro Game4Neutral1
## 1 5 5 2 ok 1
## 2 1 2 6 ok 5
## 3 7 4 5 ok 3
## 4 6 6 6 ok 4
## 5 1 5 5 ok 4
## 6 2 4 3 ok 3
## Game4Neutral2 Game4Neutral3 MusicSelectionEnd MusicSelectionInstrx
## 1 5 2 ok ok
## 2 5 2 ok ok
## 3 2 4 ok ok
## 4 5 2 ok ok
## 5 2 5 ok ok
## 6 5 5 ok ok
## RecallSelectionEnd RecallSelectionInstrx Subject2 Cond2
## 1 ok ok 1 2
## 2 ok ok 2 3
## 3 ok ok 3 1
## 4 ok ok 4 4
## 5 ok ok 5 5
## 6 ok ok 6 6
## Exper_A Inifile_A
## 1 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 2 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 3 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 4 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 5 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 6 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## Date_A Time_A DescribeMusic HowActiveAngry1 HowActiveAngry2
## 1 13642819200 43151 2 4 4
## 2 13642819200 53012 3 5 5
## 3 13642819200 57041 2 4 4
## 4 13642905600 37630 3 5 3
## 5 13642905600 51434 2 5 4
## 6 13642905600 62320 3 3 3
## HowActiveAngry3 HowActiveExciting1 HowActiveExciting2 HowActiveExciting3
## 1 4 5 4 5
## 2 5 5 2 4
## 3 4 2 1 3
## 4 3 5 5 5
## 5 5 3 3 3
## 6 2 3 3 4
## HowActiveNeutral1 HowActiveNeutral2 HowActiveNeutral3 HowAngryAngry1
## 1 2 2 2 5
## 2 2 2 1 5
## 3 1 2 1 4
## 4 2 2 1 3
## 5 2 1 1 2
## 6 1 2 1 2
## HowAngryAngry2 HowAngryAngry3 HowAngryExciting1 HowAngryExciting2
## 1 4 4 3 4
## 2 5 5 4 3
## 3 4 4 3 1
## 4 2 3 1 1
## 5 2 3 2 2
## 6 2 2 2 1
## HowAngryExciting3 HowAngryNeutral1 HowAngryNeutral2 HowAngryNeutral3
## 1 3 2 2 1
## 2 3 2 1 1
## 3 3 1 1 2
## 4 1 2 1 1
## 5 1 1 1 1
## 6 1 1 1 1
## HowExcitedAngry1 HowExcitedAngry2 HowExcitedAngry3 HowExcitedExciting1
## 1 4 3 3 4
## 2 5 5 5 4
## 3 3 3 2 2
## 4 4 1 3 4
## 5 4 4 5 3
## 6 5 2 3 3
## HowExcitedExciting2 HowExcitedExciting3 HowExcitedNeutral1
## 1 4 4 2
## 2 2 4 3
## 3 2 3 2
## 4 3 5 2
## 5 3 3 2
## 6 2 4 1
## HowExcitedNeutral2 HowExcitedNeutral3 HowPleasantAngry1
## 1 2 2 1
## 2 2 1 1
## 3 1 2 2
## 4 2 1 1
## 5 1 3 4
## 6 1 2 2
## HowPleasantAngry2 HowPleasantAngry3 HowPleasantExciting1
## 1 2 1 2
## 2 2 1 1
## 3 2 4 2
## 4 1 3 4
## 5 3 2 1
## 6 2 3 3
## HowPleasantExciting2 HowPleasantExciting3 HowPleasantNeutral1
## 1 2 1 5
## 2 4 3 4
## 3 2 2 2
## 4 4 3 2
## 5 1 2 1
## 6 3 4 3
## HowPleasantNeutral2 HowPleasantNeutral3 MusicRatingEnd MusicRatingInstrx
## 1 4 5 ok ok
## 2 4 4 ok ok
## 3 2 1 ok ok
## 4 4 5 ok ok
## 5 1 5 ok ok
## 6 3 4 ok ok
## WhichGames aboutyou age distractions endinstructions ethnicity
## 1 ok ok 18 ok ok 2
## 2 ok ok 20 ok ok 2
## 3 ok ok 18 ok ok 2
## 4 ok ok 18 ok ok 2
## 5 ok ok 18 ok ok 2
## 6 ok ok 19 ok ok 2
## overlooking race sex whatabout year Subject3 DDNoMusicLevel
## 1 ok 2 1 ok 1 1 3
## 2 ok 2 2 ok 2 2 3
## 3 ok 2 1 ok 1 3 2
## 4 ok 2 1 ok 1 4 3
## 5 ok 2 1 ok 1 5 3
## 6 ok 2 1 ok 1 6 3
## DDNoMusicScore DDMusicLevel DDMusicScore SOFNoMusicEnemies
## 1 0 3 830 22
## 2 20 3 2930 18
## 3 1250 3 370 15
## 4 1742 3 1921 3
## 5 60 3 1750 18
## 6 840 3 1380 23
## SOFNoMusicFriendlies SOFNoMusicTime SOFMusicEnemies SOFMusicFriendlies
## 1 2 24360 19 0
## 2 1 23580 18 2
## 3 0 15300 23 1
## 4 0 5280 19 0
## 5 2 19140 23 3
## 6 1 23220 24 0
## SOFMusicTime GameComments
## 1 23340
## 2 22500
## 3 24300
## 4 16860 Participant died, restart
## 5 20820 Error in game towards the end of time
## 6 23400
## DoNotUseVideoGamePerformanceData ConfrontationalAngryMusicScore
## 1 NA 5.500000
## 2 NA 6.833333
## 3 NA 5.333333
## 4 1 3.333333
## 5 1 6.000000
## 6 NA 5.500000
## ConfrontationalExcitingMusicScore ConfrontationalNeutralMusicScore
## 1 3.333333 2.500000
## 2 3.000000 1.166667
## 3 3.000000 2.333333
## 4 3.500000 1.666667
## 5 1.833333 3.666667
## 6 2.666667 2.833333
## ConfrontationalAngryRecallScore ConfrontationalExcitingRecallScore
## 1 3.75 1.25
## 2 7.00 5.75
## 3 2.25 2.25
## 4 6.00 3.50
## 5 6.00 4.75
## 6 3.75 5.00
## ConfrontationalNeutralRecallScore NonconfrontationalAngryMusicScore
## 1 2.00 2.166667
## 2 5.25 3.833333
## 3 2.25 2.666667
## 4 1.50 2.166667
## 5 1.75 4.000000
## 6 4.00 2.833333
## NonconfrontationalExcitingMusicScore NonconfrontationalNeutralMusicScore
## 1 3.166667 4.000000
## 2 3.166667 3.333333
## 3 4.500000 2.833333
## 4 4.166667 3.500000
## 5 3.000000 3.666667
## 6 2.333333 4.333333
## NonconfrontationalAngryRecallScore NonconfrontationalExcitingRecallScore
## 1 2.50 5.25
## 2 3.00 5.25
## 3 4.25 4.25
## 4 3.75 5.00
## 5 2.00 5.75
## 6 1.25 3.50
## NonconfrontationalNeutralRecallScore ConfrontationalAngerScore
## 1 6.25 4.8
## 2 5.25 6.9
## 3 3.25 4.1
## 4 2.00 4.4
## 5 5.00 6.0
## 6 3.75 4.8
## ConfrontationalExcitingScore ConfrontationalNeutralScore
## 1 2.5 2.3
## 2 4.1 2.8
## 3 2.7 2.3
## 4 3.5 1.6
## 5 3.0 2.9
## 6 3.6 3.3
## NonconfrontationalAngerScore NonconfrontationalExcitingScore
## 1 2.3 4.0
## 2 3.5 4.0
## 3 3.3 4.4
## 4 2.8 4.5
## 5 3.2 4.1
## 6 2.2 2.8
## NonconfrontationalNeutralScore Usable DoNotUse
## 1 4.9 1 NA
## 2 4.1 0 1
## 3 3.0 1 NA
## 4 2.9 1 NA
## 5 4.2 1 NA
## 6 4.1 1 NA
## ProblemDetails
## 1
## 2 Female participant (this is a males only study)
## 3
## 4
## 5
## 6
## DinerDashWithMusicScore DinerDashWithoutMusicScore MusicCondition
## 1 5830 5000 Exciting
## 2 7930 5020 Neutral
## 3 5370 1250 Anger
## 4 6921 6742 Anger
## 5 6750 5060 Exciting
## 6 6380 5840 Neutral
## ZDinerDashWithMusicScore ZDinerDashWithoutMusicScore ZSOFNoMusicEnemies
## 1 -0.07333283 0.2692740 0.7501199
## 2 NA NA NA
## 3 -0.73344247 -2.8616517 -0.1401958
## 4 1.49227504 1.7236934 -1.6664514
## 5 1.24688645 0.3193688 0.2413681
## 6 0.71592870 0.9706014 0.8773079
## ZSOFMusicEnemies DinerDashDifferenceScore SOFDifferenceScore
## 1 -0.2020329 -0.3426068 -0.95215278
## 2 NA NA NA
## 3 0.3183548 2.1282092 0.45855062
## 4 -0.2020329 -0.2314183 1.46441854
## 5 0.3183548 0.9275176 0.07698673
## 6 0.4484517 -0.2546727 -0.42885618
## PleasantScoreForAngryMusic PleasantScoreForExcitingMusic
## 1 1.333333 1.666667
## 2 1.333333 2.666667
## 3 2.666667 2.000000
## 4 1.666667 3.666667
## 5 3.000000 1.333333
## 6 2.333333 3.333333
## PleasantScoreForNeutralMusic AngryScoreForAngryMusic
## 1 4.666667 4.333333
## 2 4.000000 5.000000
## 3 1.666667 4.000000
## 4 3.666667 2.666667
## 5 2.333333 2.333333
## 6 3.333333 2.000000
## AngryScoreForExcitingMusic AngryScoreForNeutralMusic
## 1 3.333333 1.666667
## 2 3.333333 1.333333
## 3 2.333333 1.333333
## 4 1.000000 1.333333
## 5 1.666667 1.000000
## 6 1.333333 1.000000
## ExcitedScoreForExcitingMusic ExcitedScoreForNeutralMusic
## 1 4.000000 2.000000
## 2 3.333333 2.000000
## 3 2.333333 1.666667
## 4 4.000000 1.666667
## 5 3.000000 2.000000
## 6 3.000000 1.333333
## ActiveScoreForExcitingMusic ActiveScoreForNeutralMusic
## 1 4.666667 2.000000
## 2 3.666667 1.666667
## 3 2.000000 1.333333
## 4 5.000000 1.666667
## 5 3.000000 1.333333
## 6 3.333333 1.333333
## ExcitedScoreForAngryMusic ActiveScoreForAngryMusic
## 1 3.333333 4.000000
## 2 5.000000 5.000000
## 3 2.666667 4.000000
## 4 2.666667 3.666667
## 5 4.333333 4.666667
## 6 3.333333 2.666667
This data is what we call wide form – each subject is a single row, and the columns represent different observations. This is a somewhat inconvenient way of representing the data, for example if we wanted to do the same operation to each likert rating (for example normalize it to be in the range 0-1), we’d have to do it on each of the 40 or so rating columns. To avoid this, our eventual goal will be to convert the data into long form, where each row is a single observation.
For now, take a look at the column names to get a better idea of what all is in the dataset.
colnames(d)
## [1] "Subject"
## [2] "Cond"
## [3] "Exper"
## [4] "Inifile"
## [5] "Date"
## [6] "Time"
## [7] "Game1Angry1"
## [8] "Game1Angry2"
## [9] "Game1Angry3"
## [10] "Game1AngryFriends"
## [11] "Game1AngryStrangers"
## [12] "Game1CalmFriends"
## [13] "Game1CalmStrangers"
## [14] "Game1ExcitedFriends"
## [15] "Game1ExcitedStrangers"
## [16] "Game1Exciting1"
## [17] "Game1Exciting2"
## [18] "Game1Exciting3"
## [19] "Game1Intro"
## [20] "Game1Neutral1"
## [21] "Game1Neutral2"
## [22] "Game1Neutral3"
## [23] "Game2Angry1"
## [24] "Game2Angry2"
## [25] "Game2Angry3"
## [26] "Game2AngryFriends"
## [27] "Game2AngryStrangers"
## [28] "Game2CalmFriends"
## [29] "Game2CalmStrangers"
## [30] "Game2ExcitedFriends"
## [31] "Game2ExcitedStrangers"
## [32] "Game2Exciting1"
## [33] "Game2Exciting2"
## [34] "Game2Exciting3"
## [35] "Game2Intro"
## [36] "Game2Neutral1"
## [37] "Game2Neutral2"
## [38] "Game2Neutral3"
## [39] "Game3Angry1"
## [40] "Game3Angry2"
## [41] "Game3Angry3"
## [42] "Game3AngryFriends"
## [43] "Game3AngryStrangers"
## [44] "Game3CalmFriends"
## [45] "Game3CalmStrangers"
## [46] "Game3ExcitedFriends"
## [47] "Game3ExcitedStrangers"
## [48] "Game3Exciting1"
## [49] "Game3Exciting2"
## [50] "Game3Exciting3"
## [51] "Game3Intro"
## [52] "Game3Neutral1"
## [53] "Game3Neutral2"
## [54] "Game3Neutral3"
## [55] "Game4Angry1"
## [56] "Game4Angry2"
## [57] "Game4Angry3"
## [58] "Game4AngryFriends"
## [59] "Game4AngryStrangers"
## [60] "Game4CalmFriends"
## [61] "Game4CalmStrangers"
## [62] "Game4ExcitedFriends"
## [63] "Game4ExcitedStrangers"
## [64] "Game4Exciting1"
## [65] "Game4Exciting2"
## [66] "Game4Exciting3"
## [67] "Game4Intro"
## [68] "Game4Neutral1"
## [69] "Game4Neutral2"
## [70] "Game4Neutral3"
## [71] "MusicSelectionEnd"
## [72] "MusicSelectionInstrx"
## [73] "RecallSelectionEnd"
## [74] "RecallSelectionInstrx"
## [75] "Subject2"
## [76] "Cond2"
## [77] "Exper_A"
## [78] "Inifile_A"
## [79] "Date_A"
## [80] "Time_A"
## [81] "DescribeMusic"
## [82] "HowActiveAngry1"
## [83] "HowActiveAngry2"
## [84] "HowActiveAngry3"
## [85] "HowActiveExciting1"
## [86] "HowActiveExciting2"
## [87] "HowActiveExciting3"
## [88] "HowActiveNeutral1"
## [89] "HowActiveNeutral2"
## [90] "HowActiveNeutral3"
## [91] "HowAngryAngry1"
## [92] "HowAngryAngry2"
## [93] "HowAngryAngry3"
## [94] "HowAngryExciting1"
## [95] "HowAngryExciting2"
## [96] "HowAngryExciting3"
## [97] "HowAngryNeutral1"
## [98] "HowAngryNeutral2"
## [99] "HowAngryNeutral3"
## [100] "HowExcitedAngry1"
## [101] "HowExcitedAngry2"
## [102] "HowExcitedAngry3"
## [103] "HowExcitedExciting1"
## [104] "HowExcitedExciting2"
## [105] "HowExcitedExciting3"
## [106] "HowExcitedNeutral1"
## [107] "HowExcitedNeutral2"
## [108] "HowExcitedNeutral3"
## [109] "HowPleasantAngry1"
## [110] "HowPleasantAngry2"
## [111] "HowPleasantAngry3"
## [112] "HowPleasantExciting1"
## [113] "HowPleasantExciting2"
## [114] "HowPleasantExciting3"
## [115] "HowPleasantNeutral1"
## [116] "HowPleasantNeutral2"
## [117] "HowPleasantNeutral3"
## [118] "MusicRatingEnd"
## [119] "MusicRatingInstrx"
## [120] "WhichGames"
## [121] "aboutyou"
## [122] "age"
## [123] "distractions"
## [124] "endinstructions"
## [125] "ethnicity"
## [126] "overlooking"
## [127] "race"
## [128] "sex"
## [129] "whatabout"
## [130] "year"
## [131] "Subject3"
## [132] "DDNoMusicLevel"
## [133] "DDNoMusicScore"
## [134] "DDMusicLevel"
## [135] "DDMusicScore"
## [136] "SOFNoMusicEnemies"
## [137] "SOFNoMusicFriendlies"
## [138] "SOFNoMusicTime"
## [139] "SOFMusicEnemies"
## [140] "SOFMusicFriendlies"
## [141] "SOFMusicTime"
## [142] "GameComments"
## [143] "DoNotUseVideoGamePerformanceData"
## [144] "ConfrontationalAngryMusicScore"
## [145] "ConfrontationalExcitingMusicScore"
## [146] "ConfrontationalNeutralMusicScore"
## [147] "ConfrontationalAngryRecallScore"
## [148] "ConfrontationalExcitingRecallScore"
## [149] "ConfrontationalNeutralRecallScore"
## [150] "NonconfrontationalAngryMusicScore"
## [151] "NonconfrontationalExcitingMusicScore"
## [152] "NonconfrontationalNeutralMusicScore"
## [153] "NonconfrontationalAngryRecallScore"
## [154] "NonconfrontationalExcitingRecallScore"
## [155] "NonconfrontationalNeutralRecallScore"
## [156] "ConfrontationalAngerScore"
## [157] "ConfrontationalExcitingScore"
## [158] "ConfrontationalNeutralScore"
## [159] "NonconfrontationalAngerScore"
## [160] "NonconfrontationalExcitingScore"
## [161] "NonconfrontationalNeutralScore"
## [162] "Usable"
## [163] "DoNotUse"
## [164] "ProblemDetails"
## [165] "DinerDashWithMusicScore"
## [166] "DinerDashWithoutMusicScore"
## [167] "MusicCondition"
## [168] "ZDinerDashWithMusicScore"
## [169] "ZDinerDashWithoutMusicScore"
## [170] "ZSOFNoMusicEnemies"
## [171] "ZSOFMusicEnemies"
## [172] "DinerDashDifferenceScore"
## [173] "SOFDifferenceScore"
## [174] "PleasantScoreForAngryMusic"
## [175] "PleasantScoreForExcitingMusic"
## [176] "PleasantScoreForNeutralMusic"
## [177] "AngryScoreForAngryMusic"
## [178] "AngryScoreForExcitingMusic"
## [179] "AngryScoreForNeutralMusic"
## [180] "ExcitedScoreForExcitingMusic"
## [181] "ExcitedScoreForNeutralMusic"
## [182] "ActiveScoreForExcitingMusic"
## [183] "ActiveScoreForNeutralMusic"
## [184] "ExcitedScoreForAngryMusic"
## [185] "ActiveScoreForAngryMusic"
And see if you can figure out what range the likert scores are in. What’s the highest number on the likert scale, and what’s the lowest? (Hint, d$Game1Angry1 is one of the likert rating columns, and you may want to use unique or range or hist)
## your code here
unique(d$Game1Angry1)
## [1] 6 7 4 5 3 2 1 NA
unique(d$Game1ExcitedFriends)
## [1] 1 6 2 3 5 4 7 NA
Highest number: 1 Lowest number: 7
First, we’ll get rid of rows and columns of the data that we don’t need.
First, we need to filter out any rows that should be excluded. According to the report, there are two exclusions:
“exclude data from participant 2 and participant 23 participant 2 is female, and this is a males only study participant 23 was set up on part 2 of the study (the music ratings) twice and never did part 1”
You can see participant 23’s data and the fact that they did not do part 1 by looking at the last rows of the dataframe:
tail(d)
## Subject Cond Exper
## 86 87 1 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 87 88 6 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 88 89 2 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 89 90 3 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part1.exp
## 90 23 NA
## 91 23 NA
## Inifile Date Time Game1Angry1 Game1Angry2 Game1Angry3
## 86 default.mlp 13644633600 40065 1 3 4
## 87 default.mlp 13644633600 51237 7 7 5
## 88 default.mlp 13644633600 54293 7 6 6
## 89 default.mlp 13644633600 58190 5 5 5
## 90 NA NA NA NA NA
## 91 NA NA NA NA NA
## Game1AngryFriends Game1AngryStrangers Game1CalmFriends
## 86 6 7 1
## 87 4 1 4
## 88 7 5 3
## 89 7 7 1
## 90 NA NA NA
## 91 NA NA NA
## Game1CalmStrangers Game1ExcitedFriends Game1ExcitedStrangers
## 86 1 1 1
## 87 4 7 4
## 88 2 7 6
## 89 1 4 1
## 90 NA NA NA
## 91 NA NA NA
## Game1Exciting1 Game1Exciting2 Game1Exciting3 Game1Intro Game1Neutral1
## 86 1 1 1 ok 2
## 87 7 7 6 ok 2
## 88 3 5 2 ok 1
## 89 1 1 1 ok 1
## 90 NA NA NA NA
## 91 NA NA NA NA
## Game1Neutral2 Game1Neutral3 Game2Angry1 Game2Angry2 Game2Angry3
## 86 2 3 5 5 7
## 87 1 1 7 7 4
## 88 2 1 6 4 6
## 89 1 6 5 1 7
## 90 NA NA NA NA NA
## 91 NA NA NA NA NA
## Game2AngryFriends Game2AngryStrangers Game2CalmFriends
## 86 1 7 4
## 87 1 1 5
## 88 7 2 3
## 89 7 7 1
## 90 NA NA NA
## 91 NA NA NA
## Game2CalmStrangers Game2ExcitedFriends Game2ExcitedStrangers
## 86 4 2 2
## 87 6 7 4
## 88 1 7 5
## 89 1 1 4
## 90 NA NA NA
## 91 NA NA NA
## Game2Exciting1 Game2Exciting2 Game2Exciting3 Game2Intro Game2Neutral1
## 86 5 1 1 ok 1
## 87 7 1 1 ok 1
## 88 1 3 1 ok 1
## 89 3 2 2 ok 1
## 90 NA NA NA NA
## 91 NA NA NA NA
## Game2Neutral2 Game2Neutral3 Game3Angry1 Game3Angry2 Game3Angry3
## 86 1 1 5 3 6
## 87 1 1 2 1 7
## 88 2 2 2 4 4
## 89 3 1 1 1 5
## 90 NA NA NA NA NA
## 91 NA NA NA NA NA
## Game3AngryFriends Game3AngryStrangers Game3CalmFriends
## 86 1 2 5
## 87 1 1 7
## 88 1 1 6
## 89 2 2 7
## 90 NA NA NA
## 91 NA NA NA
## Game3CalmStrangers Game3ExcitedFriends Game3ExcitedStrangers
## 86 6 4 2
## 87 2 7 3
## 88 4 3 6
## 89 6 7 7
## 90 NA NA NA
## 91 NA NA NA
## Game3Exciting1 Game3Exciting2 Game3Exciting3 Game3Intro Game3Neutral1
## 86 1 1 1 ok 5
## 87 2 1 1 ok 4
## 88 5 5 6 ok 4
## 89 2 1 1 ok 4
## 90 NA NA NA NA
## 91 NA NA NA NA
## Game3Neutral2 Game3Neutral3 Game4Angry1 Game4Angry2 Game4Angry3
## 86 1 2 3 1 4
## 87 6 2 2 1 7
## 88 1 6 1 1 1
## 89 4 7 1 3 1
## 90 NA NA NA NA NA
## 91 NA NA NA NA NA
## Game4AngryFriends Game4AngryStrangers Game4CalmFriends
## 86 1 1 7
## 87 3 4 2
## 88 1 1 7
## 89 3 3 5
## 90 NA NA NA
## 91 NA NA NA
## Game4CalmStrangers Game4ExcitedFriends Game4ExcitedStrangers
## 86 7 7 7
## 87 6 7 7
## 88 5 7 5
## 89 4 7 7
## 90 NA NA NA
## 91 NA NA NA
## Game4Exciting1 Game4Exciting2 Game4Exciting3 Game4Intro Game4Neutral1
## 86 2 5 5 ok 5
## 87 4 1 2 ok 5
## 88 5 4 7 ok 5
## 89 2 4 5 ok 1
## 90 NA NA NA NA
## 91 NA NA NA NA
## Game4Neutral2 Game4Neutral3 MusicSelectionEnd MusicSelectionInstrx
## 86 5 4 ok ok
## 87 3 1 ok ok
## 88 5 3 ok ok
## 89 2 5 ok ok
## 90 NA NA
## 91 NA NA
## RecallSelectionEnd RecallSelectionInstrx Subject2 Cond2
## 86 ok ok 87 1
## 87 ok ok 88 6
## 88 ok ok 89 2
## 89 ok ok 90 3
## 90 23 1
## 91 23 1
## Exper_A Inifile_A
## 86 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 87 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 88 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 89 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 90 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## 91 C:\\Users\\msplab\\Desktop\\Study 151\\Study151Part2.exp default.mlp
## Date_A Time_A DescribeMusic HowActiveAngry1 HowActiveAngry2
## 86 13644633600 42314 2 5 5
## 87 13644633600 53402 2 5 5
## 88 13644633600 56552 2 5 3
## 89 13644633600 60558 2 5 5
## 90 13643078400 61329 2 4 5
## 91 13643078400 63502 2 4 3
## HowActiveAngry3 HowActiveExciting1 HowActiveExciting2
## 86 4 5 5
## 87 5 5 5
## 88 4 4 5
## 89 3 5 5
## 90 5 3 3
## 91 5 4 3
## HowActiveExciting3 HowActiveNeutral1 HowActiveNeutral2
## 86 5 1 1
## 87 5 2 2
## 88 5 1 2
## 89 5 1 1
## 90 3 3 4
## 91 5 4 4
## HowActiveNeutral3 HowAngryAngry1 HowAngryAngry2 HowAngryAngry3
## 86 1 3 5 1
## 87 1 5 5 1
## 88 1 5 5 4
## 89 1 5 5 3
## 90 3 3 3 2
## 91 2 2 3 2
## HowAngryExciting1 HowAngryExciting2 HowAngryExciting3 HowAngryNeutral1
## 86 1 1 1 1
## 87 3 1 2 1
## 88 2 3 1 1
## 89 3 1 1 1
## 90 3 2 2 2
## 91 3 3 1 2
## HowAngryNeutral2 HowAngryNeutral3 HowExcitedAngry1 HowExcitedAngry2
## 86 5 1 4 4
## 87 1 1 5 5
## 88 1 1 5 5
## 89 1 1 5 5
## 90 2 2 4 4
## 91 2 1 3 3
## HowExcitedAngry3 HowExcitedExciting1 HowExcitedExciting2
## 86 4 3 4
## 87 5 5 5
## 88 4 3 4
## 89 5 4 5
## 90 5 5 5
## 91 3 3 5
## HowExcitedExciting3 HowExcitedNeutral1 HowExcitedNeutral2
## 86 4 1 2
## 87 5 1 5
## 88 5 2 2
## 89 4 1 1
## 90 3 3 4
## 91 4 3 4
## HowExcitedNeutral3 HowPleasantAngry1 HowPleasantAngry2
## 86 1 3 3
## 87 5 1 1
## 88 1 3 3
## 89 2 2 1
## 90 4 1 1
## 91 3 2 2
## HowPleasantAngry3 HowPleasantExciting1 HowPleasantExciting2
## 86 4 2 4
## 87 5 5 5
## 88 2 3 3
## 89 3 1 5
## 90 1 1 2
## 91 1 2 5
## HowPleasantExciting3 HowPleasantNeutral1 HowPleasantNeutral2
## 86 3 3 3
## 87 2 5 5
## 88 5 4 4
## 89 2 4 4
## 90 1 3 3
## 91 3 5 5
## HowPleasantNeutral3 MusicRatingEnd MusicRatingInstrx WhichGames
## 86 2 ok ok ok
## 87 5 ok ok ok
## 88 5 ok ok ok
## 89 5 ok ok ok
## 90 3 ok ok ok
## 91 1 ok ok ok
## aboutyou age distractions endinstructions ethnicity overlooking race
## 86 ok 20 ok ok 2 ok 2
## 87 ok 18 ok ok 2 ok 1
## 88 ok 18 ok ok 2 ok 2
## 89 ok 18 ok ok 2 ok 2
## 90 ok 20 ok ok 2 ok 1
## 91 ok 20 ok ok 2 ok 1
## sex whatabout year Subject3 DDNoMusicLevel DDNoMusicScore DDMusicLevel
## 86 1 ok 2 87 3 0 3
## 87 1 ok 1 88 3 0 3
## 88 1 ok 1 89 2 3280 3
## 89 1 ok 1 90 2 3040 3
## 90 1 ok 2 23 2 3990 3
## 91 1 ok 2 23 NA NA NA
## DDMusicScore SOFNoMusicEnemies SOFNoMusicFriendlies SOFNoMusicTime
## 86 170 15 0 13140
## 87 866 24 0 23460
## 88 820 7 0 8880
## 89 0 22 2 28440
## 90 750 9 2 19260
## 91 NA NA NA NA
## SOFMusicEnemies SOFMusicFriendlies SOFMusicTime
## 86 25 1 23160
## 87 27 0 22380
## 88 31 0 23100
## 89 26 0 25500
## 90 18 2 24120
## 91 NA NA NA
## GameComments DoNotUseVideoGamePerformanceData
## 86 Participant died, restart 1
## 87 NA
## 88 1
## 89 NA
## 90 NA
## 91 NA
## ConfrontationalAngryMusicScore ConfrontationalExcitingMusicScore
## 86 4.166667 1.666667
## 87 6.166667 4.833333
## 88 5.833333 2.500000
## 89 4.666667 1.666667
## 90 NA NA
## 91 NA NA
## ConfrontationalNeutralMusicScore ConfrontationalAngryRecallScore
## 86 1.666667 6.50
## 87 1.166667 2.50
## 88 1.500000 5.25
## 89 2.166667 7.00
## 90 NA NA
## 91 NA NA
## ConfrontationalExcitingRecallScore ConfrontationalNeutralRecallScore
## 86 1.25 1.75
## 87 5.50 4.50
## 88 6.25 2.25
## 89 3.25 1.00
## 90 NA NA
## 91 NA NA
## NonconfrontationalAngryMusicScore NonconfrontationalExcitingMusicScore
## 86 3.666667 2.500000
## 87 3.333333 1.833333
## 88 2.166667 5.333333
## 89 2.000000 2.500000
## 90 NA NA
## 91 NA NA
## NonconfrontationalNeutralMusicScore NonconfrontationalAngryRecallScore
## 86 3.666667 1.25
## 87 3.500000 1.75
## 88 4.000000 1.00
## 89 3.833333 2.25
## 90 NA NA
## 91 NA NA
## NonconfrontationalExcitingRecallScore
## 86 4.25
## 87 6.00
## 88 4.25
## 89 7.00
## 90 NA
## 91 NA
## NonconfrontationalNeutralRecallScore ConfrontationalAngerScore
## 86 5.75 5.1
## 87 5.50 4.7
## 88 5.25 5.6
## 89 6.00 5.6
## 90 NA NA
## 91 NA NA
## ConfrontationalExcitingScore ConfrontationalNeutralScore
## 86 1.5 1.7
## 87 5.1 2.5
## 88 4.0 1.8
## 89 2.3 1.7
## 90 NA NA
## 91 NA NA
## NonconfrontationalAngerScore NonconfrontationalExcitingScore
## 86 2.7 3.2
## 87 2.7 3.5
## 88 1.7 4.9
## 89 2.1 4.3
## 90 NA NA
## 91 NA NA
## NonconfrontationalNeutralScore Usable DoNotUse
## 86 4.5 1 NA
## 87 4.3 1 NA
## 88 4.5 1 NA
## 89 4.7 1 NA
## 90 NA 0 1
## 91 NA 0 1
## ProblemDetails
## 86
## 87
## 88
## 89
## 90 Participant 23 was set up on part 2 of the survey when he was supposed to be set up on part 1; he did part 2 twice; data should be excluded entirely
## 91 Participant 23 was set up on part 2 of the survey when he was supposed to be set up on part 1; he did part 2 twice; data should be excluded entirely
## DinerDashWithMusicScore DinerDashWithoutMusicScore MusicCondition
## 86 5170 5000 Anger
## 87 5866 5000 Neutral
## 88 5820 3280 Exciting
## 89 5000 3040 Neutral
## 90 5750 3990 <NA>
## 91 NA NA <NA>
## ZDinerDashWithMusicScore ZDinerDashWithoutMusicScore ZSOFNoMusicEnemies
## 86 -1.02044667 0.2692740 -0.1401958
## 87 -0.02167208 0.2692740 1.0044959
## 88 -0.08768304 -1.1667773 -1.1576995
## 89 -1.26440023 -1.3671565 0.7501199
## 90 -0.18813451 -0.5739887 -0.9033236
## 91 NA NA NA
## ZSOFMusicEnemies DinerDashDifferenceScore SOFDifferenceScore
## 86 0.5785486 -1.2897207 0.71874445
## 87 0.8387424 -0.2909461 -0.16575340
## 88 1.3591301 1.0790942 2.51682964
## 89 0.7086455 0.1027563 -0.04147439
## 90 -0.3321298 0.3858541 0.57119384
## 91 NA NA NA
## PleasantScoreForAngryMusic PleasantScoreForExcitingMusic
## 86 3.333333 3.000000
## 87 2.333333 4.000000
## 88 2.666667 3.666667
## 89 2.000000 2.666667
## 90 1.000000 1.333333
## 91 1.666667 3.333333
## PleasantScoreForNeutralMusic AngryScoreForAngryMusic
## 86 2.666667 3.000000
## 87 5.000000 3.666667
## 88 4.333333 4.666667
## 89 4.333333 4.333333
## 90 3.000000 2.666667
## 91 3.666667 2.333333
## AngryScoreForExcitingMusic AngryScoreForNeutralMusic
## 86 1.000000 2.333333
## 87 2.000000 1.000000
## 88 2.000000 1.000000
## 89 1.666667 1.000000
## 90 2.333333 2.000000
## 91 2.333333 1.666667
## ExcitedScoreForExcitingMusic ExcitedScoreForNeutralMusic
## 86 3.666667 1.333333
## 87 5.000000 3.666667
## 88 4.000000 1.666667
## 89 4.333333 1.333333
## 90 4.333333 3.666667
## 91 4.000000 3.333333
## ActiveScoreForExcitingMusic ActiveScoreForNeutralMusic
## 86 5.000000 1.000000
## 87 5.000000 1.666667
## 88 4.666667 1.333333
## 89 5.000000 1.000000
## 90 3.000000 3.333333
## 91 4.000000 3.333333
## ExcitedScoreForAngryMusic ActiveScoreForAngryMusic
## 86 4.000000 4.666667
## 87 5.000000 5.000000
## 88 4.666667 4.000000
## 89 5.000000 4.333333
## 90 4.333333 4.666667
## 91 3.000000 4.000000
Notice that participant 23 has missing values for part 1.
The researchers have made a column called DoNotUse based on their exlusion criteria. Use this column to filter the dataframe! (hint: this is a little trickier than it might be because of how R treats NA values. You may want to check out ?is.na.)
d$DoNotUse
## [1] NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [24] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [47] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
## [70] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1 1
?is.na
filtered_d = d %>%
filter(is.na(DoNotUse)) # your code here: exclude subjects that are marked as "DoNotUse"
It’s good practice to assign a new variable name (in this case filtered_d) to a data frame when you change it in an important way, or apply a code chunk that shouldn’t be run twice. This helps prevent you seeing different results when you run your code in chunks (and might run one multiple times, or skip it, etc.) vs. knit the document.
The dataset contains a bunnch of columns we don’t care about:
To get rid of these, we’ll use the select function to take only the columns we need.
filtered_d = filtered_d %>%
dplyr::select(c("Subject", "Cond"), # Generally important columns for both hypotheses
contains("Game"), # we want all the game columns for hypothesis 1
-contains("Intro"), (-one_of("WhichGames", "GameComments")), # except these
starts_with("DinerDashWith"), c("SOFMusicEnemies","SOFNoMusicEnemies")) # These columns are for hypothesis 2
Even better, let’s split this into separate data frames for hypothesis 1 and hypothesis 2, since they are different types of experiments with different measurements, and therefore different analyses that will need to be performed. Now that we’ve cleaned up the data, this is pretty easy to do! We’ll just drop the columns that are for the other hypothesis. The select function lets us choose which columns to remove (instead of which to keep) by putting a minus sign in front of them. First, let’s create a dataset for the rating hypothesis by getting rid of the game performance columns:
rating_hyp_d = filtered_d %>%
filter(is.na(DoNotUseVideoGamePerformanceData)) %>% # first, let's get rid of the subjects who did so poorly on one game that their data is unusable
select(-DoNotUseVideoGamePerformanceData, # now get rid of that column
-starts_with("DinerDash"), # and the other columns we don't need
-starts_with("SOF"))
Now you try! Fill in the selection criteria to get rid of the “Game” columns, which we don’t need for the performance hypothesis. (It’s simpler than the code block above, because you don’t need to do a filter first, only a select.)
performance_hyp_d = filtered_d %>%
select(-contains("Game")) # your code here: remove the columns containing "Game" in the name
Now we want to convert the data to long form, to make the rest of our manipulations easier. To do this, we can gather columns. This will take many columns, and change the column names into entries in a “key” column, while the values that were in the original column will be turned into entries in a “value” column. It’s easiest to see with an example:
tiny_demo_d = head(performance_hyp_d, 2) # get just the first two subjects performance data, for a demo
First, take a look at the original wide-form data:
tiny_demo_d
## Subject Cond DinerDashWithMusicScore DinerDashWithoutMusicScore
## 1 1 2 5830 5000
## 2 3 1 5370 1250
## SOFMusicEnemies SOFNoMusicEnemies
## 1 19 22
## 2 23 15
Now, take a look at the long-form version:
tiny_demo_d %>% gather(Measurment, Value,
-c("Subject", "Cond")) # this tells it to gather all columns *except* these ones.
## Subject Cond Measurment Value
## 1 1 2 DinerDashWithMusicScore 5830
## 2 3 1 DinerDashWithMusicScore 5370
## 3 1 2 DinerDashWithoutMusicScore 5000
## 4 3 1 DinerDashWithoutMusicScore 1250
## 5 1 2 SOFMusicEnemies 19
## 6 3 1 SOFMusicEnemies 23
## 7 1 2 SOFNoMusicEnemies 22
## 8 3 1 SOFNoMusicEnemies 15
See how the columns have been converted into rows (except for the two we excluded), and the dataset has gone from wide to long?
Now let’s actually convert the performance dataset
performance_hyp_long_d = performance_hyp_d %>%
gather(Measurement, Score, -c("Subject", "Cond"))
performance_hyp_long_d
## Subject Cond Measurement Score
## 1 1 2 DinerDashWithMusicScore 5830
## 2 3 1 DinerDashWithMusicScore 5370
## 3 4 4 DinerDashWithMusicScore 6921
## 4 5 5 DinerDashWithMusicScore 6750
## 5 6 6 DinerDashWithMusicScore 6380
## 6 7 3 DinerDashWithMusicScore 5170
## 7 8 6 DinerDashWithMusicScore 5690
## 8 9 5 DinerDashWithMusicScore 6440
## 9 10 1 DinerDashWithMusicScore 5480
## 10 11 2 DinerDashWithMusicScore 6210
## 11 12 4 DinerDashWithMusicScore 6270
## 12 13 4 DinerDashWithMusicScore 6150
## 13 14 6 DinerDashWithMusicScore 7440
## 14 15 2 DinerDashWithMusicScore 5660
## 15 16 3 DinerDashWithMusicScore 6810
## 16 17 5 DinerDashWithMusicScore 5950
## 17 18 1 DinerDashWithMusicScore 6160
## 18 19 4 DinerDashWithMusicScore 6240
## 19 20 3 DinerDashWithMusicScore 6650
## 20 21 6 DinerDashWithMusicScore 6500
## 21 22 5 DinerDashWithMusicScore 5770
## 22 24 2 DinerDashWithMusicScore 5950
## 23 25 2 DinerDashWithMusicScore 5550
## 24 26 1 DinerDashWithMusicScore 6560
## 25 27 3 DinerDashWithMusicScore 6190
## 26 28 4 DinerDashWithMusicScore 5930
## 27 29 6 DinerDashWithMusicScore 5990
## 28 30 5 DinerDashWithMusicScore 6160
## 29 31 4 DinerDashWithMusicScore 5020
## 30 32 5 DinerDashWithMusicScore 5000
## 31 33 3 DinerDashWithMusicScore 5970
## 32 34 1 DinerDashWithMusicScore 6440
## 33 35 2 DinerDashWithMusicScore 6010
## 34 36 6 DinerDashWithMusicScore 5730
## 35 37 1 DinerDashWithMusicScore 5240
## 36 38 6 DinerDashWithMusicScore 7430
## 37 39 4 DinerDashWithMusicScore 5740
## 38 40 3 DinerDashWithMusicScore 5840
## 39 41 5 DinerDashWithMusicScore 5790
## 40 42 2 DinerDashWithMusicScore 6410
## 41 43 6 DinerDashWithMusicScore 7310
## 42 44 2 DinerDashWithMusicScore 6460
## 43 45 3 DinerDashWithMusicScore 6820
## 44 46 1 DinerDashWithMusicScore 5000
## 45 47 4 DinerDashWithMusicScore 5100
## 46 48 5 DinerDashWithMusicScore 6100
## 47 49 5 DinerDashWithMusicScore 5920
## 48 50 3 DinerDashWithMusicScore 6170
## 49 51 4 DinerDashWithMusicScore 5000
## 50 52 1 DinerDashWithMusicScore 5990
## 51 53 6 DinerDashWithMusicScore 5670
## 52 54 2 DinerDashWithMusicScore 5000
## 53 55 4 DinerDashWithMusicScore 5170
## 54 56 3 DinerDashWithMusicScore 5990
## 55 57 2 DinerDashWithMusicScore 5620
## 56 58 5 DinerDashWithMusicScore 6080
## 57 59 1 DinerDashWithMusicScore 5830
## 58 60 6 DinerDashWithMusicScore 6200
## 59 61 3 DinerDashWithMusicScore 6790
## 60 62 6 DinerDashWithMusicScore 6130
## 61 63 1 DinerDashWithMusicScore 5060
## 62 64 2 DinerDashWithMusicScore 6500
## 63 65 4 DinerDashWithMusicScore 3460
## 64 66 5 DinerDashWithMusicScore 6000
## 65 67 4 DinerDashWithMusicScore 5170
## 66 68 3 DinerDashWithMusicScore 5650
## 67 69 6 DinerDashWithMusicScore 5600
## 68 70 2 DinerDashWithMusicScore 5900
## 69 71 5 DinerDashWithMusicScore 5660
## 70 72 1 DinerDashWithMusicScore 7440
## 71 73 1 DinerDashWithMusicScore 6480
## 72 74 2 DinerDashWithMusicScore 5430
## 73 75 6 DinerDashWithMusicScore 6160
## 74 76 5 DinerDashWithMusicScore 5350
## 75 77 4 DinerDashWithMusicScore 5060
## 76 78 3 DinerDashWithMusicScore 5260
## 77 79 6 DinerDashWithMusicScore 5970
## 78 80 2 DinerDashWithMusicScore NA
## 79 81 5 DinerDashWithMusicScore 5670
## 80 82 3 DinerDashWithMusicScore 5960
## 81 83 4 DinerDashWithMusicScore 5630
## 82 84 4 DinerDashWithMusicScore 3290
## 83 85 5 DinerDashWithMusicScore 6150
## 84 86 3 DinerDashWithMusicScore 5940
## 85 87 1 DinerDashWithMusicScore 5170
## 86 88 6 DinerDashWithMusicScore 5866
## 87 89 2 DinerDashWithMusicScore 5820
## 88 90 3 DinerDashWithMusicScore 5000
## 89 1 2 DinerDashWithoutMusicScore 5000
## 90 3 1 DinerDashWithoutMusicScore 1250
## 91 4 4 DinerDashWithoutMusicScore 6742
## 92 5 5 DinerDashWithoutMusicScore 5060
## 93 6 6 DinerDashWithoutMusicScore 5840
## 94 7 3 DinerDashWithoutMusicScore 5020
## 95 8 6 DinerDashWithoutMusicScore 5000
## 96 9 5 DinerDashWithoutMusicScore 6460
## 97 10 1 DinerDashWithoutMusicScore 2990
## 98 11 2 DinerDashWithoutMusicScore 5090
## 99 12 4 DinerDashWithoutMusicScore 5490
## 100 13 4 DinerDashWithoutMusicScore 5140
## 101 14 6 DinerDashWithoutMusicScore NA
## 102 15 2 DinerDashWithoutMusicScore 5000
## 103 16 3 DinerDashWithoutMusicScore 5200
## 104 17 5 DinerDashWithoutMusicScore 3040
## 105 18 1 DinerDashWithoutMusicScore 5140
## 106 19 4 DinerDashWithoutMusicScore 5370
## 107 20 3 DinerDashWithoutMusicScore 5170
## 108 21 6 DinerDashWithoutMusicScore 3000
## 109 22 5 DinerDashWithoutMusicScore 5000
## 110 24 2 DinerDashWithoutMusicScore 5060
## 111 25 2 DinerDashWithoutMusicScore 5000
## 112 26 1 DinerDashWithoutMusicScore 5020
## 113 27 3 DinerDashWithoutMusicScore 5370
## 114 28 4 DinerDashWithoutMusicScore 5000
## 115 29 6 DinerDashWithoutMusicScore 5000
## 116 30 5 DinerDashWithoutMusicScore 5960
## 117 31 4 DinerDashWithoutMusicScore 970
## 118 32 5 DinerDashWithoutMusicScore 1090
## 119 33 3 DinerDashWithoutMusicScore 5000
## 120 34 1 DinerDashWithoutMusicScore 5000
## 121 35 2 DinerDashWithoutMusicScore 5000
## 122 36 6 DinerDashWithoutMusicScore 5060
## 123 37 1 DinerDashWithoutMusicScore 5060
## 124 38 6 DinerDashWithoutMusicScore 5840
## 125 39 4 DinerDashWithoutMusicScore 5000
## 126 40 3 DinerDashWithoutMusicScore 3340
## 127 41 5 DinerDashWithoutMusicScore 4189
## 128 42 2 DinerDashWithoutMusicScore 5090
## 129 43 6 DinerDashWithoutMusicScore 5000
## 130 44 2 DinerDashWithoutMusicScore 5170
## 131 45 3 DinerDashWithoutMusicScore 5060
## 132 46 1 DinerDashWithoutMusicScore 5000
## 133 47 4 DinerDashWithoutMusicScore 5000
## 134 48 5 DinerDashWithoutMusicScore 5000
## 135 49 5 DinerDashWithoutMusicScore 5370
## 136 50 3 DinerDashWithoutMusicScore 5680
## 137 51 4 DinerDashWithoutMusicScore 5000
## 138 52 1 DinerDashWithoutMusicScore 5000
## 139 53 6 DinerDashWithoutMusicScore 5530
## 140 54 2 DinerDashWithoutMusicScore 3140
## 141 55 4 DinerDashWithoutMusicScore 5000
## 142 56 3 DinerDashWithoutMusicScore 5000
## 143 57 2 DinerDashWithoutMusicScore 2870
## 144 58 5 DinerDashWithoutMusicScore 5150
## 145 59 1 DinerDashWithoutMusicScore 5000
## 146 60 6 DinerDashWithoutMusicScore 5490
## 147 61 3 DinerDashWithoutMusicScore 5000
## 148 62 6 DinerDashWithoutMusicScore 5210
## 149 63 1 DinerDashWithoutMusicScore 2200
## 150 64 2 DinerDashWithoutMusicScore 5170
## 151 65 4 DinerDashWithoutMusicScore 5000
## 152 66 5 DinerDashWithoutMusicScore 5670
## 153 67 4 DinerDashWithoutMusicScore 1210
## 154 68 3 DinerDashWithoutMusicScore 2960
## 155 69 6 DinerDashWithoutMusicScore 5170
## 156 70 2 DinerDashWithoutMusicScore 5860
## 157 71 5 DinerDashWithoutMusicScore 5000
## 158 72 1 DinerDashWithoutMusicScore 5020
## 159 73 1 DinerDashWithoutMusicScore 6180
## 160 74 2 DinerDashWithoutMusicScore 3160
## 161 75 6 DinerDashWithoutMusicScore 5430
## 162 76 5 DinerDashWithoutMusicScore 5500
## 163 77 4 DinerDashWithoutMusicScore 2180
## 164 78 3 DinerDashWithoutMusicScore 5000
## 165 79 6 DinerDashWithoutMusicScore 5140
## 166 80 2 DinerDashWithoutMusicScore NA
## 167 81 5 DinerDashWithoutMusicScore 5070
## 168 82 3 DinerDashWithoutMusicScore 5060
## 169 83 4 DinerDashWithoutMusicScore 5060
## 170 84 4 DinerDashWithoutMusicScore 2870
## 171 85 5 DinerDashWithoutMusicScore 6000
## 172 86 3 DinerDashWithoutMusicScore 5000
## 173 87 1 DinerDashWithoutMusicScore 5000
## 174 88 6 DinerDashWithoutMusicScore 5000
## 175 89 2 DinerDashWithoutMusicScore 3280
## 176 90 3 DinerDashWithoutMusicScore 3040
## 177 1 2 SOFMusicEnemies 19
## 178 3 1 SOFMusicEnemies 23
## 179 4 4 SOFMusicEnemies 19
## 180 5 5 SOFMusicEnemies 23
## 181 6 6 SOFMusicEnemies 24
## 182 7 3 SOFMusicEnemies 20
## 183 8 6 SOFMusicEnemies 1
## 184 9 5 SOFMusicEnemies 16
## 185 10 1 SOFMusicEnemies 24
## 186 11 2 SOFMusicEnemies 26
## 187 12 4 SOFMusicEnemies 23
## 188 13 4 SOFMusicEnemies 23
## 189 14 6 SOFMusicEnemies 25
## 190 15 2 SOFMusicEnemies 10
## 191 16 3 SOFMusicEnemies 26
## 192 17 5 SOFMusicEnemies 15
## 193 18 1 SOFMusicEnemies 23
## 194 19 4 SOFMusicEnemies 21
## 195 20 3 SOFMusicEnemies 23
## 196 21 6 SOFMusicEnemies 14
## 197 22 5 SOFMusicEnemies 23
## 198 24 2 SOFMusicEnemies 15
## 199 25 2 SOFMusicEnemies 27
## 200 26 1 SOFMusicEnemies 24
## 201 27 3 SOFMusicEnemies 26
## 202 28 4 SOFMusicEnemies 1
## 203 29 6 SOFMusicEnemies 19
## 204 30 5 SOFMusicEnemies 26
## 205 31 4 SOFMusicEnemies 14
## 206 32 5 SOFMusicEnemies 12
## 207 33 3 SOFMusicEnemies 19
## 208 34 1 SOFMusicEnemies NA
## 209 35 2 SOFMusicEnemies 23
## 210 36 6 SOFMusicEnemies 24
## 211 37 1 SOFMusicEnemies 7
## 212 38 6 SOFMusicEnemies 26
## 213 39 4 SOFMusicEnemies 0
## 214 40 3 SOFMusicEnemies 14
## 215 41 5 SOFMusicEnemies 25
## 216 42 2 SOFMusicEnemies 23
## 217 43 6 SOFMusicEnemies 30
## 218 44 2 SOFMusicEnemies 22
## 219 45 3 SOFMusicEnemies 23
## 220 46 1 SOFMusicEnemies 1
## 221 47 4 SOFMusicEnemies 28
## 222 48 5 SOFMusicEnemies 25
## 223 49 5 SOFMusicEnemies 24
## 224 50 3 SOFMusicEnemies 0
## 225 51 4 SOFMusicEnemies NA
## 226 52 1 SOFMusicEnemies 23
## 227 53 6 SOFMusicEnemies 24
## 228 54 2 SOFMusicEnemies 23
## 229 55 4 SOFMusicEnemies 4
## 230 56 3 SOFMusicEnemies 17
## 231 57 2 SOFMusicEnemies 24
## 232 58 5 SOFMusicEnemies 26
## 233 59 1 SOFMusicEnemies 23
## 234 60 6 SOFMusicEnemies 26
## 235 61 3 SOFMusicEnemies 18
## 236 62 6 SOFMusicEnemies 23
## 237 63 1 SOFMusicEnemies 0
## 238 64 2 SOFMusicEnemies 13
## 239 65 4 SOFMusicEnemies NA
## 240 66 5 SOFMusicEnemies 23
## 241 67 4 SOFMusicEnemies 27
## 242 68 3 SOFMusicEnemies 19
## 243 69 6 SOFMusicEnemies 25
## 244 70 2 SOFMusicEnemies 28
## 245 71 5 SOFMusicEnemies 26
## 246 72 1 SOFMusicEnemies 23
## 247 73 1 SOFMusicEnemies 36
## 248 74 2 SOFMusicEnemies 24
## 249 75 6 SOFMusicEnemies 11
## 250 76 5 SOFMusicEnemies 25
## 251 77 4 SOFMusicEnemies 25
## 252 78 3 SOFMusicEnemies 17
## 253 79 6 SOFMusicEnemies 20
## 254 80 2 SOFMusicEnemies NA
## 255 81 5 SOFMusicEnemies 27
## 256 82 3 SOFMusicEnemies 28
## 257 83 4 SOFMusicEnemies 26
## 258 84 4 SOFMusicEnemies 19
## 259 85 5 SOFMusicEnemies 30
## 260 86 3 SOFMusicEnemies 18
## 261 87 1 SOFMusicEnemies 25
## 262 88 6 SOFMusicEnemies 27
## 263 89 2 SOFMusicEnemies 31
## 264 90 3 SOFMusicEnemies 26
## 265 1 2 SOFNoMusicEnemies 22
## 266 3 1 SOFNoMusicEnemies 15
## 267 4 4 SOFNoMusicEnemies 3
## 268 5 5 SOFNoMusicEnemies 18
## 269 6 6 SOFNoMusicEnemies 23
## 270 7 3 SOFNoMusicEnemies 7
## 271 8 6 SOFNoMusicEnemies 17
## 272 9 5 SOFNoMusicEnemies 18
## 273 10 1 SOFNoMusicEnemies 16
## 274 11 2 SOFNoMusicEnemies 19
## 275 12 4 SOFNoMusicEnemies 23
## 276 13 4 SOFNoMusicEnemies 2
## 277 14 6 SOFNoMusicEnemies 29
## 278 15 2 SOFNoMusicEnemies 0
## 279 16 3 SOFNoMusicEnemies 24
## 280 17 5 SOFNoMusicEnemies 0
## 281 18 1 SOFNoMusicEnemies 19
## 282 19 4 SOFNoMusicEnemies 15
## 283 20 3 SOFNoMusicEnemies 21
## 284 21 6 SOFNoMusicEnemies 10
## 285 22 5 SOFNoMusicEnemies 21
## 286 24 2 SOFNoMusicEnemies 16
## 287 25 2 SOFNoMusicEnemies 25
## 288 26 1 SOFNoMusicEnemies 24
## 289 27 3 SOFNoMusicEnemies 1
## 290 28 4 SOFNoMusicEnemies 3
## 291 29 6 SOFNoMusicEnemies 10
## 292 30 5 SOFNoMusicEnemies 20
## 293 31 4 SOFNoMusicEnemies 2
## 294 32 5 SOFNoMusicEnemies 12
## 295 33 3 SOFNoMusicEnemies 15
## 296 34 1 SOFNoMusicEnemies 25
## 297 35 2 SOFNoMusicEnemies 25
## 298 36 6 SOFNoMusicEnemies 18
## 299 37 1 SOFNoMusicEnemies 15
## 300 38 6 SOFNoMusicEnemies 24
## 301 39 4 SOFNoMusicEnemies 0
## 302 40 3 SOFNoMusicEnemies 20
## 303 41 5 SOFNoMusicEnemies 15
## 304 42 2 SOFNoMusicEnemies 19
## 305 43 6 SOFNoMusicEnemies 27
## 306 44 2 SOFNoMusicEnemies 24
## 307 45 3 SOFNoMusicEnemies 13
## 308 46 1 SOFNoMusicEnemies 1
## 309 47 4 SOFNoMusicEnemies 27
## 310 48 5 SOFNoMusicEnemies 2
## 311 49 5 SOFNoMusicEnemies 17
## 312 50 3 SOFNoMusicEnemies 17
## 313 51 4 SOFNoMusicEnemies 8
## 314 52 1 SOFNoMusicEnemies 23
## 315 53 6 SOFNoMusicEnemies 25
## 316 54 2 SOFNoMusicEnemies 24
## 317 55 4 SOFNoMusicEnemies 11
## 318 56 3 SOFNoMusicEnemies 9
## 319 57 2 SOFNoMusicEnemies 24
## 320 58 5 SOFNoMusicEnemies 22
## 321 59 1 SOFNoMusicEnemies 23
## 322 60 6 SOFNoMusicEnemies 18
## 323 61 3 SOFNoMusicEnemies 21
## 324 62 6 SOFNoMusicEnemies 21
## 325 63 1 SOFNoMusicEnemies 1
## 326 64 2 SOFNoMusicEnemies 20
## 327 65 4 SOFNoMusicEnemies 13
## 328 66 5 SOFNoMusicEnemies 8
## 329 67 4 SOFNoMusicEnemies 19
## 330 68 3 SOFNoMusicEnemies 21
## 331 69 6 SOFNoMusicEnemies 24
## 332 70 2 SOFNoMusicEnemies 16
## 333 71 5 SOFNoMusicEnemies 19
## 334 72 1 SOFNoMusicEnemies 16
## 335 73 1 SOFNoMusicEnemies 27
## 336 74 2 SOFNoMusicEnemies 24
## 337 75 6 SOFNoMusicEnemies 15
## 338 76 5 SOFNoMusicEnemies 6
## 339 77 4 SOFNoMusicEnemies 15
## 340 78 3 SOFNoMusicEnemies 2
## 341 79 6 SOFNoMusicEnemies 17
## 342 80 2 SOFNoMusicEnemies NA
## 343 81 5 SOFNoMusicEnemies 21
## 344 82 3 SOFNoMusicEnemies 20
## 345 83 4 SOFNoMusicEnemies 17
## 346 84 4 SOFNoMusicEnemies 7
## 347 85 5 SOFNoMusicEnemies 25
## 348 86 3 SOFNoMusicEnemies 19
## 349 87 1 SOFNoMusicEnemies 15
## 350 88 6 SOFNoMusicEnemies 24
## 351 89 2 SOFNoMusicEnemies 7
## 352 90 3 SOFNoMusicEnemies 22
And you can convert the rating dataset! (Call the “Key” column “Measurement” and call the “Value” column “Rating”, so that the code below will work)
rating_hyp_long_d = rating_hyp_d %>%
## your code here
gather(Measurement, Rating, -c("Subject","Cond"))
The measurement column in each dataset now contains a bunch of different types of information. Really, we would like these to be separate columns. For example, we could have one column telling you which video-game it is, and one telling you whether there was music. Tidyverse contains some handy features for splitting columns, but unfortunately the measurement names here are not well suited to it (if the different types of information were always the same length, or were separated by a symbol like “.” or “_“, it would be easy). Thus we’ll have to do a bit of manual testing. We can use the mutate function in dplyr to create new columns as functions of old ones (or alter existing columns). We’ll also use the grepl function, which lets us test whether a regular expression (a fancy type of search pattern) is contained in a column name. For most your purposes, you can probably just use grepl to search for strings, but there are some other quite useful functions in regular expressions, like the”or“” function (|) we use below.
performance_hyp_long_d = performance_hyp_long_d %>%
mutate(ConfrontationalGame = grepl("SOF", Measurement), # create a new variable that will say whether the measurement was of the game soldier of fortune (SOF).
WithMusic = !grepl("NoMusic|WithoutMusic", Measurement), # creates a new column named WithMusic, which is False if the measurement contains *either* "NoMusic" or "WithoutMusic"
MusicCondition = factor(ifelse(Cond > 3, Cond-3, Cond), levels = 1:3, labels = c("Anger", "Exciting", "Neutral"))) # Get rid of uninterpretable condition labels
View(performance_hyp_long_d)
Now you can help! For the rating dataset, write a test on a measurement name, using grepl or %in% to figure out whether it’s a recall or a music rating. Your new IsRecall column should be true if the measurement name contain either “Friends” or “Strangers”.
rating_hyp_long_d = rating_hyp_long_d %>%
mutate(IsRecall = grepl("Friends|Strangers", Measurement))## Your code here
Here are a couple other useful ways of manipulating columns. (You won’t remember all the functions you see here now, but that’s okay. You can always reference this tutorial later if there’s something you need to figure out how to do.)
rating_hyp_long_d = rating_hyp_long_d %>%
mutate(
GameNumber = as.numeric(substr(rating_hyp_long_d$Measurement, 5, 5)),
ConfrontationalGame = GameNumber <= 2, # in a mutate, we can use a column we created (or changed) right away. Games 1 and 2 are confrontational, games 3 and 4 are not.
Emotion = str_extract(Measurement, "Angry|Neutral|Excited|Exciting|Calm"),
Emotion = ifelse(Emotion == "Excited", "Exciting", # this just gets rid of some annoying labeling choices
ifelse(Emotion == "Calm", "Neutral", Emotion))
)
For the performance data, we need to do a little bit of manipulation of the columns in order to get to the performance measures the experimenters actually used. Because they want to compare changes in performance across games that have very different scoring systems, the easiest solution is to compare z-scores. The way they did this was to z-score performance before music, z-score performance after music, and then create a difference measure which is a difference of z-scores. (To my mind, this is actually not quite the correct way to analyze this data, but like the replication we will follow the original authors.)
We’ll add a new z-scored value column. However, we have to be careful! We want to z-score within groups of the rows, that are all the same type of measurement. For example, we want to z-score the “DinnerDashWithMusic” scores with respect to eachother, but not with respect to the scores from the other game, for example. We can use the group_by function to set groups, and then all the changes we apply will only occur within those groups until we ungroup the dataset.
To make this more concrete, let’s see how the group_by function can let us compute means within different groups, for example mean scores on the two different games.
performance_hyp_long_d %>%
group_by(ConfrontationalGame) %>%
summarize(AvgScore = mean(Score, na.rm=T)) # the na.rm tells R to ignore NA values
## # A tibble: 2 x 2
## ConfrontationalGame AvgScore
## <lgl> <dbl>
## 1 FALSE 5287.50289
## 2 TRUE 18.34503
This makes it clear why we can’t just z-score the games together! The scores are very different between games. So let’s z-score within groups (using the scale function):
performance_hyp_long_d = performance_hyp_long_d %>%
group_by(ConfrontationalGame, WithMusic) %>% # we're going to compute four sets of z-scores, one for the confrontational game without music, one for the confrontational game with, one for the nonconfrontational game without music, and one for the nonconfrontational game with
mutate(z_scored_performance = scale(Score)) %>%
ungroup()
The rating hypothesis analysis also requires some grouped manipulation: the experimenters collected repeated measures (ratings in each emotion category and each music/recall category from each game). They then averaged all the ratings that were from a given emotion and game type together to produce a nice summary. Your job is to implement this, calling the new variable MeanRating, and save the summarized data in a new data frame called rating_summary_d. (Hint: use a group_by and a summarize.)
rating_summary_d = rating_hyp_long_d %>%
## your code here
group_by(Emotion, ConfrontationalGame) %>%
summarize(MeanRating = mean(Rating, na.rm=T))
Let’s take a look at the result:
rating_summary_d
## # A tibble: 6 x 3
## # Groups: Emotion [?]
## Emotion ConfrontationalGame MeanRating
## <chr> <lgl> <dbl>
## 1 Angry FALSE 2.717021
## 2 Angry TRUE 4.678723
## 3 Exciting FALSE 3.970213
## 4 Exciting TRUE 3.046809
## 5 Neutral FALSE 3.682979
## 6 Neutral TRUE 2.155319
And a simple bar plot (don’t worry too much about what exactly this code is doing):
ggplot(rating_summary_d, aes(x=ConfrontationalGame, y=MeanRating, fill=Emotion)) +
geom_bar(position="dodge", stat="identity") +
scale_fill_brewer(palette="Set1")
Up to reordering (and the fact that we didn’t compute error bars), this is a pretty decent replication of Fig. 1 from the original Tamir et al. paper. The ratings were highest for Angry in the confrontational game, and lowest for Angry in the non-confrontational game.
And the long form dataset makes it easy to run a linear model (don’t worry too much about this, we’ll talk more about it in 252).
model = lm(Rating ~ ConfrontationalGame * Emotion, rating_hyp_long_d)
summary(model)
##
## Call:
## lm(formula = Rating ~ ConfrontationalGame * Emotion, data = rating_hyp_long_d)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6787 -1.1553 -0.0468 1.3170 4.8447
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 2.71702 0.07965 34.114
## ConfrontationalGameTRUE 1.96170 0.11264 17.416
## EmotionExciting 1.25319 0.11264 11.126
## EmotionNeutral 0.96596 0.11264 8.576
## ConfrontationalGameTRUE:EmotionExciting -2.88511 0.15929 -18.112
## ConfrontationalGameTRUE:EmotionNeutral -3.48936 0.15929 -21.905
## Pr(>|t|)
## (Intercept) <2e-16 ***
## ConfrontationalGameTRUE <2e-16 ***
## EmotionExciting <2e-16 ***
## EmotionNeutral <2e-16 ***
## ConfrontationalGameTRUE:EmotionExciting <2e-16 ***
## ConfrontationalGameTRUE:EmotionNeutral <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.727 on 2814 degrees of freedom
## Multiple R-squared: 0.1896, Adjusted R-squared: 0.1882
## F-statistic: 131.7 on 5 and 2814 DF, p-value: < 2.2e-16
There are still a few more steps to go for the performance hypothesis. We need to take a difference score to see how people improved from before hearing the music to after, and then see if the improvement is larger if they heard music congruent with the type of game.
To compute the difference score, we have to make our data a bit wider. We now want to subtract the pre-music scores from the post-music scores, which is easiest to do if they are in two different columns. To do this we’ll use the spread function (which is more or less the opposite of gather)
performance_diff_d = performance_hyp_long_d %>%
mutate(WithMusic = factor(WithMusic, levels=c(F, T), labels=c("PreMusic", "PostMusic"))) %>% # first, tweak the variable so our code is easier to read.
select(-one_of("Score", "Measurement")) %>% # now we remove columns we don't need (bonus: leave them in and see if you can understand what goes wrong!)
spread(WithMusic, z_scored_performance) %>%
mutate(ImprovementScore=PostMusic-PreMusic)
Let’s take a look at the end result:
performance_diff_d
## # A tibble: 176 x 7
## Subject Cond ConfrontationalGame MusicCondition PreMusic PostMusic
## <dbl> <dbl> <lgl> <fctr> <dbl> <dbl>
## 1 1 2 FALSE Exciting 0.2615759 -0.07507561
## 2 1 2 TRUE Exciting 0.7389870 -0.20489318
## 3 3 1 FALSE Anger -2.8571427 -0.73151564
## 4 3 1 TRUE Anger -0.1504262 0.31273169
## 5 4 4 FALSE Anger 1.7103246 1.48182888
## 6 4 4 TRUE Anger -1.6751346 -0.20489318
## 7 5 5 FALSE Exciting 0.3114754 1.23780444
## 8 5 5 TRUE Exciting 0.2307509 0.31273169
## 9 6 6 FALSE Neutral 0.9601688 0.70979833
## 10 6 6 TRUE Neutral 0.8660460 0.44213791
## # ... with 166 more rows, and 1 more variables: ImprovementScore <dbl>
If you don’t understand every step of that code (or any other dplyr code), it can be helpful to look at the result of running just the first line, then just the first two lines, and so on.
Now we’re finally to reproduce Fig. 2 from Tamir et al., we just need to get the mean differences within each game and each kind of music, and save them to a variable called MeanImprovementScore:
performance_diff_summary_d = performance_diff_d %>%
## Your code here
group_by(ConfrontationalGame, MusicCondition) %>%
summarize(MeanImprovementScore = mean(PostMusic-PreMusic,na.rm=T))
Let’s take a look at your result (if it has NA values, how can you fix it?):
performance_diff_summary_d
## # A tibble: 6 x 3
## # Groups: ConfrontationalGame [?]
## ConfrontationalGame MusicCondition MeanImprovementScore
## <lgl> <fctr> <dbl>
## 1 FALSE Anger -0.17859262
## 2 FALSE Exciting -0.01824349
## 3 FALSE Neutral 0.11404104
## 4 TRUE Anger 0.06120680
## 5 TRUE Exciting 0.16855554
## 6 TRUE Neutral -0.22475001
and plot it!
ggplot(performance_diff_summary_d, aes(x=ConfrontationalGame, y=MeanImprovementScore, fill=MusicCondition)) +
geom_bar(position="dodge", stat="identity") +
scale_fill_brewer(palette="Set1")
(Bonus: also calculate the SEM in the summary data, and then add errorbars to the plot with geom_errorbar!)
Not quite as exact a replication of the effect as Fig. 1. This concurs with the replication report, which says that the hypothesis 1 effect replicated, but hypothesis 2 did not. Here’s a model just for thoroughness (again, don’t worry too much about it):
performance_model = lm(ImprovementScore ~ ConfrontationalGame * MusicCondition, performance_diff_d)
summary(performance_model)
##
## Call:
## lm(formula = ImprovementScore ~ ConfrontationalGame * MusicCondition,
## data = performance_diff_d)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.5402 -0.6284 -0.0744 0.6253 2.8550
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) -0.1786 0.1895 -0.942
## ConfrontationalGameTRUE 0.2398 0.2760 0.869
## MusicConditionExciting 0.1603 0.2657 0.603
## MusicConditionNeutral 0.2926 0.2657 1.101
## ConfrontationalGameTRUE:MusicConditionExciting -0.0530 0.3815 -0.139
## ConfrontationalGameTRUE:MusicConditionNeutral -0.5786 0.3800 -1.523
## Pr(>|t|)
## (Intercept) 0.347
## ConfrontationalGameTRUE 0.386
## MusicConditionExciting 0.547
## MusicConditionNeutral 0.272
## ConfrontationalGameTRUE:MusicConditionExciting 0.890
## ConfrontationalGameTRUE:MusicConditionNeutral 0.130
##
## Residual standard error: 1.003 on 164 degrees of freedom
## (6 observations deleted due to missingness)
## Multiple R-squared: 0.02179, Adjusted R-squared: -0.008033
## F-statistic: 0.7306 on 5 and 164 DF, p-value: 0.6014