For this exercise, please try to reproduce the results from Experiment 1 of the associated paper (Ko, Sadler & Galinsky, 2015). The PDF of the paper is included in the same folder as this Rmd file.

Methods summary:

A sense of power has often been tied to how we perceive each other’s voice. Social hierarchy is embedded into the structure of society and provides a metric by which others relate to one another. In 1956, the Brunswik Lens Model was introduced to examine how vocal cues might influence hierarchy. In “The Sound of Power: Conveying and Detecting Hierarchical Rank Through Voice,” Ko and colleagues investigated how manipulation of hierarchal rank within a situation might impact vocal acoustic cues. Using the Brunswik Model, six acoustic metrics were utilized (pitch mean & variability, loudness mean & variability, and resonance mean & variability) to isolate a potential contribution between individuals of different hierarchal rank. In the first experiment, Ko, Sadler & Galinsky examined the vocal acoustic cues of individuals before and after being assigned a hierarchal rank in a sample of 161 subjects (80 male). Each of the six hierarchy acoustic cues were analyzed with a 2 (high vs. low rank condition) x 2 (male vs. female) analysis of covariance, controlling for the baseline of the respective acoustic cue.


Target outcomes:

Below is the specific result you will attempt to reproduce (quoted directly from the results section of Experiment 1):

The impact of hierarchical rank on speakers’ acoustic cues. Each of the six hierarchy-based (i.e., postmanipulation) acoustic variables was submitted to a 2 (condition: high rank, low rank) × 2 (speaker’s sex: female, male) between-subjects analysis of covariance, controlling for the corresponding baseline acoustic variable. Table 4 presents the adjusted means by condition. Condition had a significant effect on pitch, pitch variability, and loudness variability. Speakers’ voices in the high-rank condition had higher pitch, F(1, 156) = 4.48, p < .05; were more variable in loudness, F(1, 156) = 4.66, p < .05; and were more monotone (i.e., less variable in pitch), F(1, 156) = 4.73, p < .05, compared with speakers’ voices in the low-rank condition (all other Fs < 1; see the Supplemental Material for additional analyses of covariance involving pitch and loudness). (from Ko et al., 2015, p. 6; emphasis added)

The adjusted means for these analyses are reported in Table 4 (Table4_AdjustedMeans.png, included in the same folder as this Rmd file).


Step 1: Load packages

library(tidyverse) # for data munging
library(knitr) # for kable table formating
library(haven) # import and export 'SPSS', 'Stata' and 'SAS' Files
library(readxl) # import excel files

# #optional packages:
# library(psych)
# library(car) # for ANCOVA
# library(compute.es) # for ANCOVA
# library(lsmeans) # for ANCOVA

Step 2: Load data

# Just Experiment 1
d <-read_csv("data/S1_voice_level_Final.csv")
# DT::datatable(d)

Step 3: Tidy data

d <- subset(d, select = c('voice', 'form_smean', 'form_svar', 'intense_smean', 'intense_svar', 'pitch_smean', 'pitch_svar', 'sex', 'feelpower', 'plev', 'vsex', 'form_rmean', 'form_rvar', 'intense_rmean', 'intense_rvar', 'pitch_rmean', 'pitch_rvar') )

Step 4: Run analysis

Pre-processing

d_high <- d%>% 
  filter(plev == 1)

d_low <- d %>% 
  filter(plev == -1)

Descriptive statistics

In the paper, the adjusted means by condition are reported (see Table 4, or Table4_AdjustedMeans.png, included in the same folder as this Rmd file). Reproduce these values below:

