Generosity vs Justice V6

Author

Marcus + Lizy + Nadia

Published

August 2, 2023

Overview and Methodology

  • Study of third party judgments of donors motivated by a justice or generosity virtue
  • Data collected August 2, 2023
  • N = 200

Setup

Libraries and functions

Code
knitr::opts_chunk$set(warning = FALSE, message = FALSE) 

Mypackages <-
  c("lme4","tidyverse","effects","ggplot2","psych",
    "MASS","Rmisc","lmerTest","ggthemes", "knitr",
    "lsmeans","pastecs","sjstats","car","ordinal",
    "Rcpp","corrplot", "ggpubr", "EnvStats",
    "easyStats", "cowplot","see","datawizard", "ggcorrplot", "RColorBrewer")

#install.packages(Mypackages) #you must remove the # in this comment if you need to install the packages! 
lapply(Mypackages,
       require,
       character.only = TRUE)

options(knitr.kable.NA = '—')
set.seed(1)  

Load Data

Code
# read in data files
gjg <-read.csv("/Users/mtrenfield17/Desktop/Research/Boston College Research/Morality Lab Research/Generosity Vs Justice Project/just_vs_gen_v6/Gen_Just_V6 (1).csv")

Reshaping data

Code
# fixing coding error
gjg$vigFirstVirtue <- ifelse(gjg$vigOrder == "justiceCommitFirst", "justice",
                             ifelse(gjg$vigOrder == "genCommitFirst", "generosity",
                                    ifelse(gjg$vigOrder == "justiceValueFirst", "justice",
                                           ifelse(gjg$vigOrder == "genValueFirst", "generosity", NA))))

gjg$vigSecondVirtue <- ifelse(gjg$vigOrder == "justiceCommitFirst", "generosity",
                             ifelse(gjg$vigOrder == "genCommitFirst", "justice",
                                    ifelse(gjg$vigOrder == "justiceValueFirst", "generosity",
                                           ifelse(gjg$vigOrder == "genValueFirst", "justice", NA))))

# changing appropriate DVs to numeric
cols_to_convert <- c("age", "income", "ses", "political_overall", "political_social", "political_economic", "attn_self", "pid")
gjg[cols_to_convert] <- lapply(gjg[cols_to_convert], as.numeric)

gjg$reputation_signal_just <- NA
gjg$reputation_signal_gen <- NA

gjg$reputation_signal_just <- ifelse(gjg$vigFirstVirtue == "justice", gjg$reputation_signal_1, gjg$reputation_signal_2)
gjg$reputation_signal_gen <- ifelse(gjg$vigFirstVirtue == "justice", gjg$reputation_signal_2, gjg$reputation_signal_1)

convert_vigOrder_columns <- function(data, column_just, column_gen, vigFirstVirtue_col) {
  # Create new columns for "_just" and "_gen"
  data[[column_just]] <- ifelse(data[[vigFirstVirtue_col]] == "justice",
                                data[[paste0(column_just, "_1")]], data[[paste0(column_just, "_2")]])
  data[[column_gen]] <- ifelse(data[[vigFirstVirtue_col]] == "justice",
                               data[[paste0(column_just, "_2")]], data[[paste0(column_just, "_1")]])

  # Replace missing values with NA
  data[[column_just]][is.na(data[[column_just]])] <- NA
  data[[column_gen]][is.na(data[[column_gen]])] <- NA

  # Remove "_1" and "_2" from the column names
  names(data[[column_just]]) <- gsub("_1$", "_just", names(data[[column_just]]))
  names(data[[column_gen]]) <- gsub("_2$", "_gen", names(data[[column_gen]]))

  # Return the modified data frame
  return(data)
}