mean(d$feelpower)
## [1] 4.335404
mean(d$plev)
## [1] 0.01863354
#feelpower mean based on group
high_mean <- mean(d_high$feelpower)
print(high_mean)
## [1] 5.207317
low_mean <- mean(d_low$feelpower)
print(low_mean)
## [1] 3.43038
#pitch mean based on group
high_pitch_mean <- mean(d_high$pitch_smean)
print(high_pitch_mean)
## [1] 155.9655
low_pitch_mean <- mean(d_low$pitch_smean)
print(low_pitch_mean)
## [1] 158.2399
#pitch variance mean based on group
high_pitchvar_mean <- mean(d_high$pitch_svar)
print(high_pitchvar_mean)
## [1] 1402.645
low_pitchvar_mean <- mean(d_low$pitch_svar)
print(low_pitchvar_mean)
## [1] 1677.756
#resonance variance mean based on group
high_formvar_mean <- mean(d_high$form_svar)
print(high_formvar_mean)
## [1] 42020.67
low_formvar_mean <- mean(d_low$form_svar)
print(low_formvar_mean)
## [1] 43837.42
#resonance mean based on group
high_form_mean <- mean(d_high$form_smean)
print(high_form_mean)
## [1] 1127.423
low_form_mean <- mean(d_low$form_smean)
print(low_form_mean)
## [1] 1131.193
#loudness variance mean based on group
high_intensevar_mean <- mean(d_high$intense_svar)
print(high_intensevar_mean)
## [1] 198.4641
low_intensevar_mean <- mean(d_low$intense_svar)
print(low_intensevar_mean)
## [1] 181.4738
#loudness mean based on group
high_intense_mean <- mean(d_high$intense_smean)
print(high_intense_mean)
## [1] 59.3642
low_intense_mean <- mean(d_low$intense_smean)
print(low_intense_mean)
## [1] 58.66591

Inferential statistics

The impact of hierarchical rank on speakers’ acoustic cues. Each of the six hierarchy-based (i.e., postmanipulation) acoustic variables was submitted to a 2 (condition: high rank, low rank) × 2 (speaker’s sex: female, male) between-subjects analysis of covariance, controlling for the corresponding baseline acoustic variable. […] Condition had a significant effect on pitch, pitch variability, and loudness variability. Speakers’ voices in the high-rank condition had higher pitch, F(1, 156) = 4.48, p < .05; were more variable in loudness, F(1, 156) = 4.66, p < .05; and were more monotone (i.e., less variable in pitch), F(1, 156) = 4.73, p < .05, compared with speakers’ voices in the low-rank condition (all other Fs < 1; see the Supplemental Material for additional analyses of covariance involving pitch and loudness).

# reproduce the above results here
# analysis of covariance
if(!require(emmeans)){install.packages("emmeans")}
library(emmeans)


# rank and pitch
fit = aov(pitch_smean ~ plev + sex + pitch_rmean, d)
summary(fit)
##              Df Sum Sq Mean Sq  F value Pr(>F)    
## plev          1    208     208    2.431  0.121    
## sex           1 246290  246290 2875.962 <2e-16 ***
## pitch_rmean   1  43143   43143  503.784 <2e-16 ***
## Residuals   157  13445      86                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#mean1 = aov(pitch_smean ~ plev + sex + pitch_rmean, d_high)
#marginal = emmeans(mean1, ~ pitch_rmean)
#print(marginal)
#summary(fit)