gjg <- convert_vigOrder_columns(gjg, "norm_signal", "norm_signal_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "norm_signal"] <- "norm_signal_just"
gjg <- convert_vigOrder_columns(gjg, "approval", "approval_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "approval"] <- "approval_just"
gjg <- convert_vigOrder_columns(gjg, "moral", "moral_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "moral"] <- "moral_just"
gjg <- convert_vigOrder_columns(gjg, "genuine", "genuine_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "genuine"] <- "genuine_just"
gjg <- convert_vigOrder_columns(gjg, "deliberate", "deliberate_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "deliberate"] <- "deliberate_just"
gjg <- convert_vigOrder_columns(gjg, "spontaneous", "spontaneous_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "spontaneous"] <- "spontaneous_just"
gjg <- convert_vigOrder_columns(gjg, "emotion", "emotion_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "emotion"] <- "emotion_just"
gjg <- convert_vigOrder_columns(gjg, "logic", "logic_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "logic"] <- "logic_just"
gjg <- convert_vigOrder_columns(gjg, "quick", "quick_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "quick"] <- "quick_just"
gjg <- convert_vigOrder_columns(gjg, "slow", "slow_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "slow"] <- "slow_just"
gjg <- convert_vigOrder_columns(gjg, "warm", "warm_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "warm"] <- "warm_just"
gjg <- convert_vigOrder_columns(gjg, "good.natured", "good.natured_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "good.natured"] <- "good.natured_just"
gjg <- convert_vigOrder_columns(gjg, "tolerant", "tolerant_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "tolerant"] <- "tolerant_just"
gjg <- convert_vigOrder_columns(gjg, "sincere", "sincere_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "sincere"] <- "sincere_just"
gjg <- convert_vigOrder_columns(gjg, "competent", "competent_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "competent"] <- "competent_just"
gjg <- convert_vigOrder_columns(gjg, "confident", "confident_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "confident"] <- "confident_just"
gjg <- convert_vigOrder_columns(gjg, "independent", "independent_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "independent"] <- "independent_just"
gjg <- convert_vigOrder_columns(gjg, "competitive", "competitive_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "competitive"] <- "competitive_just"
gjg <- convert_vigOrder_columns(gjg, "intelligent", "intelligent_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "intelligent"] <- "intelligent_just"
gjg <- convert_vigOrder_columns(gjg, "politics", "politics_gen", "vigFirstVirtue")
names(gjg)[names(gjg) == "politics"] <- "politics_just"

Attention check

Code
# filtering out failures/nonresponses to attention checks
length(gjg$pid)
gjg <- gjg %>%
  filter(attn_self>2)
length(gjg$pid)

Demographics

Code
# Subset your data frame to include only the demographic columns
numeric_demos <- gjg[,c("age", "income", "ses", "political_social", "political_economic")]

# descriptive stats for numeric demos
describeBy(numeric_demos)

gjg$gender <- as.factor(as.character(gjg$gender))
levels(gjg$gender)
table(gjg$gender)
gjg$gender <- ifelse(gjg$gender == 1, "Man",
                     ifelse(gjg$gender == 2, "Woman",
                            ifelse(gjg$gender == 3, "Nonbinary person or Other",
                                   ifelse(gjg$gender == 4, NA, NA))))
prop.table(table(gjg$gender, useNA="always"))

gjg$race<-as.factor(gjg$race)
levels(gjg$race)
table(gjg$race)
gjg$race <- ifelse(gjg$race == 1, "American Indian or Alaskan Native",
                  ifelse(gjg$race == 2, "Asian",
                         ifelse(gjg$race == 3, "Black",
                                ifelse(gjg$race == 100, "Middle Eastern",
                                       ifelse(gjg$race == 4, "Native Hawaiian or Other Pacific Islander",
                                              ifelse(gjg$race == 5, "White",
                                                     ifelse(gjg$race == 6, "Latinx",
                                                            ifelse(gjg$race == 7 | gjg$race == 99, "Unlisted",
                                                                   ifelse(gjg$race == "", "Unlisted", 
                                                                          ifelse(grepl(",", gjg$race), "Multiracial", NA))))))))))
gjg$race<-as.factor(gjg$race)
levels(gjg$race)
table(gjg$race)
prop.table(table(gjg$race))

gjg$income <- as.factor(as.character(gjg$income))
levels(gjg$income)
table(gjg$income)
gjg$income <- ifelse(gjg$income == 1, "<$10,000",
                     ifelse(gjg$income == 2, "$10,000-$19,999",
                            ifelse(gjg$income == 3, "$20,000-$29,999",
                                   ifelse(gjg$income == 4, "$30,000-$39,999",
                                          ifelse(gjg$income == 5, "$40,000-$49,999",
                                                 ifelse(gjg$income == 6, "$50,000-$74,999",
                                                        ifelse(gjg$income == 7, "$75,000-$99,999",
                                                               ifelse(gjg$income == 8, "$100,000-$149,999", 
                                                                      ifelse(gjg$income == 9, ">$150,000", NA)))))))))
prop.table(table(gjg$income, useNA="always"))

gjg$education <- as.factor(as.character(gjg$education))
levels(gjg$education)
table(gjg$education)
gjg$education <- ifelse(gjg$education == 1, "Less than a high school diploma",
                     ifelse(gjg$education == 2, "High school degree or equivalent",
                            ifelse(gjg$education == 3, "Some college, no degree",
                                   ifelse(gjg$education == 4, "Associate Degree",
                                          ifelse(gjg$education == 5, "Bachelor's Degree",
                                                 ifelse(gjg$education == 6, "Postgraduate Degree", NA))))))
prop.table(table(gjg$education, useNA="always"))

gjg$political_party <- as.factor(as.character(gjg$political_party))
levels(gjg$political_party)
table(gjg$political_party)
gjg$political_party <- ifelse(gjg$political_party == 1, "Republican",
                              ifelse(gjg$political_party == 2, "Democrat",
                                     ifelse(gjg$political_party == 3, "Independent",
                                            ifelse(gjg$political_party == 4, "Something else", NA))))
prop.table(table(gjg$political_party, useNA="always"))

# Create composite political measures
gjg$polit_self <- ifelse(gjg$political_overall %in% c(1, 2, 3), "Democrat",
                         ifelse(gjg$political_overall == 4, "Moderate",
                                ifelse(gjg$political_overall %in% c(5, 6, 7), "Republican", NA)))

Correlation

Code
cols_to_convert <- c("reputation_signal_just", "reputation_signal_gen", "norm_signal_just", "norm_signal_gen", "approval_just", "approval_gen", "moral_just", "moral_gen", "genuine_just", "genuine_gen", "deliberate_just", "deliberate_gen", "spontaneous_just", "spontaneous_gen", "emotion_just", "emotion_gen", "logic_just", "logic_gen", "quick_just", "quick_gen", "slow_just", "slow_gen", "warm_just", "warm_gen", "good.natured_just", "good.natured_gen", "tolerant_just", "tolerant_gen", "sincere_just", "sincere_gen", "competent_just", "competent_gen", "confident_just", "confident_gen", "independent_just", "independent_gen", "competitive_just", "competitive_gen", "intelligent_just", "intelligent_gen", "politics_just", "politics_gen", "age", "ses", "political_overall", "political_social", "political_economic")
names(gjg)
  [1] "pid"                    "reputation_signal_1"    "reputation_signal_2"   
  [4] "norm_signal_1"          "norm_signal_2"          "approval_1"            
  [7] "approval_2"             "moral_1"                "moral_2"               
 [10] "genuine_1"              "genuine_2"              "deliberate_1"          
 [13] "deliberate_2"           "spontaneous_1"          "spontaneous_2"         
 [16] "emotion_1"              "emotion_2"              "logic_1"               
 [19] "logic_2"                "quick_1"                "quick_2"               
 [22] "slow_1"                 "slow_2"                 "warm_1"                
 [25] "warm_2"                 "good.natured_1"         "good.natured_2"        
 [28] "tolerant_1"             "tolerant_2"             "sincere_1"             
 [31] "sincere_2"              "competent_1"            "competent_2"           
 [34] "confident_1"            "confident_2"            "independent_1"         
 [37] "independent_2"          "competitive_1"          "competitive_2"         
 [40] "intelligent_1"          "intelligent_2"          "politics_1"            
 [43] "politics_2"             "age"                    "gender"                
 [46] "race"                   "income"                 "education"             
 [49] "ses"                    "political_party"        "political_party_4_TEXT"
 [52] "political_overall"      "political_social"       "political_economic"    
 [55] "openFeedback"           "confusion"              "hypothesis"            
 [58] "attn_self"              "strange"                "believe"               
 [61] "vigOrder"               "vigFirstVirtue"         "vigSecondVirtue"       
 [64] "nameOne"                "nameTwo"                "reputation_signal_just"
 [67] "reputation_signal_gen"  "norm_signal_just"       "norm_signal_gen"       
 [70] "approval_just"          "approval_gen"           "moral_just"            
 [73] "moral_gen"              "genuine_just"           "genuine_gen"           
 [76] "deliberate_just"        "deliberate_gen"         "spontaneous_just"      
 [79] "spontaneous_gen"        "emotion_just"           "emotion_gen"           
 [82] "logic_just"             "logic_gen"              "quick_just"            
 [85] "quick_gen"              "slow_just"              "slow_gen"              
 [88] "warm_just"              "warm_gen"               "good.natured_just"     
 [91] "good.natured_gen"       "tolerant_just"          "tolerant_gen"          
 [94] "sincere_just"           "sincere_gen"            "competent_just"        
 [97] "competent_gen"          "confident_just"         "confident_gen"         
[100] "independent_just"       "independent_gen"        "competitive_just"      
[103] "competitive_gen"        "intelligent_just"       "intelligent_gen"       
[106] "politics_just"          "politics_gen"           "polit_self"            
Code
gjg[cols_to_convert] <- lapply(gjg[cols_to_convert], as.numeric)

DVs <- gjg[c("reputation_signal_just","reputation_signal_gen","norm_signal_just","norm_signal_gen","approval_just","approval_gen","moral_just","moral_gen","genuine_just","genuine_gen","deliberate_just","deliberate_gen","spontaneous_just","spontaneous_gen","emotion_just","emotion_gen","logic_just","logic_gen","quick_just","quick_gen","slow_just","slow_gen","warm_just","warm_gen","good.natured_just","good.natured_gen","tolerant_just","tolerant_gen","sincere_just","sincere_gen","competent_just","competent_gen","confident_just","confident_gen", "independent_just","independent_gen","competitive_just","competitive_gen","intelligent_just","intelligent_gen", "politics_just", "politics_gen", "age", "ses", "political_overall", "political_social", "political_economic")]

# Compute pairwise correlations
corr_DVs <- cor(DVs, use = "pairwise.complete.obs")

# Plot the correlation matrix
corrplot(corr_DVs, is.corr = TRUE, type = "lower", lower = "circle", tl.cex = 0.7, insig = "label_sig", diag = TRUE)

Code
# New columns for composite of warmth and competence
gjg <- gjg %>%
  mutate(warmth_just=(warm_just+good.natured_just+tolerant_just+sincere_just)/4)%>%
  mutate(warmth_gen=(warm_gen+good.natured_gen+tolerant_gen+sincere_gen)/4)%>%
  mutate(competence_just=(competent_just+confident_just+independent_just+competitive_just+
                            intelligent_just)/5)%>%
  mutate(competence_gen=(competent_gen+confident_gen+independent_gen+competitive_gen+
                            intelligent_gen)/5)

# DVs 2
DVs_2 <- gjg[c("reputation_signal_just","reputation_signal_gen","norm_signal_just","norm_signal_gen","approval_just","approval_gen","moral_just","moral_gen","genuine_just","genuine_gen","deliberate_just","deliberate_gen","spontaneous_just","spontaneous_gen","emotion_just","emotion_gen","logic_just","logic_gen","quick_just","quick_gen","slow_just","slow_gen","warmth_just","warmth_gen","competence_just","competence_gen", "politics_just", "politics_gen", "age", "ses", "political_overall", "political_social", "political_economic")]

# Compute pairwise correlations
corr_DVs_2 <- cor(DVs_2, use = "pairwise.complete.obs")

# Plot the correlation matrix
corrplot(corr_DVs_2, is.corr = TRUE, type = "lower", lower = "circle", tl.cex = 0.7, insig = "label_sig", diag = TRUE)

Code
# DVs just
DVs_just <- gjg[c("reputation_signal_just","norm_signal_just", "approval_just", "moral_just", "genuine_just", "deliberate_just", "spontaneous_just", "emotion_just", "logic_just", "quick_just", "slow_just", "warm_just", "good.natured_just", "tolerant_just", "sincere_just", "competent_just", "confident_just", "independent_just", "competitive_just", "intelligent_just", "warmth_just", "competence_just","politics_just", "age", "ses", "political_overall", "political_social", "political_economic")]

# Compute pairwise correlations
corr_DVs_just <- cor(DVs_just, use = "pairwise.complete.obs")

# Plot the correlation matrix
corrplot(corr_DVs_just, is.corr = TRUE, type = "lower", lower = "circle", tl.cex = 0.7, insig = "label_sig", diag = TRUE)

Code
# DVs gen
DVs_gen <- gjg[c("reputation_signal_gen","norm_signal_gen", "approval_gen", "moral_gen", "genuine_gen", "deliberate_gen", "spontaneous_gen", "emotion_gen", "logic_gen", "quick_gen", "slow_gen", "warm_gen", "good.natured_gen", "tolerant_gen", "sincere_gen", "competent_gen", "confident_gen", "independent_gen", "competitive_gen", "intelligent_gen", "warmth_gen", "competence_gen","politics_gen", "age", "ses", "political_overall", "political_social", "political_economic")]

# Compute pairwise correlations
corr_DVs_gen <- cor(DVs_gen, use = "pairwise.complete.obs")

# Plot the correlation matrix
corrplot(corr_DVs_gen, is.corr = TRUE, type = "lower", lower = "circle", tl.cex = 0.7, insig = "label_sig", diag = TRUE)

Code
# DVs collapsed

# renaming DVs with underscores in name
gjg <- gjg %>%
  dplyr::rename("reputationSignal_just"="reputation_signal_just",
         "reputationSignal_gen"="reputation_signal_gen",
         "normSignal_just"="norm_signal_just", 
         "normSignal_gen"="norm_signal_gen")

gjg_long<-gjg %>% gather(DV, resp, "reputationSignal_just","reputationSignal_gen","normSignal_just","normSignal_gen","approval_just","approval_gen","moral_just","moral_gen","genuine_just","genuine_gen","deliberate_just","deliberate_gen","spontaneous_just","spontaneous_gen","emotion_just","emotion_gen","logic_just","logic_gen","quick_just","quick_gen","slow_just","slow_gen","warm_just","warm_gen","good.natured_just","good.natured_gen","tolerant_just","tolerant_gen","sincere_just","sincere_gen","competent_just","competent_gen","confident_just","confident_gen", "independent_just","independent_gen","competitive_just","competitive_gen","intelligent_just","intelligent_gen","warmth_just","warmth_gen","competence_just","competence_gen", "politics_just", "politics_gen")

gjg_long<-gjg_long %>%
  separate(DV, into= c("DV", "motive"), sep="_")
gjg_long <- spread(gjg_long, DV, resp)

DVs_col <- gjg_long[c("reputationSignal","normSignal", "approval", "moral", "genuine", "deliberate", "spontaneous", "emotion", "logic", "quick", "slow", "warm", "good.natured", "tolerant", "sincere", "competent", "confident", "independent", "competitive", "intelligent", "warmth", "competence","politics", "age", "ses", "political_overall", "political_social", "political_economic")]

# Compute pairwise correlations
corr_DVs_col <- cor(DVs_col, use = "pairwise.complete.obs")

# Plot the correlation matrix
corrplot(corr_DVs_col, is.corr = TRUE, type = "lower", lower = "circle", tl.cex = 0.7, insig = "label_sig", diag = TRUE)

Changing to long format

Code
# splitting data into gen and just motives
names(gjg)[names(gjg) == "reputation_signal_1"] <- "reputationSignal1"
names(gjg)[names(gjg) == "reputation_signal_2"] <- "reputationSignal2"
names(gjg)[names(gjg) == "norm_signal_1"] <- "normSignal1"
names(gjg)[names(gjg) == "norm_signal_2"] <- "normSignal2"
names(gjg)[names(gjg) == "approval_1"] <- "approval1"
names(gjg)[names(gjg) == "approval_2"] <- "approval2"
names(gjg)[names(gjg) == "moral_1"] <- "moral1"
names(gjg)[names(gjg) == "moral_2"] <- "moral2"
names(gjg)[names(gjg) == "genuine_1"] <- "genuine1"
names(gjg)[names(gjg) == "genuine_2"] <- "genuine2"
names(gjg)[names(gjg) == "deliberate_1"] <- "deliberate1"
names(gjg)[names(gjg) == "deliberate_2"] <- "deliberate2"
names(gjg)[names(gjg) == "spontaneous_1"] <- "spontaneous1"
names(gjg)[names(gjg) == "spontaneous_2"] <- "spontaneous2"
names(gjg)[names(gjg) == "emotion_1"] <- "emotion1"
names(gjg)[names(gjg) == "emotion_2"] <- "emotion2"
names(gjg)[names(gjg) == "logic_1"] <- "logic1"
names(gjg)[names(gjg) == "logic_2"] <- "logic2"
names(gjg)[names(gjg) == "quick_1"] <- "quick1"
names(gjg)[names(gjg) == "quick_2"] <- "quick2"
names(gjg)[names(gjg) == "slow_1"] <- "slow1"
names(gjg)[names(gjg) == "slow_2"] <- "slow2"
names(gjg)[names(gjg) == "warm_1"] <- "warm1"
names(gjg)[names(gjg) == "warm_2"] <- "warm2"
names(gjg)[names(gjg) == "good.natured_1"] <- "good.natured1"
names(gjg)[names(gjg) == "good.natured_2"] <- "good.natured2"
names(gjg)[names(gjg) == "tolerant_1"] <- "tolerant1"
names(gjg)[names(gjg) == "tolerant_2"] <- "tolerant2"
names(gjg)[names(gjg) == "sincere_1"] <- "sincere1"
names(gjg)[names(gjg) == "sincere_2"] <- "sincere2"
names(gjg)[names(gjg) == "competent_1"] <- "competent1"
names(gjg)[names(gjg) == "competent_2"] <- "competent2"
names(gjg)[names(gjg) == "confident_1"] <- "confident1"
names(gjg)[names(gjg) == "confident_2"] <- "confident2"
names(gjg)[names(gjg) == "independent_1"] <- "independent1"
names(gjg)[names(gjg) == "independent_2"] <- "independent2"
names(gjg)[names(gjg) == "competitive_1"] <- "competitive1"
names(gjg)[names(gjg) == "competitive_2"] <- "competitive2"
names(gjg)[names(gjg) == "intelligent_1"] <- "intelligent1"
names(gjg)[names(gjg) == "intelligent_2"] <- "intelligent2"
names(gjg)[names(gjg) == "politics_1"] <- "politics1"
names(gjg)[names(gjg) == "politics_2"] <- "politics2"

gjg_long<-gjg %>% gather(DV, resp, "reputationSignal_just","reputationSignal_gen","normSignal_just","normSignal_gen","approval_just","approval_gen","moral_just","moral_gen","genuine_just","genuine_gen","deliberate_just","deliberate_gen","spontaneous_just","spontaneous_gen","emotion_just","emotion_gen","logic_just","logic_gen","quick_just","quick_gen","slow_just","slow_gen","warm_just","warm_gen","good.natured_just","good.natured_gen","tolerant_just","tolerant_gen","sincere_just","sincere_gen","competent_just","competent_gen","confident_just","confident_gen", "independent_just","independent_gen","competitive_just","competitive_gen","intelligent_just","intelligent_gen","warmth_just","warmth_gen","competence_just","competence_gen", "politics_just", "politics_gen")

gjg_long<-gjg_long %>%
  separate(DV, into= c("DV", "motive"), sep="_")
gjg_long <- spread(gjg_long, DV, resp)

Political Perceptions

No significance.

Code
plot_cooker7 <- function(dv, iv, Title, x_axis_labs, y_label, sample_size) {
  part1 <- ggviolin(gjg_long, x = dv, y = iv, color = dv,
                    alpha = 0.1, fill = dv, xlab = "Motive",
                    trim = TRUE, ylab = y_label) +
    stat_summary(fun.data = "mean_cl_normal", geom = "crossbar", fatten = 1) +
    scale_y_continuous(breaks = c(1:7)) +
    labs(title = paste0(Title, " (n = ", sample_size, ")")) +
    scale_x_discrete(labels = x_axis_labs) +
    theme(panel.background = element_rect(fill = "transparent"), 
          legend.position = "right",  ## Consider “gray97” for fill
          plot.title = element_text(face = "bold", hjust = 0.5, size = 16), 
          plot.subtitle = element_text(hjust = 0.5),
          panel.grid.major.y = element_line(color='grey75'), 
          axis.text.x = element_text(face = "plain", size = 13, color = "black"),
          axis.text.y = element_text(face = "plain", size = 13, color = "black"),
          axis.title.y = element_text(face = "plain", size = 13, color = "black", 
                                       margin = margin(t = 0, r = 10, b = 0, l = 0)), ## lower X axis title
          panel.border = element_rect(color = "black", fill = NA, size = 1))
  ggpar(part1, legend = "none")
}

percep_plot_list <- list(plot_cooker7("motive", "politics", "Donor Politics", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Donor Politics", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_politics <- lmer(politics ~ motive + (1 | pid), data = gjg_long)
summary(mod_politics)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: politics ~ motive + (1 | pid)
   Data: gjg_long

REML criterion at convergence: 1479.6

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7457 -0.9751  0.1487  0.7802  2.1636 

Random effects:
 Groups   Name        Variance Std.Dev.
 pid      (Intercept) 0.07209  0.2685  
 Residual             2.36585  1.5381  
Number of obs: 396, groups:  pid, 198

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)   3.5960     0.1110 393.6558  32.407   <2e-16 ***
motivejust    0.1566     0.1546 197.0000   1.013    0.312    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
           (Intr)
motivejust -0.697
Code
# effect size = 0.102
d <- 0.1566 / sqrt(2.366)

# by own politics

mod_politics2 <- lmer(politics ~ motive * polit_self + (1 | pid), data = gjg_long)
summary(mod_politics2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: politics ~ motive * polit_self + (1 | pid)
   Data: gjg_long

REML criterion at convergence: 1477.1

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.98721 -0.87324  0.08286  0.73389  2.22282 

Random effects:
 Groups   Name        Variance Std.Dev.
 pid      (Intercept) 0.07662  0.2768  
 Residual             2.35099  1.5333  
Number of obs: 396, groups:  pid, 198

Fixed effects:
                                 Estimate Std. Error        df t value Pr(>|t|)
(Intercept)                       3.53271    0.15063 389.61185  23.454   <2e-16
motivejust                        0.05607    0.20963 194.99999   0.267    0.789
polit_selfModerate               -0.10771    0.28875 389.61185  -0.373    0.709
polit_selfRepublican              0.33003    0.26512 389.61185   1.245    0.214
motivejust:polit_selfModerate     0.64393    0.40186 194.99999   1.602    0.111
motivejust:polit_selfRepublican  -0.11490    0.36897 194.99999  -0.311    0.756
                                   
(Intercept)                     ***
motivejust                         
polit_selfModerate                 
polit_selfRepublican               
motivejust:polit_selfModerate      
motivejust:polit_selfRepublican    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) mtvjst plt_sM plt_sR mtv:_M
motivejust  -0.696                            
plt_slfMdrt -0.522  0.363                     
plt_slfRpbl -0.568  0.395  0.296              
mtvjst:pl_M  0.363 -0.522 -0.696 -0.206       
mtvjst:pl_R  0.395 -0.568 -0.206 -0.696  0.296

Factor Analyses

Confirmatory Factor Analysis for V3 Factors, 6 Factor

These 6 factors are a reasonably good fit.

Code
gjg_long3 <- gjg_long[, ! names(gjg_long) %in% c("attn_bucket","gender_text","race_text","income_text","education_text","political_party_text","political_party_4_TEXT","openFeedback","confusion","attn_self","polit_comp","pid","age","gender","race","income","education","ses","political_party","political_social","political_economic","warmth","competence","motive","political_overall","reputationSignal1","reputationSignal2","normSignal1","normSignal2","approval1","approval2","moral1","moral2","genuine1","genuine2","deliberate1","deliberate2","spontaneous1","spontaneous2","emotion1","emotion2","logic1","logic2","quick1","quick2","slow1","slow2","warm1","warm2","good.natured1","good.natured2","tolerant1","tolerant2","sincere1","sincere2","competent1","competent2","confident1","confident2", "independent1","independent2","competitive1","competitive2","intelligent1","intelligent2","warmth1","warmth2","competence1","competence2", "politics1", "politics2", "diffOrgPolit1", "diffOrgPolit2", "political_party_4_TEXT", "vigOrder", "firstSentence", "secondSentence", "vigFirstVirtue", "vigSecondVirtue", "nameOne", "nameTwo", "sameOrg", "sameOrgPolit", "diffOrgPolit", "politics", "polit_self", "hypothesis", "strange", "believe")]


write.csv(cor(gjg_long3)>0.8, file="Suspect_Correlations.csv")
write.csv(cor(gjg_long3), file="Correlation_Values.csv")
#install.packages("lavaan")
library(lavaan)
path <- '
f1 =~ warm + good.natured + tolerant + sincere
f2 =~ logic + independent + intelligent + confident + competent
f3 =~ approval + moral + genuine
f4 =~ reputationSignal
f5 =~ quick + spontaneous
f6 =~ emotion
'
model <- cfa(path, data= gjg_long3)
summary(model, fit.measures=TRUE)

Exploratory Factor Analysis, 5 Factor

Code
#KMO test
KMO(gjg_long3)
cortest.bartlett(gjg_long3)
#reject the null
ev <- eigen(cor(gjg_long3)) 
ev$values
scree(gjg_long3, pc=FALSE)

Code
fa.parallel(gjg_long3, fa="fa")

Code
Nfacs <- 5
fit <- factanal(gjg_long3, Nfacs, rotation="promax")
print(fit, digits=2, cutoff=0.3, sort=TRUE)
#diagram
loads <- fit$loadings
fa.diagram(loads)

Linear Mixed Effects Models

Code
# new columns for Factor 2-competence (plus logic, minus competitive), Factor 3-moral goodness (approval, moral, genuine), Factor 3-warmth (minus sincere), Factor 5-decision speed (quick, spontaneous)
gjg <- gjg %>%
  mutate(competence2_just=(competent_just+confident_just+independent_just+logic_just+
                            intelligent_just)/5)%>%
  mutate(competence2_gen=(competent_gen+confident_gen+independent_gen+logic_gen+
                            intelligent_gen)/5)%>%
  mutate(moralGoodness2_just=(approval_just+moral_just+genuine_just)/3)%>%
  mutate(moralGoodness2_gen=(approval_gen+moral_gen+genuine_gen)/3) %>%
  mutate(decisionSpeed_just=(quick_just+spontaneous_just)/2)%>%
  mutate(decisionSpeed_gen=(quick_gen+spontaneous_gen)/2)

gjg_long<-gjg %>% gather(DV, resp, "reputationSignal_just","reputationSignal_gen","normSignal_just","normSignal_gen","approval_just","approval_gen","moral_just","moral_gen","genuine_just","genuine_gen","deliberate_just","deliberate_gen","spontaneous_just","spontaneous_gen","emotion_just","emotion_gen","logic_just","logic_gen","quick_just","quick_gen","slow_just","slow_gen","warm_just","warm_gen","good.natured_just","good.natured_gen","tolerant_just","tolerant_gen","sincere_just","sincere_gen","competent_just","competent_gen","confident_just","confident_gen", "independent_just","independent_gen","competitive_just","competitive_gen","intelligent_just","intelligent_gen","warmth_just","warmth_gen","competence_just","competence_gen","competence2_just","competence2_gen","moralGoodness2_just","moralGoodness2_gen","decisionSpeed_just","decisionSpeed_gen")

# splitting data into gen and just motives
gjg_long<-gjg_long %>%
  separate(DV, into= c("DV", "motive"), sep="_")
gjg_long <- spread(gjg_long, DV, resp)  

Mixed Effects Model Warmth (Factor 1)

No significance.

Code
plot_cooker <- function(dv, iv, Title, x_axis_labs, y_label, sample_size) {
  part1 <- ggviolin(gjg_long, x = dv, y = iv, color = dv,
                    alpha = 0.1, fill = dv, xlab = "Motive",
                    trim = TRUE, ylab = y_label) +
    stat_summary(fun.data = "mean_cl_normal", geom = "crossbar", fatten = 1) +
    scale_y_continuous(breaks = c(1:5)) +
    labs(title = paste0(Title, " (n = ", sample_size, ")")) +
    scale_x_discrete(labels = x_axis_labs) +
    theme(panel.background = element_rect(fill = "transparent"), 
          legend.position = "right",  ## Consider “gray97” for fill
          plot.title = element_text(face = "bold", hjust = 0.5, size = 16), 
          plot.subtitle = element_text(hjust = 0.5),
          panel.grid.major.y = element_line(color='grey75'), 
          axis.text.x = element_text(face = "plain", size = 13, color = "black"),
          axis.text.y = element_text(face = "plain", size = 13, color = "black"),
          axis.title.y = element_text(face = "plain", size = 13, color = "black", 
                                       margin = margin(t = 0, r = 10, b = 0, l = 0)), ## lower X axis title
          panel.border = element_rect(color = "black", fill = NA, size = 1))
  ggpar(part1, legend = "none")
}

percep_plot_list <- list(plot_cooker("motive", "warmth", "Warmth", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 1 (Warmth)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_warmth <- lmer(warmth ~ motive + (1 | pid), data = gjg_long)
summary(mod_warmth)

Mixed Effects Model Competence (Factor 2)

Just donors are perceived to be significantly more competent than generous donors.

Code
percep_plot_list <- list(plot_cooker("motive", "competence2", "Competence", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 2 (Competence)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_competence <- lmer(competence2 ~ motive + (1 | pid), data = gjg_long)
summary(mod_competence)

Mixed Effects Model Moral Goodness (Factor 3)

Just donors are perceived to be significantly more morally good than generous donors.

Code
percep_plot_list <- list(plot_cooker("motive", "moralGoodness2", "Moral Goodness", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 3 (Moral Goodness)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_moralGoodness <- lmer(moralGoodness2 ~ motive + (1 | pid), data = gjg_long)
summary(mod_moralGoodness)

Mixed Effects Model Reputation Signaling (Factor 4)

Generous donors are perceived to be engaging in reputation signaling significantly more than just donors.

Code
percep_plot_list <- list(plot_cooker("motive", "reputationSignal", "Reputation Signaling", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 4 (Reputation Signaling)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_reputationSignal<- lmer(reputationSignal ~ motive + (1 | pid), data = gjg_long)
summary(mod_reputationSignal)

Mixed Effects Model Decision Speed (Factor 5)

No significance.

Code
percep_plot_list <- list(plot_cooker("motive", "decisionSpeed", "Decision Speed", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 5 (Decision Speed)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_decisionSpeed<- lmer(decisionSpeed ~ motive + (1 | pid), data = gjg_long)
summary(mod_decisionSpeed)

Mixed Effects Model Emotion (Factor 6)

Just donors are perceived to donate based on emotion significantly more than generous donors.

Code
percep_plot_list <- list(plot_cooker("motive", "emotion", "Emotion", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 6 (Emotion)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_emotion<- lmer(emotion ~ motive + (1 | pid), data = gjg_long)
summary(mod_emotion)

Mixed Effects Model Norm Signaling

Just donors are perceived to engage in norm signaling significantly more than generous donors.

Code
percep_plot_list <- list(plot_cooker("motive", "normSignal", "Norm Signaling", c("justice","generosity")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Norm Signaling", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_normSignal<- lmer(normSignal ~ motive + (1 | pid), data = gjg_long)
summary(mod_normSignal)

Effects of Sentence Type

Code
# making new columns for commit and value

names(gjg)[names(gjg) == "reputationSignal1"] <- "reputationSignal_1"
names(gjg)[names(gjg) == "reputationSignal2"] <- "reputationSignal_2"
names(gjg)[names(gjg) == "normSignal1"] <- "normSignal_1"
names(gjg)[names(gjg) == "normSignal2"] <- "normSignal_2"
names(gjg)[names(gjg) == "approval1"] <- "approval_1"
names(gjg)[names(gjg) == "approval2"] <- "approval_2"
names(gjg)[names(gjg) == "moral1"] <- "moral_1"
names(gjg)[names(gjg) == "moral2"] <- "moral_2"
names(gjg)[names(gjg) == "genuine1"] <- "genuine_1"
names(gjg)[names(gjg) == "genuine2"] <- "genuine_2"
names(gjg)[names(gjg) == "deliberate1"] <- "deliberate_1"
names(gjg)[names(gjg) == "deliberate2"] <- "deliberate_2"
names(gjg)[names(gjg) == "spontaneous1"] <- "spontaneous_1"
names(gjg)[names(gjg) == "spontaneous2"] <- "spontaneous_2"
names(gjg)[names(gjg) == "emotion1"] <- "emotion_1"
names(gjg)[names(gjg) == "emotion2"] <- "emotion_2"
names(gjg)[names(gjg) == "logic1"] <- "logic_1"
names(gjg)[names(gjg) == "logic2"] <- "logic_2"
names(gjg)[names(gjg) == "quick1"] <- "quick_1"
names(gjg)[names(gjg) == "quick2"] <- "quick_2"
names(gjg)[names(gjg) == "slow1"] <- "slow_1"
names(gjg)[names(gjg) == "slow2"] <- "slow_2"
names(gjg)[names(gjg) == "warm1"] <- "warm_1"
names(gjg)[names(gjg) == "warm2"] <- "warm_2"
names(gjg)[names(gjg) == "good.natured1"] <- "good.natured_1"
names(gjg)[names(gjg) == "good.natured2"] <- "good.natured_2"
names(gjg)[names(gjg) == "tolerant1"] <- "tolerant_1"
names(gjg)[names(gjg) == "tolerant2"] <- "tolerant_2"
names(gjg)[names(gjg) == "sincere1"] <- "sincere_1"
names(gjg)[names(gjg) == "sincere2"] <- "sincere_2"
names(gjg)[names(gjg) == "competent1"] <- "competent_1"
names(gjg)[names(gjg) == "competent2"] <- "competent_2"
names(gjg)[names(gjg) == "confident1"] <- "confident_1"
names(gjg)[names(gjg) == "confident2"] <- "confident_2"
names(gjg)[names(gjg) == "independent1"] <- "independent_1"
names(gjg)[names(gjg) == "independent2"] <- "independent_2"
names(gjg)[names(gjg) == "competitive1"] <- "competitive_1"
names(gjg)[names(gjg) == "competitive2"] <- "competitive_2"
names(gjg)[names(gjg) == "intelligent1"] <- "intelligent_1"
names(gjg)[names(gjg) == "intelligent2"] <- "intelligent_2"
names(gjg)[names(gjg) == "politics1"] <- "politics_1"
names(gjg)[names(gjg) == "politics2"] <- "politics_2"

gjg$reputationSignal_commit <- NA
gjg$reputationSignal_value <- NA

gjg$reputationSignal_commit <- ifelse(gjg$vigOrder == "justiceCommitFirst", gjg$reputationSignal_1,
                                      ifelse(gjg$vigOrder == "genCommitFirst", gjg$reputationSignal_1, gjg$reputationSignal_2))
gjg$reputationSignal_value <- ifelse(gjg$vigOrder == "justiceCommitFirst", gjg$reputationSignal_2, 
                                     ifelse(gjg$vigOrder == "genCommitFirst", gjg$reputationSignal_2, gjg$reputationSignal_1))

swapValuesBasedOnVigOrder <- function(data, column, colSuffix1 = "_1", colSuffix2 = "_2") {
  # Check if vigOrder is justiceCommitFirst or genCommitFirst
  is_commit <- data$vigOrder %in% c("justiceCommitFirst", "genCommitFirst")
  
  # Create new columns for "_commit" and "_value"
  data[[paste0(column, "_commit")]] <- ifelse(is_commit, data[[paste0(column, colSuffix1)]], data[[paste0(column, colSuffix2)]])
  data[[paste0(column, "_value")]] <- ifelse(is_commit, data[[paste0(column, colSuffix2)]], data[[paste0(column, colSuffix1)]])
  
  # Replace missing values with NA
  data[[paste0(column, "_commit")]][is.na(data[[paste0(column, "_commit")]])] <- NA
  data[[paste0(column, "_value")]][is.na(data[[paste0(column, "_value")]])] <- NA
  
  # Return the modified data frame
  return(data)
}

gjg <- swapValuesBasedOnVigOrder(gjg, column = "normSignal", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "approval", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "moral", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "genuine", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "deliberate", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "spontaneous", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "emotion", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "logic", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "quick", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "slow", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "warm", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "good.natured", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "tolerant", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "sincere", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "competent", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "confident", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "independent", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "competitive", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "intelligent", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "politics", colSuffix1 = "_1", colSuffix2 = "_2")

Changing to long format

Code
# splitting data into commit and value sentences 
names(gjg)[names(gjg) == "reputationSignal_1"] <- "reputationSignal1"
names(gjg)[names(gjg) == "reputationSignal_2"] <- "reputationSignal2"
names(gjg)[names(gjg) == "normSignal_1"] <- "normSignal1"
names(gjg)[names(gjg) == "normSignal_2"] <- "normSignal2"
names(gjg)[names(gjg) == "approval_1"] <- "approval1"
names(gjg)[names(gjg) == "approval_2"] <- "approval2"
names(gjg)[names(gjg) == "moral_1"] <- "moral1"
names(gjg)[names(gjg) == "moral_2"] <- "moral2"
names(gjg)[names(gjg) == "genuine_1"] <- "genuine1"
names(gjg)[names(gjg) == "genuine_2"] <- "genuine2"
names(gjg)[names(gjg) == "deliberate_1"] <- "deliberate1"
names(gjg)[names(gjg) == "deliberate_2"] <- "deliberate2"
names(gjg)[names(gjg) == "spontaneous_1"] <- "spontaneous1"
names(gjg)[names(gjg) == "spontaneous_2"] <- "spontaneous2"
names(gjg)[names(gjg) == "emotion_1"] <- "emotion1"
names(gjg)[names(gjg) == "emotion_2"] <- "emotion2"
names(gjg)[names(gjg) == "logic_1"] <- "logic1"
names(gjg)[names(gjg) == "logic_2"] <- "logic2"
names(gjg)[names(gjg) == "quick_1"] <- "quick1"
names(gjg)[names(gjg) == "quick_2"] <- "quick2"
names(gjg)[names(gjg) == "slow_1"] <- "slow1"
names(gjg)[names(gjg) == "slow_2"] <- "slow2"
names(gjg)[names(gjg) == "warm_1"] <- "warm1"
names(gjg)[names(gjg) == "warm_2"] <- "warm2"
names(gjg)[names(gjg) == "good.natured_1"] <- "good.natured1"
names(gjg)[names(gjg) == "good.natured_2"] <- "good.natured2"
names(gjg)[names(gjg) == "tolerant_1"] <- "tolerant1"
names(gjg)[names(gjg) == "tolerant_2"] <- "tolerant2"
names(gjg)[names(gjg) == "sincere_1"] <- "sincere1"
names(gjg)[names(gjg) == "sincere_2"] <- "sincere2"
names(gjg)[names(gjg) == "competent_1"] <- "competent1"
names(gjg)[names(gjg) == "competent_2"] <- "competent2"
names(gjg)[names(gjg) == "confident_1"] <- "confident1"
names(gjg)[names(gjg) == "confident_2"] <- "confident2"
names(gjg)[names(gjg) == "independent_1"] <- "independent1"
names(gjg)[names(gjg) == "independent_2"] <- "independent2"
names(gjg)[names(gjg) == "competitive_1"] <- "competitive1"
names(gjg)[names(gjg) == "competitive_2"] <- "competitive2"
names(gjg)[names(gjg) == "intelligent_1"] <- "intelligent1"
names(gjg)[names(gjg) == "intelligent_2"] <- "intelligent2"
names(gjg)[names(gjg) == "politics_1"] <- "politics1"
names(gjg)[names(gjg) == "politics_2"] <- "politics2"

# New columns for composite of warmth and competence
gjg <- gjg %>%
  mutate(warmth_commit=(warm_commit+good.natured_commit+tolerant_commit+sincere_commit)/4)%>%
  mutate(warmth_value=(warm_value+good.natured_value+tolerant_value+sincere_value)/4)%>%
  mutate(competence_commit=(competent_commit+confident_commit+independent_commit+competitive_commit+intelligent_commit)/5)%>%
  mutate(competence_value=(competent_value+confident_value+independent_value+competitive_value+intelligent_value)/5)

gjg_long<-gjg %>% gather(DV, resp, "reputationSignal_commit","reputationSignal_value","normSignal_commit","normSignal_value","approval_commit","approval_value","moral_commit","moral_value","genuine_commit","genuine_value","deliberate_commit","deliberate_value","spontaneous_commit","spontaneous_value","emotion_commit","emotion_value","logic_commit","logic_value","quick_commit","quick_value","slow_commit","slow_value","warm_commit","warm_value","good.natured_commit","good.natured_value","tolerant_commit","tolerant_value","sincere_commit","sincere_value","competent_commit","competent_value","confident_commit","confident_value", "independent_commit","independent_value","competitive_commit","competitive_value","intelligent_commit","intelligent_value","warmth_commit","warmth_value","competence_commit","competence_value", "politics_commit", "politics_value")

gjg_long<-gjg_long %>%
  separate(DV, into= c("DV", "sentence"), sep="_")
gjg_long <- spread(gjg_long, DV, resp)

Political Perceptions

No significance.

Code
percep_plot_list <- list(plot_cooker7("sentence", "politics", "Donor Politics", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Donor Politics", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_politics <- lmer(politics ~ sentence + (1 | pid), data = gjg_long)
summary(mod_politics)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: politics ~ sentence + (1 | pid)
   Data: gjg_long

REML criterion at convergence: 1480

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7898 -0.9859  0.1588  0.8083  2.1894 

Random effects:
 Groups   Name        Variance Std.Dev.
 pid      (Intercept) 0.06994  0.2645  
 Residual             2.37016  1.5395  
Number of obs: 396, groups:  pid, 198

Fixed effects:
              Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)     3.7374     0.1110 393.6766  33.666   <2e-16 ***
sentencevalue  -0.1263     0.1547 197.0000  -0.816    0.415    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr)
sentenceval -0.697
Code
# by own politics

mod_politics2 <- lmer(politics ~ sentence * polit_self + (1 | pid), data = gjg_long)
summary(mod_politics2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: politics ~ sentence * polit_self + (1 | pid)
   Data: gjg_long

REML criterion at convergence: 1480.1

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.82549 -0.93277  0.09649  0.72997  2.24280 

Random effects:
 Groups   Name        Variance Std.Dev.
 pid      (Intercept) 0.05834  0.2415  
 Residual             2.38755  1.5452  
Number of obs: 396, groups:  pid, 198

Fixed effects:
                                    Estimate Std. Error        df t value
(Intercept)                          3.60748    0.15119 389.77822  23.860
sentencevalue                       -0.09346    0.21125 194.99999  -0.442
polit_selfModerate                   0.34252    0.28984 389.77822   1.182
polit_selfRepublican                 0.23566    0.26612 389.77822   0.886
sentencevalue:polit_selfModerate    -0.25654    0.40498 194.99999  -0.633
sentencevalue:polit_selfRepublican   0.07385    0.37183 194.99999   0.199
                                   Pr(>|t|)    
(Intercept)                          <2e-16 ***
sentencevalue                         0.659    
polit_selfModerate                    0.238    
polit_selfRepublican                  0.376    
sentencevalue:polit_selfModerate      0.527    
sentencevalue:polit_selfRepublican    0.843    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) sntncv plt_sM plt_sR snt:_M
sentenceval -0.699                            
plt_slfMdrt -0.522  0.364                     
plt_slfRpbl -0.568  0.397  0.296              
sntncvl:p_M  0.364 -0.522 -0.699 -0.207       
sntncvl:p_R  0.397 -0.568 -0.207 -0.699  0.296

Linear Mixed Effects Models

Code
# new columns for Factor 2-competence (plus logic, minus competitive), Factor 3-moral goodness (approval, moral, genuine), Factor 3-warmth (minus sincere), Factor 5-decision speed (quick, spontaneous)
gjg <- gjg %>%
  mutate(competence2_commit=(competent_commit+confident_commit+independent_commit+logic_commit+
                            intelligent_commit)/5)%>%
  mutate(competence2_value=(competent_value+confident_value+independent_value+logic_value+
                            intelligent_value)/5)%>%
  mutate(moralGoodness2_commit=(approval_commit+moral_commit+genuine_commit)/3)%>%
  mutate(moralGoodness2_value=(approval_value+moral_value+genuine_value)/3) %>%
  mutate(decisionSpeed_commit=(quick_commit+spontaneous_commit)/2)%>%
  mutate(decisionSpeed_value=(quick_value+spontaneous_value)/2)

gjg_long<-gjg %>% gather(DV, resp, "reputationSignal_commit","reputationSignal_value","normSignal_commit","normSignal_value","approval_commit","approval_value","moral_commit","moral_value","genuine_commit","genuine_value","deliberate_commit","deliberate_value","spontaneous_commit","spontaneous_value","emotion_commit","emotion_value","logic_commit","logic_value","quick_commit","quick_value","slow_commit","slow_value","warm_commit","warm_value","good.natured_commit","good.natured_value","tolerant_commit","tolerant_value","sincere_commit","sincere_value","competent_commit","competent_value","confident_commit","confident_value", "independent_commit","independent_value","competitive_commit","competitive_value","intelligent_commit","intelligent_value","warmth_commit","warmth_value","competence_commit","competence_value", "politics_commit", "politics_value","competence2_commit","competence2_value","moralGoodness2_commit","moralGoodness2_value","decisionSpeed_commit","decisionSpeed_value")

# splitting data into gen and just motives
gjg_long<-gjg_long %>%
  separate(DV, into= c("DV", "sentence"), sep="_")
gjg_long <- spread(gjg_long, DV, resp)  

Mixed Effects Model Warmth (Factor 1)

No significance.

Code
percep_plot_list <- list(plot_cooker("sentence", "warmth", "Warmth", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 1 (Warmth)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_warmth <- lmer(warmth ~ sentence + (1 | pid), data = gjg_long)
summary(mod_warmth)

Mixed Effects Model Competence (Factor 2)

“Commitment” language is perceived to be significantly more competent than “value” language.

Code
percep_plot_list <- list(plot_cooker("sentence", "competence2", "Competence", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 2 (Competence)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_competence <- lmer(competence2 ~ sentence + (1 | pid), data = gjg_long)
summary(mod_competence)

table(gjg$vigOrder)

Mixed Effects Model Moral Goodness (Factor 3)

No significance.

Code
percep_plot_list <- list(plot_cooker("sentence", "moralGoodness2", "Moral Goodness", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 3 (Moral Goodness)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_moralGoodness <- lmer(moralGoodness2 ~ sentence + (1 | pid), data = gjg_long)
summary(mod_moralGoodness)

Mixed Effects Model Reputation Signaling (Factor 4)

No significance.

Code
percep_plot_list <- list(plot_cooker("sentence", "reputationSignal", "Reputation Signaling", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 4 (Reputation Signaling)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_reputationSignal<- lmer(reputationSignal ~ sentence + (1 | pid), data = gjg_long)
summary(mod_reputationSignal)

Mixed Effects Model Decision Speed (Factor 5)

“Value” language is perceived to make decisions significantly more quickly/spontaneously than “commitment” language.

Code
percep_plot_list <- list(plot_cooker("sentence", "decisionSpeed", "Decision Speed", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 5 (Decision Speed)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_decisionSpeed<- lmer(decisionSpeed ~ sentence + (1 | pid), data = gjg_long)
summary(mod_decisionSpeed)

Mixed Effects Model Emotion (Factor 6)

“Value” language is perceived to be significantly more from emotion than “commitment” language.

Code
percep_plot_list <- list(plot_cooker("sentence", "emotion", "Emotion", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Factor 6 (Emotion)", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_emotion<- lmer(emotion ~ sentence + (1 | pid), data = gjg_long)
summary(mod_emotion)

Mixed Effects Model Norm Signaling

No significance.

Code
percep_plot_list <- list(plot_cooker("sentence", "normSignal", "Norm Signaling", c("commit","value")," ", 198))

percep_plot_arranged <- ggarrange(plotlist = percep_plot_list, ncol = 1, nrow = 1)

overall_percep_title <- ggdraw() + 
  draw_label("Norm Signaling", fontface = "bold")

plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_normSignal<- lmer(normSignal ~ sentence + (1 | pid), data = gjg_long)
summary(mod_normSignal)

Interactive Effects of Sentence and Motive

Code
# making new columns for commit and value

names(gjg)[names(gjg) == "reputationSignal1"] <- "reputationSignal_1"
names(gjg)[names(gjg) == "reputationSignal2"] <- "reputationSignal_2"
names(gjg)[names(gjg) == "normSignal1"] <- "normSignal_1"
names(gjg)[names(gjg) == "normSignal2"] <- "normSignal_2"
names(gjg)[names(gjg) == "approval1"] <- "approval_1"
names(gjg)[names(gjg) == "approval2"] <- "approval_2"
names(gjg)[names(gjg) == "moral1"] <- "moral_1"
names(gjg)[names(gjg) == "moral2"] <- "moral_2"
names(gjg)[names(gjg) == "genuine1"] <- "genuine_1"
names(gjg)[names(gjg) == "genuine2"] <- "genuine_2"
names(gjg)[names(gjg) == "deliberate1"] <- "deliberate_1"
names(gjg)[names(gjg) == "deliberate2"] <- "deliberate_2"
names(gjg)[names(gjg) == "spontaneous1"] <- "spontaneous_1"
names(gjg)[names(gjg) == "spontaneous2"] <- "spontaneous_2"
names(gjg)[names(gjg) == "emotion1"] <- "emotion_1"
names(gjg)[names(gjg) == "emotion2"] <- "emotion_2"
names(gjg)[names(gjg) == "logic1"] <- "logic_1"
names(gjg)[names(gjg) == "logic2"] <- "logic_2"
names(gjg)[names(gjg) == "quick1"] <- "quick_1"
names(gjg)[names(gjg) == "quick2"] <- "quick_2"
names(gjg)[names(gjg) == "slow1"] <- "slow_1"
names(gjg)[names(gjg) == "slow2"] <- "slow_2"
names(gjg)[names(gjg) == "warm1"] <- "warm_1"
names(gjg)[names(gjg) == "warm2"] <- "warm_2"
names(gjg)[names(gjg) == "good.natured1"] <- "good.natured_1"
names(gjg)[names(gjg) == "good.natured2"] <- "good.natured_2"
names(gjg)[names(gjg) == "tolerant1"] <- "tolerant_1"
names(gjg)[names(gjg) == "tolerant2"] <- "tolerant_2"
names(gjg)[names(gjg) == "sincere1"] <- "sincere_1"
names(gjg)[names(gjg) == "sincere2"] <- "sincere_2"
names(gjg)[names(gjg) == "competent1"] <- "competent_1"
names(gjg)[names(gjg) == "competent2"] <- "competent_2"
names(gjg)[names(gjg) == "confident1"] <- "confident_1"
names(gjg)[names(gjg) == "confident2"] <- "confident_2"
names(gjg)[names(gjg) == "independent1"] <- "independent_1"
names(gjg)[names(gjg) == "independent2"] <- "independent_2"
names(gjg)[names(gjg) == "competitive1"] <- "competitive_1"
names(gjg)[names(gjg) == "competitive2"] <- "competitive_2"
names(gjg)[names(gjg) == "intelligent1"] <- "intelligent_1"
names(gjg)[names(gjg) == "intelligent2"] <- "intelligent_2"
names(gjg)[names(gjg) == "politics1"] <- "politics_1"
names(gjg)[names(gjg) == "politics2"] <- "politics_2"

# function to create new cols

swapValuesBasedOnVigOrder <- function(data, columnName, colSuffix1, colSuffix2) {
  data[[paste0(columnName, "_gen_commit")]] <- ifelse(data$vigOrder == "genCommitFirst",
                                                     data[[paste0(columnName, colSuffix1)]],
                                                     ifelse(data$vigOrder == "justiceValueFirst", data[[paste0(columnName, colSuffix2)]], NA))
  data[[paste0(columnName, "_justice_commit")]] <- ifelse(data$vigOrder == "justiceCommitFirst",
                                                        data[[paste0(columnName, colSuffix1)]], ifelse(data$vigOrder == "genValueFirst", data[[paste0(columnName, colSuffix2)]], NA))
  data[[paste0(columnName, "_gen_value")]] <- ifelse(data$vigOrder == "genValueFirst",
                                                    data[[paste0(columnName, colSuffix1)]], ifelse(data$vigOrder == "justiceCommitFirst", data[[paste0(columnName, colSuffix2)]], NA))
  data[[paste0(columnName, "_justice_value")]] <- ifelse(data$vigOrder == "justiceValueFirst",
                                                       data[[paste0(columnName, colSuffix1)]], ifelse(data$vigOrder == "genCommitFirst", data[[paste0(columnName, colSuffix2)]], NA))
  
  return(data)
}

gjg <- swapValuesBasedOnVigOrder(gjg, column = "reputationSignal", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "normSignal", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "approval", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "moral", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "genuine", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "deliberate", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "spontaneous", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "emotion", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "logic", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "quick", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "slow", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "warm", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "good.natured", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "tolerant", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "sincere", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "competent", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "confident", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "independent", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "competitive", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "intelligent", colSuffix1 = "_1", colSuffix2 = "_2")
gjg <- swapValuesBasedOnVigOrder(gjg, column = "politics", colSuffix1 = "_1", colSuffix2 = "_2")

Changing to long format

Code
# splitting data 
names(gjg)[names(gjg) == "reputationSignal_1"] <- "reputationSignal1"
names(gjg)[names(gjg) == "reputationSignal_2"] <- "reputationSignal2"
names(gjg)[names(gjg) == "normSignal_1"] <- "normSignal1"
names(gjg)[names(gjg) == "normSignal_2"] <- "normSignal2"
names(gjg)[names(gjg) == "approval_1"] <- "approval1"
names(gjg)[names(gjg) == "approval_2"] <- "approval2"
names(gjg)[names(gjg) == "moral_1"] <- "moral1"
names(gjg)[names(gjg) == "moral_2"] <- "moral2"
names(gjg)[names(gjg) == "genuine_1"] <- "genuine1"
names(gjg)[names(gjg) == "genuine_2"] <- "genuine2"
names(gjg)[names(gjg) == "deliberate_1"] <- "deliberate1"
names(gjg)[names(gjg) == "deliberate_2"] <- "deliberate2"
names(gjg)[names(gjg) == "spontaneous_1"] <- "spontaneous1"
names(gjg)[names(gjg) == "spontaneous_2"] <- "spontaneous2"
names(gjg)[names(gjg) == "emotion_1"] <- "emotion1"
names(gjg)[names(gjg) == "emotion_2"] <- "emotion2"
names(gjg)[names(gjg) == "logic_1"] <- "logic1"
names(gjg)[names(gjg) == "logic_2"] <- "logic2"
names(gjg)[names(gjg) == "quick_1"] <- "quick1"
names(gjg)[names(gjg) == "quick_2"] <- "quick2"
names(gjg)[names(gjg) == "slow_1"] <- "slow1"
names(gjg)[names(gjg) == "slow_2"] <- "slow2"
names(gjg)[names(gjg) == "warm_1"] <- "warm1"
names(gjg)[names(gjg) == "warm_2"] <- "warm2"
names(gjg)[names(gjg) == "good.natured_1"] <- "good.natured1"
names(gjg)[names(gjg) == "good.natured_2"] <- "good.natured2"
names(gjg)[names(gjg) == "tolerant_1"] <- "tolerant1"
names(gjg)[names(gjg) == "tolerant_2"] <- "tolerant2"
names(gjg)[names(gjg) == "sincere_1"] <- "sincere1"
names(gjg)[names(gjg) == "sincere_2"] <- "sincere2"
names(gjg)[names(gjg) == "competent_1"] <- "competent1"
names(gjg)[names(gjg) == "competent_2"] <- "competent2"
names(gjg)[names(gjg) == "confident_1"] <- "confident1"
names(gjg)[names(gjg) == "confident_2"] <- "confident2"
names(gjg)[names(gjg) == "independent_1"] <- "independent1"
names(gjg)[names(gjg) == "independent_2"] <- "independent2"
names(gjg)[names(gjg) == "competitive_1"] <- "competitive1"
names(gjg)[names(gjg) == "competitive_2"] <- "competitive2"
names(gjg)[names(gjg) == "intelligent_1"] <- "intelligent1"
names(gjg)[names(gjg) == "intelligent_2"] <- "intelligent2"
names(gjg)[names(gjg) == "politics_1"] <- "politics1"
names(gjg)[names(gjg) == "politics_2"] <- "politics2"

# New columns for composite of warmth and competence
gjg <- gjg %>%
  mutate(warmth_gen_commit=(warm_gen_commit+good.natured_gen_commit+tolerant_gen_commit+sincere_gen_commit)/4)%>%
  mutate(warmth_justice_commit=(warm_justice_commit+good.natured_justice_commit+tolerant_justice_commit+sincere_justice_commit)/4)%>%
  mutate(warmth_gen_value=(warm_gen_value+good.natured_gen_value+tolerant_gen_value+sincere_gen_value)/4)%>%
  mutate(warmth_justice_value=(warm_justice_value+good.natured_justice_value+tolerant_justice_value+sincere_justice_value)/4)%>%
  mutate(competence_gen_commit=(competent_gen_commit+confident_gen_commit+independent_gen_commit+competitive_gen_commit+intelligent_gen_commit)/5)%>%
  mutate(competence_justice_commit=(competent_justice_commit+confident_justice_commit+independent_justice_commit+competitive_justice_commit+intelligent_justice_commit)/5)%>%
  mutate(competence_gen_value=(competent_gen_value+confident_gen_value+independent_gen_value+competitive_gen_value+intelligent_gen_value)/5)%>%
  mutate(competence_justice_value=(competent_justice_value+confident_justice_value+independent_justice_value+competitive_justice_value+intelligent_justice_value)/5)

gjg_long<-gjg %>% gather(DV, resp, "reputationSignal_gen_commit", "reputationSignal_justice_commit", "reputationSignal_gen_value", "reputationSignal_justice_value", "normSignal_gen_commit", "normSignal_justice_commit", "normSignal_gen_value", "normSignal_justice_value", "approval_gen_commit", "approval_justice_commit", "approval_gen_value", "approval_justice_value", "moral_gen_commit", "moral_justice_commit", "moral_gen_value", "moral_justice_value", "genuine_gen_commit", "genuine_justice_commit", "genuine_gen_value", "genuine_justice_value", "deliberate_gen_commit", "deliberate_justice_commit", "deliberate_gen_value", "deliberate_justice_value", "spontaneous_gen_commit", "spontaneous_justice_commit", "spontaneous_gen_value", "spontaneous_justice_value", "emotion_gen_commit", "emotion_justice_commit", "emotion_gen_value", "emotion_justice_value", "logic_gen_commit", "logic_justice_commit", "logic_gen_value", "logic_justice_value", "quick_gen_commit", "quick_justice_commit", "quick_gen_value", "quick_justice_value", "slow_gen_commit", "slow_justice_commit", "slow_gen_value", "slow_justice_value", "warm_gen_commit", "warm_justice_commit", "warm_gen_value", "warm_justice_value", "good.natured_gen_commit", "good.natured_justice_commit", "good.natured_gen_value", "good.natured_justice_value", "tolerant_gen_commit", "tolerant_justice_commit", "tolerant_gen_value", "tolerant_justice_value", "sincere_gen_commit", "sincere_justice_commit", "sincere_gen_value", "sincere_justice_value", "competent_gen_commit", "competent_justice_commit", "competent_gen_value", "competent_justice_value", "confident_gen_commit", "confident_justice_commit", "confident_gen_value", "confident_justice_value", "independent_gen_commit", "independent_justice_commit", "independent_gen_value", "independent_justice_value", "competitive_gen_commit", "competitive_justice_commit", "competitive_gen_value", "competitive_justice_value", "intelligent_gen_commit", "intelligent_justice_commit", "intelligent_gen_value", "intelligent_justice_value", "warmth_gen_commit", "warmth_justice_commit", "warmth_gen_value", "warmth_justice_value", "competence_gen_commit", "competence_justice_commit", "competence_gen_value", "competence_justice_value", "politics_gen_commit", "politics_justice_commit", "politics_gen_value", "politics_justice_value")

gjg_long<-gjg_long %>%
  separate(DV, into= c("DV", "motive", "sentence"), sep="_")
gjg_long <- spread(gjg_long, DV, resp)

Political Perceptions

No significance.

Code
plot_cooker7 <- function(data, dv, iv, sentence, Title, x_axis_labs, y_label, sample_size) {
  part1 <- ggviolin(data, x = iv, y = dv, group = sentence,
                    alpha = 0.1, fill = iv, xlab = "Motive",
                    trim = TRUE, ylab = y_label) +
    stat_summary(fun.data = "mean_cl_normal", geom = "crossbar", fatten = 1, na.rm = TRUE) +
    scale_y_continuous(breaks = c(1:7)) +
    labs(title = paste0(Title, " (n = ", sample_size, ")")) +
    scale_x_discrete(labels = x_axis_labs) +
    theme(panel.background = element_rect(fill = "transparent"), 
          legend.position = "right",
          plot.title = element_text(face = "bold", hjust = 0.5, size = 16), 
          plot.subtitle = element_text(hjust = 0.5),
          panel.grid.major.y = element_line(color = 'grey75'), 
          axis.text.x = element_text(face = "plain", size = 13, color = "black"),
          axis.text.y = element_text(face = "plain", size = 13, color = "black"),
          axis.title.y = element_text(face = "plain", size = 13, color = "black", 
                                      margin = margin(t = 0, r = 10, b = 0, l = 0)),
          panel.border = element_rect(color = "black", fill = NA, size = 1))
  
  return(part1)
}

# Remove rows with NAs in the "politics" and "motive" columns
gjg_long_no_na <- gjg_long[complete.cases(gjg_long[, c("politics", "motive")]), ]

# Plot for "commit" sentence
plot_commit <- plot_cooker7(
  data = gjg_long_no_na,
  dv = "politics",
  iv = "motive",
  sentence = "commit",
  Title = "Donor Politics - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker7(
  data = gjg_long_no_na,
  dv = "politics",
  iv = "motive",
  sentence = "value",
  Title = "Donor Politics - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Donor Politics", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_politics <- lmer(politics ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_politics)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: politics ~ motive * sentence + (1 | pid)
   Data: gjg_long_no_na

REML criterion at convergence: 1479.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.8165 -0.8914  0.1117  0.7754  2.2580 

Random effects:
 Groups   Name        Variance Std.Dev.
 pid      (Intercept) 0.06209  0.2492  
 Residual             2.37234  1.5402  
Number of obs: 396, groups:  pid, 198

Fixed effects:
                             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)                   3.78824    0.16923 391.74521  22.385   <2e-16 ***
motivejustice                -0.08912    0.22402 391.74521  -0.398    0.691    
sentencevalue                -0.33691    0.22402 391.74521  -1.504    0.133    
motivejustice:sentencevalue   0.46132    0.32082 195.99999   1.438    0.152    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) mtvjst sntncv
motivejustc -0.755              
sentenceval -0.755  0.582       
mtvjstc:snt  0.541 -0.716 -0.716
Code
# by own politics

mod_politics2 <- lmer(politics ~ motive * sentence * polit_self + (1 | pid), data = gjg_long_no_na)
summary(mod_politics2)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: politics ~ motive * sentence * polit_self + (1 | pid)
   Data: gjg_long_no_na

REML criterion at convergence: 1471.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.05274 -0.78985  0.06417  0.71439  2.27445 

Random effects:
 Groups   Name        Variance Std.Dev.
 pid      (Intercept) 0.06194  0.2489  
 Residual             2.36982  1.5394  
Number of obs: 396, groups:  pid, 198

Fixed effects:
                                                   Estimate Std. Error
(Intercept)                                        3.666667   0.225081
motivejustice                                     -0.107345   0.303114
sentencevalue                                     -0.242938   0.303114
polit_selfModerate                                 0.238095   0.407995
polit_selfRepublican                               0.333333   0.450163
motivejustice:sentencevalue                        0.308616   0.434093
motivejustice:polit_selfModerate                   0.202583   0.579365
motivejustice:polit_selfRepublican                -0.121227   0.559769
sentencevalue:polit_selfModerate                  -0.767087   0.579365
sentencevalue:polit_selfRepublican                 0.042938   0.559769
motivejustice:sentencevalue:polit_selfModerate     0.939504   0.829715
motivejustice:sentencevalue:polit_selfRepublican  -0.005044   0.801653
                                                         df t value Pr(>|t|)
(Intercept)                                      383.751001  16.290   <2e-16
motivejustice                                    383.751000  -0.354    0.723
sentencevalue                                    383.751000  -0.801    0.423
polit_selfModerate                               383.751000   0.584    0.560
polit_selfRepublican                             383.751001   0.740    0.459
motivejustice:sentencevalue                      191.999995   0.711    0.478
motivejustice:polit_selfModerate                 383.751000   0.350    0.727
motivejustice:polit_selfRepublican               383.751001  -0.217    0.829
sentencevalue:polit_selfModerate                 383.751000  -1.324    0.186
sentencevalue:polit_selfRepublican               383.751001   0.077    0.939
motivejustice:sentencevalue:polit_selfModerate   191.999995   1.132    0.259
motivejustice:sentencevalue:polit_selfRepublican 191.999995  -0.006    0.995
                                                    
(Intercept)                                      ***
motivejustice                                       
sentencevalue                                       
polit_selfModerate                                  
polit_selfRepublican                                
motivejustice:sentencevalue                         
motivejustice:polit_selfModerate                    
motivejustice:polit_selfRepublican                  
sentencevalue:polit_selfModerate                    
sentencevalue:polit_selfRepublican                  
motivejustice:sentencevalue:polit_selfModerate      
motivejustice:sentencevalue:polit_selfRepublican    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
            (Intr) mtvjst sntncv plt_sM plt_sR mtvjs: mtv:_M mtv:_R snt:_M
motivejustc -0.743                                                        
sentenceval -0.743  0.563                                                 
plt_slfMdrt -0.552  0.410  0.410                                          
plt_slfRpbl -0.500  0.371  0.371  0.276                                   
mtvjstc:snt  0.532 -0.716 -0.716 -0.293 -0.266                            
mtvjstc:p_M  0.388 -0.523 -0.294 -0.704 -0.194  0.375                     
mtvjstc:p_R  0.402 -0.541 -0.305 -0.222 -0.804  0.388  0.283              
sntncvl:p_M  0.388 -0.294 -0.523 -0.704 -0.194  0.375  0.509  0.159       
sntncvl:p_R  0.402 -0.305 -0.541 -0.222 -0.804  0.388  0.159  0.656  0.283
mtvjstc::_M -0.278  0.375  0.375  0.504  0.139 -0.523 -0.716 -0.203 -0.716
mtvjstc::_R -0.288  0.388  0.388  0.159  0.576 -0.541 -0.203 -0.716 -0.203
            snt:_R mt::_M
motivejustc              
sentenceval              
plt_slfMdrt              
plt_slfRpbl              
mtvjstc:snt              
mtvjstc:p_M              
mtvjstc:p_R              
sntncvl:p_M              
sntncvl:p_R              
mtvjstc::_M -0.203       
mtvjstc::_R -0.716  0.283

Linear Mixed Effects Models

Code
# new columns for Factor 2-competence (plus logic, minus competitive), Factor 3-moral goodness (approval, moral, genuine), Factor 3-warmth (minus sincere), Factor 5-decision speed (quick, spontaneous)
gjg_long_no_na <- gjg_long_no_na %>%
  mutate(competence2=(competent+confident+independent+logic+intelligent)/5)%>%
  mutate(moralGoodness2=(approval+moral+genuine)/3)%>%
  mutate(decisionSpeed=(quick+spontaneous)/2)

Mixed Effects Model Warmth (Factor 1)

No significance.

Code
plot_cooker <- function(data, dv, iv, sentence, Title, x_axis_labs, y_label, sample_size) {
  part1 <- ggviolin(data, x = iv, y = dv, group = sentence,
                    alpha = 0.1, fill = iv, xlab = "Motive",
                    trim = TRUE, ylab = y_label) +
    stat_summary(fun.data = "mean_cl_normal", geom = "crossbar", fatten = 1, na.rm = TRUE) +
    scale_y_continuous(breaks = c(1:5)) +
    labs(title = paste0(Title, " (n = ", sample_size, ")")) +
    scale_x_discrete(labels = x_axis_labs) +
    theme(panel.background = element_rect(fill = "transparent"), 
          legend.position = "right",
          plot.title = element_text(face = "bold", hjust = 0.5, size = 16), 
          plot.subtitle = element_text(hjust = 0.5),
          panel.grid.major.y = element_line(color = 'grey75'), 
          axis.text.x = element_text(face = "plain", size = 13, color = "black"),
          axis.text.y = element_text(face = "plain", size = 13, color = "black"),
          axis.title.y = element_text(face = "plain", size = 13, color = "black", 
                                      margin = margin(t = 0, r = 10, b = 0, l = 0)),
          panel.border = element_rect(color = "black", fill = NA, size = 1))
  
  return(part1)
}

# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "warmth",
  iv = "motive",
  sentence = "commit",
  Title = "Warmth - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "warmth",
  iv = "motive",
  sentence = "value",
  Title = "Warmth - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Factor 1 (Warmth)", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_warmth <- lmer(warmth ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_warmth)

Mixed Effects Model Competence (Factor 2)

Main effect of justice over generosity, no interaction.

Code
# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "competence2",
  iv = "motive",
  sentence = "commit",
  Title = "Competence - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "competence2",
  iv = "motive",
  sentence = "value",
  Title = "Competence - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Factor 2 (Competence)", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_competence2 <- lmer(competence2 ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_competence2)

Mixed Effects Model Moral Goodness (Factor 3)

Main effect of justice over generosity, no interaction.

Code
# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "moralGoodness2",
  iv = "motive",
  sentence = "commit",
  Title = "Moral Goodness - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "moralGoodness2",
  iv = "motive",
  sentence = "value",
  Title = "Moral Goodness - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Factor 3 (Moral Goodness)", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_moralGoodness <- lmer(moralGoodness2 ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_moralGoodness)

Mixed Effects Model Reputation Signaling (Factor 4)

Main effect of generosity over justice and of commitment over value, no interaction.

Code
# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "reputationSignal",
  iv = "motive",
  sentence = "commit",
  Title = "Reputation Signaling - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "reputationSignal",
  iv = "motive",
  sentence = "value",
  Title = "Reputation Signaling - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Factor 4 (Reputation Signaling)", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_reputationSignal <- lmer(reputationSignal ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_reputationSignal)

Mixed Effects Model Decision Speed (Factor 5)

Main effect of value over commitment, no interaction.

Code
# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "decisionSpeed",
  iv = "motive",
  sentence = "commit",
  Title = "Decision Speed - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "decisionSpeed",
  iv = "motive",
  sentence = "value",
  Title = "Decision Speed - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Factor 5 (Decision Speed)", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_decisionSpeed <- lmer(decisionSpeed ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_decisionSpeed)

Mixed Effects Model Emotion (Factor 6)

Main effect of justice over generosity and of value over commitment, no interaction.

Code
# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "emotion",
  iv = "motive",
  sentence = "commit",
  Title = "Emotion - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "emotion",
  iv = "motive",
  sentence = "value",
  Title = "Emotion - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Factor 6 (Emotion)", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_emotion <- lmer(emotion ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_emotion)

Mixed Effects Model Norm Signaling

Main effect of justice over generosity, no interaction.

Code
# Plot for "commit" sentence
plot_commit <- plot_cooker(
  data = gjg_long_no_na,
  dv = "normSignal",
  iv = "motive",
  sentence = "commit",
  Title = "Norm Signaling - Commit",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Plot for "value" sentence
plot_value <- plot_cooker(
  data = gjg_long_no_na,
  dv = "normSignal",
  iv = "motive",
  sentence = "value",
  Title = "Norm Signaling - Value",
  x_axis_labs = c("generosity", "justice"),
  y_label = " ",
  sample_size = 198
)

# Arrange the plots in a grid
percep_plot_arranged <- ggarrange(plot_commit, plot_value, ncol = 1, nrow = 2, heights = c(0.5, 0.5))

# Add an overall title to the plot
overall_percep_title <- ggdraw() + 
  draw_label("Norm Signaling", fontface = "bold")

# Arrange the title and plots in a final grid
plot_grid(overall_percep_title, percep_plot_arranged, ncol = 1, rel_heights = c(0.1, 0.9))

Code
mod_normSignal <- lmer(normSignal ~ motive * sentence + (1 | pid), data = gjg_long_no_na)
summary(mod_normSignal)