fit = aov(pitch_smean ~ plev * sex + pitch_rmean, d)
summary(fit)
##              Df Sum Sq Mean Sq  F value Pr(>F)    
## plev          1    208     208    2.456  0.119    
## sex           1 246290  246290 2905.557 <2e-16 ***
## pitch_rmean   1  43143   43143  508.969 <2e-16 ***
## plev:sex      1    222     222    2.616  0.108    
## Residuals   156  13223      85                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit = aov(pitch_smean ~ plev * sex * pitch_rmean, d)
summary(fit)
##                       Df Sum Sq Mean Sq  F value Pr(>F)    
## plev                   1    208     208    2.456 0.1192    
## sex                    1 246290  246290 2905.552 <2e-16 ***
## pitch_rmean            1  43143   43143  508.968 <2e-16 ***
## plev:sex               1    222     222    2.616 0.1079    
## plev:pitch_rmean       1    253     253    2.982 0.0862 .  
## sex:pitch_rmean        1      1       1    0.017 0.8969    
## plev:sex:pitch_rmean   1      0       0    0.001 0.9738    
## Residuals            153  12969      85                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# rank and variability of loudness
fit = aov(intense_svar ~ plev + sex + intense_rvar, d)
summary(fit)
##               Df Sum Sq Mean Sq F value  Pr(>F)    
## plev           1  11615   11615   7.738 0.00607 ** 
## sex            1  13100   13100   8.727 0.00362 ** 
## intense_rvar   1 184966  184966 123.222 < 2e-16 ***
## Residuals    157 235669    1501                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit = aov(intense_svar ~ plev * sex + intense_rvar, d)
summary(fit)
##               Df Sum Sq Mean Sq F value  Pr(>F)    
## plev           1  11615   11615   7.690 0.00623 ** 
## sex            1  13100   13100   8.673 0.00372 ** 
## intense_rvar   1 184966  184966 122.458 < 2e-16 ***
## plev:sex       1     40      40   0.026 0.87160    
## Residuals    156 235630    1510                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit = aov(intense_svar ~ plev * sex * intense_rvar, d)
summary(fit)
##                        Df Sum Sq Mean Sq F value  Pr(>F)    
## plev                    1  11615   11615   7.593 0.00657 ** 
## sex                     1  13100   13100   8.564 0.00395 ** 
## intense_rvar            1 184966  184966 120.917 < 2e-16 ***
## plev:sex                1     40      40   0.026 0.87241    
## plev:intense_rvar       1    495     495   0.324 0.57025    
## sex:intense_rvar        1    169     169   0.110 0.74040    
## plev:sex:intense_rvar   1    923     923   0.603 0.43854    
## Residuals             153 234043    1530                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# rank and less variability in pitch
fit = aov(pitch_svar ~ plev + sex + pitch_rvar, d)
summary(fit)
##              Df   Sum Sq  Mean Sq F value   Pr(>F)    
## plev          1  3045302  3045302   7.226  0.00796 ** 
## sex           1 37906358 37906358  89.940  < 2e-16 ***
## pitch_rvar    1 28136055 28136055  66.758 9.56e-14 ***
## Residuals   157 66169736   421463                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit = aov(pitch_svar ~ plev * sex + pitch_rvar, d)
summary(fit)
##              Df   Sum Sq  Mean Sq F value   Pr(>F)    
## plev          1  3045302  3045302   7.184  0.00815 ** 
## sex           1 37906358 37906358  89.418  < 2e-16 ***
## pitch_rvar    1 28136055 28136055  66.371 1.13e-13 ***
## plev:sex      1    37857    37857   0.089  0.76546    
## Residuals   156 66131879   423922                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit = aov(pitch_svar ~ plev * sex * pitch_rvar, d)
summary(fit)
##                      Df   Sum Sq  Mean Sq F value   Pr(>F)    
## plev                  1  3045302  3045302   7.488  0.00695 ** 
## sex                   1 37906358 37906358  93.208  < 2e-16 ***
## pitch_rvar            1 28136055 28136055  69.183 4.59e-14 ***
## plev:sex              1    37857    37857   0.093  0.76070    
## plev:pitch_rvar       1   406144   406144   0.999  0.31921    
## sex:pitch_rvar        1  3148508  3148508   7.742  0.00608 ** 
## plev:sex:pitch_rvar   1   354058   354058   0.871  0.35226    
## Residuals           153 62223169   406687                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Step 5: Reflection

Were you able to reproduce the results you attempted to reproduce? If not, what part(s) were you unable to reproduce?

I managed to get the mean values relatively close to the actual values. It seems like they mentioned adjusting the mean to a baseline and I was not sure how to do that, so the numbers are a little off. (I spent a while searching up online and eventually ran out of time) I also ran a series of analysis of covariance tests and got slightly different results. I tried different interactions to see if that made a difference since I’m not super sure which kind I should use. Overall, my ANCOVA tests showed that as the authors mention, rank does have a sinificant effect on pitch variability and loudness variability.

How difficult was it to reproduce your results?

This one took a while for me to understand what they were trying to do and also what each row meant. There were a lot of different rows and not much great explanation on how to manipulate them. I also found it chanllenging trying to figure out how to control for factors & adjust for factors.

What aspects made it difficult? What aspects made it easy?

I think I understood the concept they were going for, which helped with thinking about how to run everything. However, working with the numbers was time consuming and difficult because they were hard to comprehend and the instructions weren’t super clear in terms of analyzing the data.