In this report, I use some packages to format data, plot results, and run robust analyses. Installed packages are detailed in the code chunk below.
if(!require("dplyr")) install.packages("dplyr")
if(!require("tidyr")) install.packages("tidyr")
if(!require("stringr")) install.packages("stringr")
if(!require("ggplot2")) install.packages("ggplot2")
if(!require("emmeans")) install.packages("emmeans")
if(!require("data.table")) install.packages("data.table")
if(!require("PerformanceAnalytics")) install.packages("PerformanceAnalytics")
if(!require("interactions")) install.packages("interactions")
if(!require("car")) install.packages("car")
if(!require("effectsize")) install.packages("effectsize")
if(!require("RColorBrewer")) install.packages("RColorBrewer")
if(!require("effectsize")) install.packages("effectsize")
if(!require("report")) install.packages("report")
if(!require("ordinal")) install.packages("ordinal")
if(!require("robustbase")) install.packages("robustbase")
if(!require("olsrr")) install.packages("olsrr")
if(!require("knitr")) install.packages("knitr")
if(!require("kableExtra")) install.packages("kableExtra")
if(!require("gt")) install.packages("gt")
if(!require("lavaan")) install.packages("lavaan")
In the previous study, we tried to manipulate the perception of Motivation (IV1) and Altruism (IV2) for different occupations. Although the manipulation of Motivation was associated to the expected results in at least 3 occupations (Firefighters, Welders, and Psychiatrists), our manipulation of Altruism resulted in small effect sizes (all Cohen’s d < 0.3) and mixed success (only changed perceptions of heroism for welders and psychiatrists). Additional explorations indicate that the relative success of the manipulation might be accounted by a more general effect on attitude, rather than a direct effect on heroism (i.e., we suspect a mediation effect where our Altruism increased positive attitude in occupations, but did not directly increased heroism). Moreover, when assessing the competitive effects of evaluations of Exposure to Danger, Bravery, Selflessness, and Effective Helpfulness, we observed that heroism was principally explained by Effective Helpfulness above and beyond Selflessness.
Taken together, these results indicate that heroes might be individuals who help people, rather than individuals who act selflessly. Because our previous manipulation consisted in emphasising the selfless motivations in the occupations, we want to adjust the manipulation to reflect the fact that, above and beyond wanting to help, target occupations are helpful (vs they are not).
Looking at our previous manipulation, I realise that there is an important difference between the way we manipulated Motivation and motivation. Every Motivation manipulation starts with “Despite the idea that…”: basically we start with a situation, and emphasise that the opposite is true. In contrast, every motivation manipulation only emphasise a specific motive –> It does not invalidate that alternative motives (e.g. “Helping people” in the Self improving condition) is true. The construction of the Motivation motivation is, by design, maximizing the contrast between the two levels. In contrast, the Motivation manipulation does not invalidate any prior idea one might have regarding, say, the motivations of psychiatrists to help people.I think this might be an important reason for our small effect sizes. Aims: All conditions states selfless motives but, the motive is either fulfilled in most cases, or frustrated/ineffective in most cases
Helpfulness of the group’s member contribute to the perception of heroism
Franco et al. (2011) provided the general and, to their own admission, overly simplistic definition of heroism as “to act in a prosocial manner despite personal Motivation” (p.99). Altruism and exposure to danger are indeed two core elements that are consistently found in the lay people’s prototype of a hero (Kinsella et al., 2015). Regarding physical threat, Sternstorm & Curtis (2012) observed that altruistic actions were distinguished between being merely altruistic vs heroic as a direct function of the level of physical danger. The more dangerous the action, the more heroic rather than altruistic.
As emphasised by Sternstorm & Curtis (2012), altruism may not be a sufficient element to the perception of heroism, but it might be necessary element nonetheless. However, to our knowledge, there is a lack of experimental evidence for this influence of altruism on the perception of heroism. In previous studies, we observed that above and beyond altruism (being selfless - having altruistic motivations) it might be effectively helping people (regardless of one’s motivation) that makes the hero. We believe that manipulating effective helpfulness of groups might influence their heroism perception.
We will manipulate targets (firefighters, welders or psychiatrists) as being at physical Motivation (in all conditions of the study) and either effectively helpful (e.g., reports show that they help people in 89% of the cases) or not (“reports show that they do not help people in 89% of the cases).
MC will be successful if occupations described as effectively helping people are perceived as significantly helping more people than occupations not described as effectively helping people.
H1a - Describing an occupation as effectively helping people (vs not effectively helping people) will increase perception of heroism regardless of the occupation
H1b - Describing an occupation as “wanting to help people” (vs “Not wanting to help people”) will increase perception of heroism regardless of the occupation
H2a - Perceiving that an occupation is effectively helpful will correlate positively with perceived heroism
H2b - Perceiving that an occupation is selfless will correlate positively with perceived heroism
After reading the Consent form and confirming their participation, reporting their Prolific ID, and answering a commitment check (Geisen, 2022 [avaiblable at https://www.qualtrics.com/blog/attention-checks-and-data-quality/]; Peer et al., 2024), participants will read a description of one of the target occupation (randomly selected, between-participant). Each description consists of a short 3-paragraph long description of the occupation. The first paragraphs briefly describe the targeted occupation, and emphasise the presence of risk in the occupation (see previous study “Perceing Heroism 2” for the High risk condition). The second paragraph will describe the occupation as motivated to help people (vs. not motivated to help people). The third paragraph will emphasise to what extent the profession is helping people vs. not helping people. These two paragraphs will be displayed in a random order. Participants will be randomly assigned in experimental conditions.
After reading the descriptions, participants will complete a comprehension check. They will have two attempts to answer correctly; if they fail both, they will be redirected to a page instructing them to return their survey. Those who pass the comprehension check will proceed to complete a scale measuring the extent to which they personally view the assigned target occupation as ‘heroes.’ Finally, participants will respond to two Likert-scale items assessing, as a manipulation check, the extent to which the target occupation is perceived as (1) selfless and (2) helpful.
Finally, participants will report their general attitude toward the assigned target group (covariate) using a 7-points scale from “Very negative” to “Very positive”.
At the end of the study, participants will complete some demographics regarding their gender, age, and occupation. They will finally answer to 1 final manipulation check regarding the credibility of our deception (“In your opinion, how believable was the information that you read at the beginning of this study, about the target occupation?”). They will then be debriefed and thanked.
Occupation Descriptions. Each description consists in 3 paragraphs with one of the paragraph emphasising that the workers are motivated to help people (vs not motivated to help people), and one that emphasise that they are effectively helping people (vs not helping people, see Material on OSF project). We will use deceptive information to manipulate selfless motivations and helpfulness. Specifically we will report false results from a survey indicating that”81% of XXX are motivated to help people”, and “89% of XXX help people” (vs “11% of XXX help people”).
Moral role attribution. Participants will evaluate to what extent they agree with the target occupations being described as “Heroes” using a 7-point Likert scale from “Strongly disagree” to “Strongly agree”.
Manipulation checks. Participants will then rate to what extent they believe the target occupation is selfless, and to what extent the people in this profession are helpful. Both questions use 7-point Likert scales from “Not at all” to “Extremely”.
General attitude. Participants will report their general attitude toward each target occupation using a 7-point-scale from “Very negative” to “Very positive”.
Comprehension check. Participants will need to respond to a multiple choice question asking them about the content of the vignette they just read (see material for details). They will have two chances of correctly answering the comprehension check - after which they will be urged to return their survey. The comprehension check will be displayed right beneath the descriptions and consist of an easy question about the content of the vignette. The comprehension check was set according to Prolific policy on Comprehension checks.
Credibility check. Participants will answer the following question: “In your opinion, how believable was the information that you read at the beginning of this study, about the target occupation?” from 1- Very unbelievable to 7 - Very believable. Credibility will be measured to explore its potential role as a moderator of the observed results.
Please adjust the path if you are running this script in your local machine. For the purpose of this pre-registration script, we simulated data using Qualtrics “Generate Test data” feature.
Things to note in the data wrangling process:
1 participant reported a mistake in the comment section (“I made a mistake in the first question when asked about whether firefighters are heroes and I said I strongly disagree while I meant to say strongly agree.”)
3 participants returned their survey (because of failed comprehension check, k = 2, and one returned a completed survey for unknown reasons) - they are removed so it does not mess with the representation of our sample
2 participants timed out, despite completing the survey - they are removed so it does not mess with the representation of our sample
Set <- read.csv("~/Downloads/GW1+-+3rd+attempt+-Study+1c_July+3,+2025_06.49.csv", comment.char="#")
Set <- subset(Set, Set$Q233 != "No, I won't")
Set <- Set[-c(1:2),]
Set <- subset(Set, Set$FailedComp == "No") # Keep only participants who succeeded the completion checks
Set <- subset(Set, Set$Age != "") # Keep only participants who succeeded the completion checks
# Remove this weird participant that completed the survey yet returned the survey to preserve representativity
ProlExport<- read.csv("~/Downloads/prolific_export_68541b7296d11f4b2e3bc37e(2).csv")
Ret <- subset(ProlExport, ProlExport$Status == "RETURNED")
# intersect(Set$Prol_ID, Ret$Participant.id)
# Remove Timed Out yet Complete Questionnaires to preserve representativity
ProlExport<- read.csv("~/Downloads/prolific_export_68541b7296d11f4b2e3bc37e(2).csv")
TO <- subset(ProlExport, ProlExport$Status == "TIMED-OUT")
# intersect(Set$Prol_ID, TO$Participant.id)
# Also, one participant reported a mistake, we can correct this:
idx <- which(
Set$Q523 == "I made a mistake in the first question when asked about whether firefighters are heroes and I said I strongly disagree while I meant to say strongly agree."
)
Set$F_Selfish_Help_h_1[idx] <- "7 - Strongly agree"
Set <- subset(Set,
!(Set$PROLIFIC_PID %in% TO$Participant.id |
Set$PROLIFIC_PID %in% Ret$Participant.id))
#table(Set$SubCond, Set$Condition)
#colnames(Set)
Demographics <- Set[,c(37, 39:46)]# First, add a unique row identifier if one does not exist already:
job_cols <- c("Job_match_1", "Job_match_2", "Job_match_3",
"Job_match_4", "Job_match_5", "Job_match_7", "Job_match_6")
Demographics$JOB <- apply(Demographics[, job_cols], 1, function(x) {
# Remove empty strings
reported_jobs <- x[x != ""]
# If no jobs reported, assign NA; else paste the jobs together
if (length(reported_jobs) == 0) NA else paste(reported_jobs, collapse = ", ")
})
Set$Credibility[Set$Credibility == "Very unbelievable"] <- 1
Set$Credibility[Set$Credibility == "Quite unbelievable"] <- 2
Set$Credibility[Set$Credibility == "Somewhat unbelievable"] <- 3
Set$Credibility[Set$Credibility == "Neutral"] <- 4
Set$Credibility[Set$Credibility == "Somewhat believable"] <- 5
Set$Credibility[Set$Credibility == "Quite believable"] <- 6
Set$Credibility[Set$Credibility == "Very believable"] <- 7
# 1. Identify all columns whose names start with "AC" (attention checks)
ac_cols <- grep("^AC", names(Set), value = TRUE)
# 2. Pivot those AC columns into long form so each respondent has exactly one row
Set_long <- Set %>%
mutate(row_id = row_number()) %>% # create a unique ID for each row
pivot_longer(
cols = all_of(ac_cols), # take all attention-check columns
names_to = "ac_var", # put their names into a column called ac_var
values_to = "ac_resp" # put their values into a column called ac_resp
) %>%
filter(ac_resp != "") # keep only the non-empty entry per respondent
# Identify all columns ending with "h_1" and use it to fill the column "CONDITION"
h1_cols <- grep("_h_1$", names(Set_long), value = TRUE)
# Creating the condition
Set_long_filtered <- Set_long %>%
rowwise() %>% # process each row individually
mutate(
# Count how many of the h1_cols are non-empty ("")
non_empty_count = sum(c_across(all_of(h1_cols)) != ""),
# Determine the Condition based on non-empty count
Condition_2 = if (non_empty_count == 1) {
# Get the name of the column that is non-empty
selected_col <- h1_cols[which(c_across(all_of(h1_cols)) != "")]
# Remove the "_h_1" suffix to get the condition (e.g., "NRS" from "NRS_h_1")
str_remove(selected_col, "_h_1")
} else {
"Error"
}
) %>%
ungroup() %>% # exit rowwise mode
dplyr::select(-non_empty_count) %>% distinct(ResponseId, .keep_all=T) # remove the helper column if no longer needed
### RESPONSES TO ATTENTION CHECKS MATCH THE CONDITION
# Now I'll neatly create the main data frame. I create a helper function that extract all non empty values and apply it on all rows ending with our codes:
# - _h_1 is heroism rating, _m_1_1 is first item of MC1, m_1_2, is second item of mc2, _at is attitude etc.
# Helper function: Given a vector, return the only non-empty element (or NA if none/few found)
extract_value <- function(x) {
non_empty <- x[x != ""]
if(length(non_empty) == 1) return(non_empty)
else return(NA)
}
# Create the final data frame
final_df <- Set_long_filtered %>%
mutate(
# Extract the non-empty value from each group of columns:
Heroism = apply(dplyr::select(., ends_with("_h_1")), 1, extract_value),
Selfless = apply(dplyr::select(., ends_with("m_1")), 1, extract_value),
Helpfulness = apply(dplyr::select(., ends_with("m_2")), 1, extract_value),
Brave = apply(dplyr::select(., ends_with("m_3")), 1, extract_value),
Danger = apply(dplyr::select(., ends_with("m_4")), 1, extract_value),
Attitude = apply(dplyr::select(., matches("(_at)$")), 1, extract_value)
) %>%
# Select only the required columns in the final data frame
dplyr::select(ResponseId, Condition, Condition_2, Heroism, Danger, Helpfulness, Brave, Selfless, Attitude, Credibility, Gender, Age)
# Recoding values:
final_df<-subset(final_df, final_df$Condition_2 != "Error")
final_df <- final_df %>%
# 1. Split Condition into Job, Motivation, and Help
mutate(
Job = str_sub(Condition_2, 1, 1),
Motivation = if_else(grepl("Selfless", Condition_2, ignore.case = TRUE), "Selfless", "Selfish"),
Help = if_else(grepl("Unhelp", Condition_2, ignore.case = TRUE), "Unhelp", "Help") ) %>%
# 2. Dummy code Motivation and Help: R -> 0.5, B -> -0.5; H -> 0.5, S -> -0.5
mutate(
Motivation_dummy = case_when(
Motivation == "Selfless" ~ 0.5,
Motivation == "Selfish" ~ -0.5,
TRUE ~ NA_real_
),
Help_dummy = case_when(
Help == "Help" ~ 0.5,
Help == "Unhelp" ~ -0.5,
TRUE ~ NA_real_
)
) %>%
# 3. Recode rating items (HeroismScore, MC1_1, MC1_2, MC2_1, MC2_2)
mutate_at(vars(Heroism, Danger, Helpfulness, Brave, Selfless),
~ case_when(
. == "1 - Strongly disagree" ~ "1",
. == "7 - Strongly agree" ~ "7",
TRUE ~ .
)) %>%
# Optionally convert these recoded columns to numeric
mutate_at(vars(Heroism, Danger, Helpfulness,Brave, Selfless), as.numeric) %>%
# 4. Recode Attitude values
mutate(
Attitude = case_when(
Attitude == "Very negative" ~ 1,
Attitude == "Quite negative" ~ 2,
Attitude == "Somewhat negative" ~ 3,
Attitude == "Neutral" ~ 4,
Attitude == "Somewhat positive" ~ 5,
Attitude == "Quite positive" ~ 6,
Attitude == "Very positive" ~ 7,
TRUE ~ NA_real_
)
)
#final_df$Part_Job <- Demographics$JOB
Set<-final_df
First, let’s get an idea of the demographics in our sample.
Demographics$flag_inconsistent <- (Demographics$Job_match_6 == "None of the above") &
(Demographics$Job_match_1 != "" | Demographics$Job_match_2 != "" | Demographics$Job_match_3 != "" |
Demographics$Job_match_4 != "" | Demographics$Job_match_5 != "")
paste0("816 participants took part in the study. Mean age in the sample is ", mean(as.numeric(Set$Age)), ", SD = ", sd(as.numeric(Set$Age)))
## [1] "816 participants took part in the study. Mean age in the sample is 46.389705882353, SD = 15.4076737127492"
## Gender
Set %>% group_by(Gender) %>% summarise(N=n()) %>%
ggplot(aes(x=Gender,y=N,fill=Gender))+
geom_bar(stat = 'identity',color='black')+
scale_y_continuous(labels = scales::comma_format(accuracy = 2))+
geom_text(aes(label=N),vjust=-0.25,fontface='bold')+
theme_bw()+
theme(axis.text = element_text(color='black',face='bold'),
axis.title = element_text(color='black',face='bold'),
legend.text = element_text(color='black',face='bold'),
legend.title = element_text(color='black',face='bold')) +
ggtitle("Gender distribution")
## Occupations
#colnames(Set)
#jobs <- unlist(Demographics[-which(Demographics$flag_inconsistent == T), 4:10]) # Make a long list of all jobs that were named
jobs <- unlist(Demographics[, 3:9]) # Make a long list of all jobs that were named
jobs <- jobs[jobs != ""] # Remove empty strings
job_df <- as.data.frame(table(jobs))
colnames(job_df) <- c("Job", "Count")
ggplot(job_df, aes(x = Job, y = Count, fill = Job)) +
geom_bar(stat = 'identity',color='black')+
scale_y_continuous(labels = scales::comma_format(accuracy = 2))+
geom_text(aes(label=Count),vjust=-0.25,fontface='bold')+
theme_bw()+
theme(axis.text = element_text(color='black',face='bold'),
axis.title = element_text(color='black',face='bold'),
legend.text = element_text(color='black',face='bold'),
legend.title = element_text(color='black',face='bold')) +
ggtitle("Job distribution")
Replicating our previous study (https://jeanmoneger.com/uploads/report_gw1_april2025), we found that firefighters are the apex of heroism, and psychiatrists and welders, not so much.
# 1. Create a summary dataframe for facet annotations (mean and SD)
df_summary <- Set %>%
group_by(Job) %>%
summarize(
mean_score = mean(Heroism, na.rm = TRUE),
sd_score = sd(Heroism, na.rm = TRUE),
.groups = "drop"
)
# 2. Create the ggplot using the long format data
ggplot(Set, aes(x = Heroism)) +
geom_histogram(aes(fill = after_stat(count)),
binwidth = 1,
color = "black", show.legend = FALSE) +
facet_grid( ~ Job, scales = "free") +
scale_fill_gradientn(
colours = brewer.pal(9, "YlOrBr"),
name = "Count"
) +
labs(
title = "Histograms of Heroism by Occupation",
x = "Score",
y = "Count"
) +
# Annotate each facet with the mean and standard deviation
geom_text(data = df_summary,
aes(x = 7, y = Inf,
label = paste0("Mean = ", round(mean_score, 2),
"\nSD = ", round(sd_score, 2))),
vjust = 1.5, hjust = 1.1, size = 3) +
theme_classic() +
theme(panel.grid.major.y = element_line(linewidth = 0.5),
panel.grid.minor.y = element_line(linewidth = 0.5))
It is important to keep in mind that ALL occupations were framed as exposed to danger in the current study. For this reason, perceived exposure to danger is generally quite high - especially for firefighters and welders.
Set$Credibility <- as.numeric(Set$Credibility)
df_long <- Set %>%
pivot_longer(
cols = c(Heroism, Danger, Helpfulness, Attitude, Credibility),
names_to = "Variable",
values_to = "Score"
)
# 2. Compute summary statistics by Job and Variable
df_long2<- subset(df_long, df_long$Variable != "Credibility")
df_summary <- df_long %>%
group_by(Job, Variable) %>%
summarize(
mean_score = mean(Score, na.rm = TRUE),
sd_score = sd(Score, na.rm = TRUE),
.groups = "drop"
)
df_summary2 <- df_long2 %>%
group_by(Job, Variable) %>%
summarize(
mean_score = mean(Score, na.rm = TRUE),
sd_score = sd(Score, na.rm = TRUE),
.groups = "drop"
)
# 3. Create the ggplot using the long format data
ggplot(df_long2, aes(x = Score)) +
geom_histogram(aes(fill = after_stat(count)),
binwidth = 1,
color = "black", show.legend = FALSE) +
facet_grid(Variable ~ Job, scales = "free") +
scale_fill_gradientn(
colours = brewer.pal(9, "YlOrBr"),
name = "Count"
) +
labs(
title = "Histograms of Variable by Occupation",
x = "Score",
y = "Count"
) +
# Annotate each facet with the mean and standard deviation
geom_text(data = df_summary2,
aes(x = 7, y = Inf,
label = paste0("Mean = ", round(mean_score, 2),
"\nSD = ", round(sd_score, 2))),
vjust = 1.5, hjust = 1.1, size = 3) +
theme_classic() +
theme(
panel.grid.major.y = element_line(linewidth = 0.5),
panel.grid.minor.y = element_line(linewidth = 0.5)
)
As registered, manipulating helpful frames should influence perceived helpfulness; and manipulating altruistic motivation frames should influence perceived selflessness.
To what extent do you believe the target occupation helps people? – Helpfulness condition should increase evaluation of help provided
The Welch Two Sample t-test testing the difference of perceived helpfulness by Help condition (mean in group Help = 6.36, mean in group Unhelp = 5.10) suggests that the effect is positive, statistically significant, and large (difference = 1.26, 95% CI [1.09, 1.43], t(632.43) = 14.53, p < .001; Cohen’s d = 1.02, 95% CI [0.87, 1.17])
Set$Motivation <- factor(Set$Motivation, levels = c("Selfless", "Selfish"))
t.test(Set$Helpfulness ~Set$Help)
##
## Welch Two Sample t-test
##
## data: Set$Helpfulness by Set$Help
## t = 14.53, df = 632.43, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group Help and group Unhelp is not equal to 0
## 95 percent confidence interval:
## 1.092808 1.434348
## sample estimates:
## mean in group Help mean in group Unhelp
## 6.361858 5.098280
## Cohen's d | 95% CI
## ------------------------
## 1.02 | [0.87, 1.17]
##
## - Estimated using un-pooled SD.
my_sum <- Set %>%
group_by(Help) %>%
summarise(
n=n(),
mean=mean(Helpfulness),
sd=sd(Helpfulness)
) %>%
mutate( se=sd/sqrt(n))
# Standard deviation
ggplot(my_sum) +
geom_bar( aes(x=Help, y=mean), stat="identity", fill="forestgreen", alpha=0.5) +
geom_errorbar( aes(x=Help, ymin=mean-se, ymax=mean+se), width=0.4, colour="orange", alpha=0.9, size=1.5) +
ggtitle("Helpfulness ~ Motivation type (H = Helping; S = Self-improve); bars are SE")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
The Welch Two Sample t-test testing the difference of perceived selflessness by Altruistic motivation condition (mean in group Selfless = 5.28, mean in group Selfish = 4.85) suggests that the effect is positive, statistically significant, and small (difference = 0.43, 95% CI [0.22, 0.63], t(810.46) = 4.10, p < .001; Cohen’s d = 0.29, 95% CI [0.15, 0.42]).
##
## Welch Two Sample t-test
##
## data: Set$Selfless by Set$Motivation
## t = 4.0986, df = 810.46, p-value = 4.575e-05
## alternative hypothesis: true difference in means between group Selfless and group Selfish is not equal to 0
## 95 percent confidence interval:
## 0.2236695 0.6348156
## sample estimates:
## mean in group Selfless mean in group Selfish
## 5.280098 4.850856
## Cohen's d | 95% CI
## ------------------------
## 0.29 | [0.15, 0.42]
##
## - Estimated using pooled SD.
my_sum <- Set %>%
group_by(Motivation) %>%
summarise(
n=n(),
mean=mean(Selfless),
sd=sd(Selfless)
) %>%
mutate( se=sd/sqrt(n))
# Standard deviation
ggplot(my_sum) +
geom_bar( aes(x=Motivation, y=mean), stat="identity", fill="forestgreen", alpha=0.5) +
geom_errorbar( aes(x=Motivation, ymin=mean-se, ymax=mean+se), width=0.4, colour="orange", alpha=0.9, size=1.5) +
ggtitle("Selfless ~ Motivation type; bars are SE")
It is interesting to compare the effect of Helpfulness motivation on Perceived selflessness, and the effect of Selflessness manipulation on perceived helpfulness. Indeed, whereas manipulating selflessness has no effect on perceived helpfulness (people understand that being selfless does not mean being helpful) – manipulating helpfulness influenced the perception of selflessness, with a very similar magnitude as the manipulation of selflessness (!!) –> People understands that, regardless of perceived intentions and self-reported selflessness, an helpful person is a selfless person.
The Welch Two Sample t-test testing the difference of perceived helpfulness by Selflessness condition (mean in group Selfless = 5.80, mean in group Selfish = 5.66) suggests that the effect is positive, statistically not significant, and very small (difference = 0.14, 95% CI [-0.05, 0.33], t(813.94) = 1.47, p = 0.141; Cohen’s d = 0.10, 95% CI [-0.03, 0.24])
The Welch Two Sample t-test testing the difference of perceived selflessness by Helpfulness condition (mean in group Help = 5.29, mean in group Unhelp = 4.84) suggests that the effect is positive, statistically significant, and small (difference = 0.46, 95% CI [0.25, 0.66], t(812.07) = 4.38, p < .001; Cohen’s d = 0.31, 95%CI [0.17, 0.44])
##
## Welch Two Sample t-test
##
## data: Set$Selfless by Set$Help
## t = 4.3784, df = 812.07, p-value = 1.352e-05
## alternative hypothesis: true difference in means between group Help and group Unhelp is not equal to 0
## 95 percent confidence interval:
## 0.2526814 0.6633540
## sample estimates:
## mean in group Help mean in group Unhelp
## 5.293399 4.835381
## Cohen's d | 95% CI
## ------------------------
## 0.31 | [0.17, 0.44]
##
## - Estimated using un-pooled SD.
## Effect sizes were labelled following Cohen's (1988) recommendations.
##
## The Welch Two Sample t-test testing the difference of Set$Helpfulness by
## Set$Motivation (mean in group Selfless = 5.80, mean in group Selfish = 5.66)
## suggests that the effect is positive, statistically not significant, and very
## small (difference = 0.14, 95% CI [-0.05, 0.33], t(813.94) = 1.47, p = 0.141;
## Cohen's d = 0.10, 95% CI [-0.03, 0.24])
##
## Welch Two Sample t-test
##
## data: Set$Helpfulness by Set$Motivation
## t = 1.4718, df = 813.94, p-value = 0.1415
## alternative hypothesis: true difference in means between group Selfless and group Selfish is not equal to 0
## 95 percent confidence interval:
## -0.04780704 0.33439325
## sample estimates:
## mean in group Selfless mean in group Selfish
## 5.803440 5.660147
## Cohen's d | 95% CI
## -------------------------
## 0.10 | [-0.03, 0.24]
##
## - Estimated using pooled SD.
We included a credibility check. Participants were asked at the end of the study, “to what extent they found the information presented believable”. Scores range from 1 to 7. We can check the distribution of the credibility rating.
Participants report that the manipulations were overall quite credible. The least credible condition is Selfish and unhelpful psychiatrists. In particular, people might not believe psychiatrists are selfish.
Cred <- subset(df_long, df_long$Variable == "Credibility")
df_summary <- Cred %>%
group_by(Job, Help, Motivation) %>%
summarize(
mean_score = mean(Score, na.rm = TRUE),
sd_score = sd(Score, na.rm = TRUE),
.groups = "drop"
)
ggplot(Cred, aes(x = Score)) +
geom_histogram(aes(fill = after_stat(count)),
binwidth = 1,
color = "black", show.legend = FALSE) +
facet_grid(
Help + Motivation ~ Job,
scales = "free"
) +
scale_fill_gradientn(
colours = RColorBrewer::brewer.pal(9, "YlOrBr"),
name = "Count"
) +
labs(
title = "Frequency of Credibility Scores by Job, Help & Motivation",
x = "Score", y = "Count"
) +
geom_text(data = df_summary,
aes(x = 7, y = Inf,
label = paste0("Mean = ", round(mean_score, 2),
"\nSD = ", round(sd_score, 2))),
vjust = 1.5, hjust = 1.1, size = 3) +
theme_classic() +
theme(
panel.grid.major.y = element_line(linewidth = 0.5),
panel.grid.minor.y = element_line(linewidth = 0.5)
)
SEE REGISTRATION
We will compare the two models (with and without accounting for the occupation condition) to quantify the extent to which the effect of our manipulation is explained by normative differences in occupation type: A significant reduction in the other predictors’ main effect sizes when controlling for Job Type would indicate that these effects are partially dependent on normative evaluations of the job type.
We will base our conclusions regarding the effects of our manipulations irrespective of the job types (i.e., across all jobs) on the Model 1. Model 2 is used to quantify normative evaluation effects in our effects.
mod <-lm(Heroism ~ Help_dummy * Motivation_dummy, data = Set)
mod_cov<-lm(Heroism ~ Help_dummy* Motivation_dummy + Job, data = Set)
anova(mod, mod_cov)
## Analysis of Variance Table
##
## Model 1: Heroism ~ Help_dummy * Motivation_dummy
## Model 2: Heroism ~ Help_dummy * Motivation_dummy + Job
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 1731.8
## 2 810 1419.9 2 311.86 88.952 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
==> Occupation significantly accounts for Heroism.
Before running the model, we look at some diagnostic plots. Residuals seems normal-ish (qqplot) and homogeneous. As always, there is evidence of extreme Cook’s values. We’ll run the standard registered model, but will also run a robust and a non linear model to assess robustness of our inferences.
In our standard OLS model:
- The effect of Helpfulness condition (dummy coded) is statistically significant and positive (beta = 0.68, 95% CI [0.48, 0.88], t(812) = 6.61, p < .001; Std. beta = 0.23, 95% CI [0.16, 0.29])
- The effect of Motivation condition (dummy coded) is statistically non-significant and positive (beta = 0.19, 95% CI [-9.18e-03, 0.39], t(812) = 1.87, p = 0.061; Std. beta = 0.06, 95% CI [-2.94e-03, 0.13])
So, as expected – we replicate a weak effect of our altruistic motivation condition (see previous report https://jeanmoneger.com/uploads/report_gw1_april2025). However – Yay – Helpfulness manipulation does influence heroism.
It is quite fascinating: heroes help people regardless of their motivation to help people. It is actually not that relevant to heroism perception whether the workers want to help or not. What matters is whether they help. This is what we wanted to demonstrate.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy, data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.3122 -0.8276 0.1724 1.2157 2.2157
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.14401 0.05112 100.618 < 2e-16 ***
## Help_dummy 0.67613 0.10225 6.613 6.84e-11 ***
## Motivation_dummy 0.19152 0.10225 1.873 0.0614 .
## Help_dummy:Motivation_dummy 0.29649 0.20450 1.450 0.1475
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.46 on 812 degrees of freedom
## Multiple R-squared: 0.05724, Adjusted R-squared: 0.05376
## F-statistic: 16.43 on 3 and 812 DF, p-value: 2.243e-10
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy and Motivation_dummy (formula: Heroism ~ Help_dummy *
## Motivation_dummy). The model explains a statistically significant and weak
## proportion of variance (R2 = 0.06, F(3, 812) = 16.43, p < .001, adj. R2 =
## 0.05). The model's intercept, corresponding to Help_dummy = 0 and
## Motivation_dummy = 0, is at 5.14 (95% CI [5.04, 5.24], t(812) = 100.62, p <
## .001). Within this model:
##
## - The effect of Help dummy is statistically significant and positive (beta =
## 0.68, 95% CI [0.48, 0.88], t(812) = 6.61, p < .001; Std. beta = 0.23, 95% CI
## [0.16, 0.29])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.19, 95% CI [-9.18e-03, 0.39], t(812) = 1.87, p = 0.061; Std. beta =
## 0.06, 95% CI [-2.94e-03, 0.13])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.30, 95% CI [-0.10, 0.70], t(812) = 1.45, p = 0.147; Std.
## beta = 0.05, 95% CI [-0.02, 0.12])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
Partial eta squared:
ModIII <- car::Anova(mod, type = "III")
eta_squared(ModIII, partial = TRUE, alternative = "two.sided")
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## -----------------------------------------------------------
## Help_dummy | 0.05 | [0.03, 0.08]
## Motivation_dummy | 4.30e-03 | [0.00, 0.02]
## Help_dummy:Motivation_dummy | 2.58e-03 | [0.00, 0.01]
Cohen’s d:
d_help<-effectsize::cohens_d(Set$Heroism ~ Set$Help)
d_self<-effectsize::cohens_d(Set$Heroism ~ Set$Motivation)
results <- data.frame(
Predictor = c("Helpfulness", "Selflessness"),
Cohens_d = c(round(d_help$Cohens_d, 2), round(d_self$Cohens_d, 2)),
CI = c(
paste0("[", round(d_help$CI_low, 2), ", ", round(d_help$CI_high, 2), "]"),
paste0("[", round(d_self$CI_low, 2), ", ", round(d_self$CI_high, 2), "]")
)
)
# Render the table
kable(results, caption = "Cohen's d for Heroism by Predictor", align = "c")
Predictor | Cohens_d | CI |
---|---|---|
Helpfulness | 0.46 | [0.32, 0.6] |
Selflessness | 0.13 | [-0.01, 0.27] |
Our main model use ordinal variable as an outcome - it is more appropriate, but less ordinary, to run a Cumulative Link model.
Moreover, there is evidence of influential cases on the basis of Cook’s distance. Using a robust version of the linear model might be indicated.
In order to assess the robustness of our results, we will run the model using 1) a CLM model, and 2) a robust linear model.
Because the main outcome is an ordinal variable (using integrals), it is unclear whether the model is linear or not. We can fit a cumulative link model, ideal for ordinal outcomes, to assess to what extent this changes our inferences.
# # Fitted values from your model
# fitted_vals <- fitted(mod)
#
# # Plot observed values against fitted values
# plot(fitted_vals, Set$Heroism,
# xlab = "Fitted Values",
# ylab = "Observed Heroes",
# main = "Observed vs Fitted Values")
# abline(0, 1, col = "blue", lty = 2)
summary(clm(ordered(Heroism) ~ Help_dummy*Motivation_dummy, data = Set, link = "logit"))
## formula: ordered(Heroism) ~ Help_dummy * Motivation_dummy
## data: Set
##
## link threshold nobs logLik AIC niter max.grad cond.H
## logit flexible 816 -1372.42 2762.85 6(0) 3.09e-12 7.1e+01
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## Help_dummy 0.8003 0.1266 6.319 2.63e-10 ***
## Motivation_dummy 0.2649 0.1247 2.125 0.0336 *
## Help_dummy:Motivation_dummy 0.3136 0.2490 1.260 0.2078
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Threshold coefficients:
## Estimate Std. Error z value
## 1|2 -4.57814 0.33578 -13.634
## 2|3 -2.67982 0.13972 -19.179
## 3|4 -1.96191 0.10557 -18.585
## 4|5 -0.76066 0.07608 -9.998
## 5|6 0.22896 0.07167 3.195
## 6|7 1.26056 0.08489 14.850
==> It does not influence our inferences.
As registered: we’ll check for outliers by comparing robust vs non robust models.
Cook’s distance plot does show that there are some influential cases:
To account for potential influential cases, we run Robust regression
(huber weighted, MM-estimates, tuned to achieve 50% breakdown and 95%
Gaussian efficiency).
##
## Call:
## lmrob(formula = Set$Heroism ~ Set$Help_dummy * Set$Motivation_dummy)
## \--> method = "MM"
## Residuals:
## Min 1Q Median 3Q Max
## -4.38635 -0.91267 0.08733 1.17555 2.17555
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.21183 0.05526 94.310 < 2e-16 ***
## Set$Help_dummy 0.68653 0.10750 6.386 2.86e-10 ***
## Set$Motivation_dummy 0.21285 0.10766 1.977 0.0484 *
## Set$Help_dummy:Set$Motivation_dummy 0.24927 0.21505 1.159 0.2467
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Robust residual standard error: 1.51
## Multiple R-squared: 0.05734, Adjusted R-squared: 0.05385
## Convergence in 10 IRWLS iterations
##
## Robustness weights:
## 51 weights are ~= 1. The remaining 765 ones are summarized as
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.3790 0.8848 0.9455 0.9147 0.9850 0.9988
## Algorithmic parameters:
## tuning.chi bb tuning.psi refine.tol
## 1.548e+00 5.000e-01 4.685e+00 1.000e-07
## rel.tol scale.tol solve.tol zero.tol
## 1.000e-07 1.000e-10 1.000e-07 1.000e-10
## eps.outlier eps.x warn.limit.reject warn.limit.meanrw
## 1.225e-04 1.819e-12 5.000e-01 5.000e-01
## nResample max.it best.r.s k.fast.s k.max
## 500 50 2 1 200
## maxit.scale trace.lev mts compute.rd fast.s.large.n
## 200 0 1000 0 2000
## psi subsampling cov
## "bisquare" "nonsingular" ".vcov.avar1"
## compute.outlier.stats
## "SM"
## seed : int(0)
paste0("Weights applied to residuals - a value of zero would mean that the observation was discarded, a value of 1 means no re-weighting")
## [1] "Weights applied to residuals - a value of zero would mean that the observation was discarded, a value of 1 means no re-weighting"
==> It does not influence our
inferences.
How does occupation change the effect of our predictors on Heroism? i.e., are these effects stronger for welders? Firefighters? Psychiatrists?
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Help_dummy 1 93.16 93.158 55.5299 2.380e-13 ***
## Motivation_dummy 1 7.51 7.511 4.4772 0.03466 *
## Job 2 311.46 155.728 92.8269 < 2.2e-16 ***
## Help_dummy:Motivation_dummy 1 4.89 4.890 2.9150 0.08814 .
## Help_dummy:Job 2 67.19 33.596 20.0261 3.254e-09 ***
## Motivation_dummy:Job 2 0.93 0.466 0.2775 0.75774
## Help_dummy:Motivation_dummy:Job 2 2.99 1.496 0.8917 0.41034
## Residuals 804 1348.81 1.678
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
==> There is evidence that our Helpfulness manipulation is ingluenced by occupation. However, the same cannot be said for our selflessness manipulation. Let’s investigate how effects are modulated within each occupation.
The table below sum up key statistics for each manipulation within each occupation.
Firef <- subset(Set, Set$Job == "F")
Psych <- subset(Set, Set$Job == "P")
Weld <- subset(Set, Set$Job == "W")
# A list of our models
mods <- list(
Firefighter = lm(Heroism ~ Motivation_dummy * Help_dummy, data = Firef),
Psychologist = lm(Heroism ~ Motivation_dummy * Help_dummy, data = Psych),
Welder = lm(Heroism ~ Motivation_dummy * Help_dummy, data = Weld)
)
# tidy + bind + format
table1 <- bind_rows(
lapply(names(mods), function(occ) {
broom::tidy(mods[[occ]], conf.int = TRUE) %>%
mutate(Occupation = occ)
}),
.id = NULL
) %>%
filter(term != "(Intercept)") %>% # drop intercepts
mutate(
CI = paste0("[", round(conf.low, 2), ", ", round(conf.high, 2), "]"), # Format a CI string
Beta = round(estimate, 2),
t = round(statistic, 2),
p = sprintf("%.3f", p.value)
) %>%
select(
Occupation,
Predictor = term,
Beta,
`95% CI` = CI,
t,
`p‐value` = p
)
# render
kable(
table1,
caption = "Table 1. Regression coefficients by occupation",
align = "c"
)
Occupation | Predictor | Beta | 95% CI | t | p‐value |
---|---|---|---|---|---|
Firefighter | Motivation_dummy | 0.16 | [-0.13, 0.44] | 1.08 | 0.281 |
Firefighter | Help_dummy | 0.18 | [-0.1, 0.47] | 1.27 | 0.205 |
Firefighter | Motivation_dummy:Help_dummy | 0.60 | [0.03, 1.17] | 2.09 | 0.038 |
Psychologist | Motivation_dummy | 0.27 | [-0.06, 0.59] | 1.60 | 0.111 |
Psychologist | Help_dummy | 0.38 | [0.05, 0.7] | 2.26 | 0.025 |
Psychologist | Motivation_dummy:Help_dummy | 0.35 | [-0.31, 1] | 1.04 | 0.300 |
Welder | Motivation_dummy | 0.11 | [-0.21, 0.42] | 0.67 | 0.506 |
Welder | Help_dummy | 1.49 | [1.17, 1.8] | 9.29 | 0.000 |
Welder | Motivation_dummy:Help_dummy | 0.01 | [-0.62, 0.64] | 0.02 | 0.981 |
d_F_Help <- cohens_d(Heroism ~ Help, data = Firef)
d_F_Mot <- cohens_d(Heroism ~ Motivation, data = Firef)
d_P_Help <- cohens_d(Heroism ~ Help, data = Psych)
d_P_Mot <- cohens_d(Heroism ~ Motivation, data = Psych)
d_W_Help <- cohens_d(Heroism ~ Help, data = Weld)
d_W_Mot <- cohens_d(Heroism ~ Motivation, data = Weld)
# assemble into a single data.frame
table2 <- bind_rows(
data.frame(
Occupation = "Firefighter",
Predictor = "Helpfulness",
d = round(d_F_Help$Cohens_d, 2),
CI = paste0("[", round(d_F_Help$CI_low, 2), ", ", round(d_F_Help$CI_high, 2), "]")
),
data.frame(
Occupation = "Firefighter",
Predictor = "Motivation",
d = round(d_F_Mot$Cohens_d, 2),
CI = paste0("[", round(d_F_Mot$CI_low, 2), ", ", round(d_F_Mot$CI_high, 2), "]")
),
data.frame(
Occupation = "Psychologist",
Predictor = "Helpfulness",
d = round(d_P_Help$Cohens_d, 2),
CI = paste0("[", round(d_P_Help$CI_low, 2), ", ", round(d_P_Help$CI_high, 2), "]")
),
data.frame(
Occupation = "Psychologist",
Predictor = "Motivation",
d = round(d_P_Mot$Cohens_d, 2),
CI = paste0("[", round(d_P_Mot$CI_low, 2), ", ", round(d_P_Mot$CI_high, 2), "]")
),
data.frame(
Occupation = "Welder",
Predictor = "Helpfulness",
d = round(d_W_Help$Cohens_d, 2),
CI = paste0("[", round(d_W_Help$CI_low, 2), ", ", round(d_W_Help$CI_high, 2), "]")
),
data.frame(
Occupation = "Welder",
Predictor = "Motivation",
d = round(d_W_Mot$Cohens_d, 2),
CI = paste0("[", round(d_W_Mot$CI_low, 2), ", ", round(d_W_Mot$CI_high, 2), "]")
)
) %>%
rename(`Cohen's d` = d)
# render
kable(
table2,
caption = "Table 2. Cohen’s d by occupation and predictor",
align = "c"
)
Occupation | Predictor | Cohen’s d | CI |
---|---|---|---|
Firefighter | Helpfulness | 0.15 | [-0.08, 0.39] |
Firefighter | Motivation | 0.13 | [-0.11, 0.37] |
Psychologist | Helpfulness | 0.27 | [0.03, 0.51] |
Psychologist | Motivation | 0.19 | [-0.05, 0.42] |
Welder | Helpfulness | 1.14 | [0.88, 1.39] |
Welder | Motivation | 0.09 | [-0.15, 0.33] |
The Helpfulness manipulation is effective for psychiatrists and welders (particularly welders).
However, it proves ineffective in Firefighters.
In all likelihood - protecting buildings is still helping people.
We can explore the robustness of our inferences by using attitude or credibility as covariate. Basically, this will test whether our effect(s) are conditioned on attitude (see Halo effect) or credibility of the manipulation. In the previous study, we found that selflessness manipulation was conditionned on attitude and credibility, suggestion mediation effects whereby framing selflessness influenced perceived heroism through influencing attitude. In itself, it’s not a problem – but we’d rather find a component that has a direct effect on heroism, that is, a component that is part of the essential definition of heroism.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Attitude),
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.9065 -0.3620 0.0017 0.8499 3.7740
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.14434 0.03883 132.474 < 2e-16 ***
## Help_dummy 0.25473 0.07956 3.202 0.00142 **
## Motivation_dummy 0.03309 0.07794 0.425 0.67129
## scale(Attitude) 0.97534 0.03994 24.421 < 2e-16 ***
## Help_dummy:Motivation_dummy 0.24991 0.15534 1.609 0.10806
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.109 on 811 degrees of freedom
## Multiple R-squared: 0.4567, Adjusted R-squared: 0.4541
## F-statistic: 170.5 on 4 and 811 DF, p-value: < 2.2e-16
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Attitude (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Attitude)). The model explains a statistically
## significant and substantial proportion of variance (R2 = 0.46, F(4, 811) =
## 170.46, p < .001, adj. R2 = 0.45). The model's intercept, corresponding to
## Help_dummy = 0, Motivation_dummy = 0 and Attitude = 0, is at 5.14 (95% CI
## [5.07, 5.22], t(811) = 132.47, p < .001). Within this model:
##
## - The effect of Help dummy is statistically significant and positive (beta =
## 0.25, 95% CI [0.10, 0.41], t(811) = 3.20, p = 0.001; Std. beta = 0.08, 95% CI
## [0.03, 0.14])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.03, 95% CI [-0.12, 0.19], t(811) = 0.42, p = 0.671; Std. beta = 0.01,
## 95% CI [-0.04, 0.06])
## - The effect of Attitude is statistically significant and positive (beta =
## 0.98, 95% CI [0.90, 1.05], t(811) = 24.42, p < .001; Std. beta = 0.65, 95% CI
## [0.60, 0.70])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.25, 95% CI [-0.06, 0.55], t(811) = 1.61, p = 0.108; Std.
## beta = 0.04, 95% CI [-9.17e-03, 0.09])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
==> Our Helpfulness manipulation is robust to accounting for Attitude, i.e., the effect of helpfulness on heroism might be direct (rather than mediated through attitude). Helpfulness can influence Attitude-free ratings of heroism.
Replicating our previous study, the same cannot be said about Selflessness conditions -> The effect of selflessness is nullified when accounting for attitude, suggesting a mediation pattern.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Credibility),
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.3843 -0.8267 0.1733 1.0158 3.2885
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.14403 0.04939 104.143 < 2e-16 ***
## Help_dummy 0.55376 0.10007 5.534 4.23e-08 ***
## Motivation_dummy 0.08292 0.09980 0.831 0.4063
## scale(Credibility) 0.38900 0.05069 7.674 4.80e-14 ***
## Help_dummy:Motivation_dummy 0.40849 0.19811 2.062 0.0395 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.411 on 811 degrees of freedom
## Multiple R-squared: 0.1211, Adjusted R-squared: 0.1167
## F-statistic: 27.93 on 4 and 811 DF, p-value: < 2.2e-16
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Credibility (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Credibility)). The model explains a statistically
## significant and weak proportion of variance (R2 = 0.12, F(4, 811) = 27.93, p <
## .001, adj. R2 = 0.12). The model's intercept, corresponding to Help_dummy = 0,
## Motivation_dummy = 0 and Credibility = 0, is at 5.14 (95% CI [5.05, 5.24],
## t(811) = 104.14, p < .001). Within this model:
##
## - The effect of Help dummy is statistically significant and positive (beta =
## 0.55, 95% CI [0.36, 0.75], t(811) = 5.53, p < .001; Std. beta = 0.18, 95% CI
## [0.12, 0.25])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.08, 95% CI [-0.11, 0.28], t(811) = 0.83, p = 0.406; Std. beta = 0.03,
## 95% CI [-0.04, 0.09])
## - The effect of Credibility is statistically significant and positive (beta =
## 0.39, 95% CI [0.29, 0.49], t(811) = 7.67, p < .001; Std. beta = 0.26, 95% CI
## [0.19, 0.33])
## - The effect of Help dummy × Motivation dummy is statistically significant and
## positive (beta = 0.41, 95% CI [0.02, 0.80], t(811) = 2.06, p = 0.040; Std. beta
## = 0.07, 95% CI [3.27e-03, 0.13])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
==> Same conclusions! Our helpfulness manipulation is robust to accounting for credibility of the manipulation, meaning this effect happens independently of any effect of the manipulation on credibility (see appendix), meaning: the effect of this manipulation is not explained by the fact that some conditions are more credible than others. ___
We repeat these analyses but using Situation attributions as predictors. Our results perfectly replicate the previous study, so I will not comment on them (please see previous pilot studies: https://jeanmoneger.com/uploads/report_gw1_april2025)
Set$Danger_scale <- scale(Set$Danger)
Set$Helpfulness_scale <- scale(Set$Helpfulness)
(mod<-lm(Heroism ~ Helpfulness_scale * Danger_scale , data = Set))
##
## Call:
## lm(formula = Heroism ~ Helpfulness_scale * Danger_scale, data = Set)
##
## Coefficients:
## (Intercept) Helpfulness_scale
## 5.1144 0.7724
## Danger_scale Helpfulness_scale:Danger_scale
## 0.3867 0.1209
## Analysis of Variance Table
##
## Model 1: Heroism ~ Helpfulness_scale * Danger_scale
## Model 2: Heroism ~ Helpfulness_scale * Danger_scale + Job
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 1132.4
## 2 810 1040.5 2 91.853 35.751 1.321e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
To account for a possible Halo effect, let’s see if attitudes play a role in explaining heroism.
Set$Attitude_scale <- scale(Set$Attitude)
(mod<-lm(Heroism ~ Helpfulness_scale * Danger_scale , data = Set))
##
## Call:
## lm(formula = Heroism ~ Helpfulness_scale * Danger_scale, data = Set)
##
## Coefficients:
## (Intercept) Helpfulness_scale
## 5.1144 0.7724
## Danger_scale Helpfulness_scale:Danger_scale
## 0.3867 0.1209
##
## Call:
## lm(formula = Heroism ~ Helpfulness_scale * Danger_scale + Attitude_scale,
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.3600 -0.3650 0.1466 0.6400 3.6651
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.13051 0.03729 137.572 < 2e-16 ***
## Helpfulness_scale 0.43885 0.04387 10.004 < 2e-16 ***
## Danger_scale 0.16570 0.04226 3.921 9.56e-05 ***
## Attitude_scale 0.70034 0.04666 15.011 < 2e-16 ***
## Helpfulness_scale:Danger_scale 0.05638 0.02875 1.961 0.0502 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.045 on 811 degrees of freedom
## Multiple R-squared: 0.5176, Adjusted R-squared: 0.5152
## F-statistic: 217.5 on 4 and 811 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Model 1: Heroism ~ Helpfulness_scale * Danger_scale
## Model 2: Heroism ~ Helpfulness_scale * Danger_scale + Attitude_scale
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 1132.39
## 2 811 886.18 1 246.21 225.32 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Call:
## lm(formula = Heroism ~ Helpfulness_scale * Danger_scale, data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.1796 -0.6193 0.3633 0.8204 3.6220
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.11437 0.04211 121.443 < 2e-16 ***
## Helpfulness_scale 0.77243 0.04273 18.078 < 2e-16 ***
## Danger_scale 0.38667 0.04475 8.641 < 2e-16 ***
## Helpfulness_scale:Danger_scale 0.12092 0.03212 3.765 0.000178 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.181 on 812 degrees of freedom
## Multiple R-squared: 0.3835, Adjusted R-squared: 0.3813
## F-statistic: 168.4 on 3 and 812 DF, p-value: < 2.2e-16
## 2.5 % 97.5 %
## (Intercept) 5.03170383 5.1970316
## Helpfulness_scale 0.68855824 0.8562944
## Danger_scale 0.29883544 0.4745117
## Helpfulness_scale:Danger_scale 0.05788199 0.1839585
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Helpfulness_scale and Danger_scale (formula: Heroism ~ Helpfulness_scale *
## Danger_scale). The model explains a statistically significant and substantial
## proportion of variance (R2 = 0.38, F(3, 812) = 168.40, p < .001, adj. R2 =
## 0.38). The model's intercept, corresponding to Helpfulness_scale = 0 and
## Danger_scale = 0, is at 5.11 (95% CI [5.03, 5.20], t(812) = 121.44, p < .001).
## Within this model:
##
## - The effect of Helpfulness scale is statistically significant and positive
## (beta = 0.77, 95% CI [0.69, 0.86], t(812) = 18.08, p < .001; Std. beta = 0.51,
## 95% CI [0.46, 0.57])
## - The effect of Danger scale is statistically significant and positive (beta =
## 0.39, 95% CI [0.30, 0.47], t(812) = 8.64, p < .001; Std. beta = 0.26, 95% CI
## [0.20, 0.32])
## - The effect of Helpfulness scale × Danger scale is statistically significant
## and positive (beta = 0.12, 95% CI [0.06, 0.18], t(812) = 3.77, p < .001; Std.
## beta = 0.08, 95% CI [0.04, 0.12])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## --------------------------------------------------------------
## Helpfulness_scale | 0.29 | [0.25, 1.00]
## Danger_scale | 0.08 | [0.06, 1.00]
## Helpfulness_scale:Danger_scale | 0.02 | [0.01, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
Let’s assess this significant interaction:
## Warning: 0.999999999999999 is outside the observed range of Helpfulness_scale
Accounting for a possible halo effects by controlling for attitude, does not change our main inferences:
##
## Call:
## lm(formula = Heroism ~ Helpfulness_scale * Danger_scale + Attitude_scale,
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.3600 -0.3650 0.1466 0.6400 3.6651
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.13051 0.03729 137.572 < 2e-16 ***
## Helpfulness_scale 0.43885 0.04387 10.004 < 2e-16 ***
## Danger_scale 0.16570 0.04226 3.921 9.56e-05 ***
## Attitude_scale 0.70034 0.04666 15.011 < 2e-16 ***
## Helpfulness_scale:Danger_scale 0.05638 0.02875 1.961 0.0502 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.045 on 811 degrees of freedom
## Multiple R-squared: 0.5176, Adjusted R-squared: 0.5152
## F-statistic: 217.5 on 4 and 811 DF, p-value: < 2.2e-16
Assumption checks
Model Linearity
# Fitted values from your model
fitted_vals <- fitted(mod)
# Plot observed values against fitted values
plot(fitted_vals, Set$Heroism,
xlab = "Fitted Values",
ylab = "Observed Heroes",
main = "Observed vs Fitted Values")
abline(0, 1, col = "blue", lty = 2)
library(ordinal)
# Fit a cumulative link mixed model
Set$Heroes_ord <- factor(Set$Heroism, ordered = TRUE)
# Now fit the cumulative link mixed model
clm_mod <- clm(Heroes_ord ~ Danger_scale * Helpfulness_scale, data = Set, link = "logit")
# Summarize the cumulative link mixed model
summary(clm_mod)
## formula: Heroes_ord ~ Danger_scale * Helpfulness_scale
## data: Set
##
## link threshold nobs logLik AIC niter max.grad cond.H
## logit flexible 816 -1185.27 2388.53 6(0) 2.68e-11 9.0e+01
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## Danger_scale 0.66214 0.07131 9.285 < 2e-16 ***
## Helpfulness_scale 1.24085 0.07736 16.041 < 2e-16 ***
## Danger_scale:Helpfulness_scale 0.24902 0.04694 5.305 1.13e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Threshold coefficients:
## Estimate Std. Error z value
## 1|2 -5.63456 0.35635 -15.812
## 2|3 -3.52836 0.16930 -20.841
## 3|4 -2.63552 0.13151 -20.040
## 4|5 -1.03947 0.09036 -11.504
## 5|6 0.33391 0.08253 4.046
## 6|7 1.74565 0.10085 17.309
Cook’s distance plot:
Outlier analyses through model comparison with a robust model:
##
## Call:
## lmrob(formula = Heroism ~ Danger_scale * Helpfulness_scale, data = Set)
## \--> method = "MM"
## Residuals:
## Min 1Q Median 3Q Max
## -5.4386 -0.7440 0.2217 0.5614 3.8628
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.23539 0.04384 119.430 < 2e-16 ***
## Danger_scale 0.44333 0.04188 10.585 < 2e-16 ***
## Helpfulness_scale 0.85308 0.04708 18.118 < 2e-16 ***
## Danger_scale:Helpfulness_scale 0.15602 0.02292 6.808 1.93e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Robust residual standard error: 0.9325
## Multiple R-squared: 0.511, Adjusted R-squared: 0.5092
## Convergence in 11 IRWLS iterations
##
## Robustness weights:
## 4 observations c(260,408,622,678) are outliers with |weight| = 0 ( < 0.00012);
## 33 weights are ~= 1. The remaining 779 ones are summarized as
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.005089 0.849700 0.956900 0.878200 0.979900 0.998700
## Algorithmic parameters:
## tuning.chi bb tuning.psi refine.tol
## 1.548e+00 5.000e-01 4.685e+00 1.000e-07
## rel.tol scale.tol solve.tol zero.tol
## 1.000e-07 1.000e-10 1.000e-07 1.000e-10
## eps.outlier eps.x warn.limit.reject warn.limit.meanrw
## 1.225e-04 3.735e-11 5.000e-01 5.000e-01
## nResample max.it best.r.s k.fast.s k.max
## 500 50 2 1 200
## maxit.scale trace.lev mts compute.rd fast.s.large.n
## 200 0 1000 0 2000
## psi subsampling cov
## "bisquare" "nonsingular" ".vcov.avar1"
## compute.outlier.stats
## "SM"
## seed : int(0)
Let’s see if there is an higher-order job interaction:
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Helpfulness_scale 1 598.23 598.23 464.4557 < 2.2e-16 ***
## Danger_scale 1 86.55 86.55 67.1924 9.692e-16 ***
## Job 2 101.06 50.53 39.2294 < 2.2e-16 ***
## Helpfulness_scale:Danger_scale 1 10.57 10.57 8.2044 0.004288 **
## Helpfulness_scale:Job 2 1.54 0.77 0.5962 0.551128
## Danger_scale:Job 2 1.80 0.90 0.6987 0.497549
## Helpfulness_scale:Danger_scale:Job 2 1.63 0.82 0.6329 0.531327
## Residuals 804 1035.57 1.29
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The helpfulness effect appears to be influenced by Job. Let’s see what happens within each job. Take a look at the weak-to-non-significant interactions between danger and helpfulness.
## [1] "Firefighter analysis"
Firef<-subset(Set, Set$Job == "F")
summary(FireMod<-lm(Heroism ~ Danger_scale * Helpfulness_scale, data = Firef))
##
## Call:
## lm(formula = Heroism ~ Danger_scale * Helpfulness_scale, data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5463 -0.5463 0.4199 0.4537 2.2978
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.63675 0.07790 72.356 < 2e-16 ***
## Danger_scale 0.40825 0.08652 4.719 3.83e-06 ***
## Helpfulness_scale 0.64598 0.10693 6.041 5.10e-09 ***
## Danger_scale:Helpfulness_scale 0.03617 0.05520 0.655 0.513
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.005 on 268 degrees of freedom
## Multiple R-squared: 0.2999, Adjusted R-squared: 0.2921
## F-statistic: 38.28 on 3 and 268 DF, p-value: < 2.2e-16
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## --------------------------------------------------------------
## Danger_scale | 0.08 | [0.03, 1.00]
## Helpfulness_scale | 0.12 | [0.07, 1.00]
## Danger_scale:Helpfulness_scale | 1.60e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
In firefighters: Heroism is driven bu Helpfulness, and then Danger. No interaction.
## [1] "Psy analysis"
PsyRole<- subset(Set, Set$Job == "P")
PsyRole$Danger <- scale(PsyRole$Danger)
PsyRole$Helpfulness <- scale(PsyRole$Helpfulness)
summary(PsyMod<-lm(Heroism ~ Danger * Helpfulness, data = PsyRole))
##
## Call:
## lm(formula = Heroism ~ Danger * Helpfulness, data = PsyRole)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8074 -0.7717 0.1926 0.7176 3.4248
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.68036 0.07198 65.024 < 2e-16 ***
## Danger 0.33949 0.07293 4.655 5.08e-06 ***
## Helpfulness 0.61932 0.07319 8.462 1.67e-15 ***
## Danger:Helpfulness 0.10330 0.06233 1.657 0.0986 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.158 on 271 degrees of freedom
## Multiple R-squared: 0.3147, Adjusted R-squared: 0.3071
## F-statistic: 41.48 on 3 and 271 DF, p-value: < 2.2e-16
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## --------------------------------------------------
## Danger | 0.07 | [0.03, 1.00]
## Helpfulness | 0.21 | [0.14, 1.00]
## Danger:Helpfulness | 0.01 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## JOHNSON-NEYMAN INTERVAL
##
## When Helpfulness is INSIDE the interval [-1.27, 16.98], the slope of Danger
## is p < .05.
##
## Note: The range of observed values of Helpfulness is [-3.19, 1.04]
##
## SIMPLE SLOPES ANALYSIS
##
## Slope of Danger when Helpfulness = -1.000000e+00 (- 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.24 0.09 2.51 0.01
##
## Slope of Danger when Helpfulness = -1.316119e-16 (Mean):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.34 0.07 4.65 0.00
##
## Slope of Danger when Helpfulness = 1.000000e+00 (+ 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.44 0.10 4.54 0.00
Psychiatrists heroism is largely derived from both Helpfulness (21%) but not so much by Danger (7%). The interaction is not significant.
## [1] "Welders analysis"
Weld<- subset(Set, Set$Job == "W")
Weld$Danger <- scale(Weld$Danger)
Weld$Helpfulness <- scale(Weld$Helpfulness)
summary(WeldMod<-lm(Heroism ~ Danger * Helpfulness, data = Weld))
##
## Call:
## lm(formula = Heroism ~ Danger * Helpfulness, data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.8375 -0.7809 0.1625 0.8412 3.2324
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.67804 0.07613 61.450 < 2e-16 ***
## Danger 0.24276 0.08671 2.800 0.00549 **
## Helpfulness 0.80637 0.07710 10.459 < 2e-16 ***
## Danger:Helpfulness 0.13076 0.06032 2.168 0.03105 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.23 on 265 degrees of freedom
## Multiple R-squared: 0.3402, Adjusted R-squared: 0.3328
## F-statistic: 45.55 on 3 and 265 DF, p-value: < 2.2e-16
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## --------------------------------------------------
## Danger | 0.03 | [0.00, 1.00]
## Helpfulness | 0.29 | [0.22, 1.00]
## Danger:Helpfulness | 0.02 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## JOHNSON-NEYMAN INTERVAL
##
## When Helpfulness is OUTSIDE the interval [-14.27, -0.70], the slope of
## Danger is p < .05.
##
## Note: The range of observed values of Helpfulness is [-2.44, 1.14]
##
## SIMPLE SLOPES ANALYSIS
##
## Slope of Danger when Helpfulness = -1.000000e+00 (- 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.11 0.08 1.41 0.16
##
## Slope of Danger when Helpfulness = 2.596023e-16 (Mean):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.24 0.09 2.80 0.01
##
## Slope of Danger when Helpfulness = 1.000000e+00 (+ 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.37 0.13 2.96 0.00
Welders are heroic because of helpfulness (29%), but not that much because of the danger exposure (3%). Again Let’s keep in mind that this third pilot study is centered on the Danger condition.
We repeat these analyses but using Character attributions (brave and selfless) as predictors. Our results perfectly replicate the previous study, so I will not comment on them (please see previous pilot studies: https://jeanmoneger.com/uploads/report_gw1_april2025)
Set$Brave_scale <- scale(Set$Brave)
Set$Selfless_scale <- scale(Set$Selfless)
(mod<-lm(Heroism ~ Selfless_scale * Brave_scale , data = Set))
##
## Call:
## lm(formula = Heroism ~ Selfless_scale * Brave_scale, data = Set)
##
## Coefficients:
## (Intercept) Selfless_scale
## 5.09103 0.71840
## Brave_scale Selfless_scale:Brave_scale
## 0.48350 0.09615
## Analysis of Variance Table
##
## Model 1: Heroism ~ Selfless_scale * Brave_scale
## Model 2: Heroism ~ Selfless_scale * Brave_scale + Job
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 952.49
## 2 810 884.90 2 67.585 30.932 1.134e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
To account for a possible Halo effect, let’s see if attitudes play a role in explaining heroism.
Set$Attitude_scale <- scale(Set$Attitude)
(mod<-lm(Heroism ~ Selfless_scale * Brave_scale , data = Set))
##
## Call:
## lm(formula = Heroism ~ Selfless_scale * Brave_scale, data = Set)
##
## Coefficients:
## (Intercept) Selfless_scale
## 5.09103 0.71840
## Brave_scale Selfless_scale:Brave_scale
## 0.48350 0.09615
##
## Call:
## lm(formula = Heroism ~ Selfless_scale * Brave_scale + Attitude_scale,
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.6330 -0.4634 0.2330 0.5581 3.1123
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.08436 0.04004 126.967 < 2e-16 ***
## Selfless_scale 0.45887 0.04749 9.662 < 2e-16 ***
## Brave_scale 0.32821 0.05015 6.545 1.05e-10 ***
## Attitude_scale 0.57968 0.04524 12.814 < 2e-16 ***
## Selfless_scale:Brave_scale 0.10812 0.03619 2.988 0.0029 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9883 on 811 degrees of freedom
## Multiple R-squared: 0.5688, Adjusted R-squared: 0.5667
## F-statistic: 267.4 on 4 and 811 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Model 1: Heroism ~ Selfless_scale * Brave_scale
## Model 2: Heroism ~ Selfless_scale * Brave_scale + Attitude_scale
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 952.49
## 2 811 792.10 1 160.38 164.21 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Call:
## lm(formula = Heroism ~ Selfless_scale * Brave_scale, data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.5375 -0.5375 0.1979 0.4654 3.6473
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.09103 0.04388 116.018 <2e-16 ***
## Selfless_scale 0.71840 0.04708 15.260 <2e-16 ***
## Brave_scale 0.48350 0.05333 9.067 <2e-16 ***
## Selfless_scale:Brave_scale 0.09615 0.03965 2.425 0.0155 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.083 on 812 degrees of freedom
## Multiple R-squared: 0.4815, Adjusted R-squared: 0.4796
## F-statistic: 251.3 on 3 and 812 DF, p-value: < 2.2e-16
## 2.5 % 97.5 %
## (Intercept) 5.00489921 5.1771681
## Selfless_scale 0.62598814 0.8108069
## Brave_scale 0.37882832 0.5881781
## Selfless_scale:Brave_scale 0.01832296 0.1739754
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Selfless_scale and Brave_scale (formula: Heroism ~ Selfless_scale *
## Brave_scale). The model explains a statistically significant and substantial
## proportion of variance (R2 = 0.48, F(3, 812) = 251.33, p < .001, adj. R2 =
## 0.48). The model's intercept, corresponding to Selfless_scale = 0 and
## Brave_scale = 0, is at 5.09 (95% CI [5.00, 5.18], t(812) = 116.02, p < .001).
## Within this model:
##
## - The effect of Selfless scale is statistically significant and positive (beta
## = 0.72, 95% CI [0.63, 0.81], t(812) = 15.26, p < .001; Std. beta = 0.48, 95% CI
## [0.42, 0.54])
## - The effect of Brave scale is statistically significant and positive (beta =
## 0.48, 95% CI [0.38, 0.59], t(812) = 9.07, p < .001; Std. beta = 0.32, 95% CI
## [0.25, 0.39])
## - The effect of Selfless scale × Brave scale is statistically significant and
## positive (beta = 0.10, 95% CI [0.02, 0.17], t(812) = 2.43, p = 0.016; Std. beta
## = 0.06, 95% CI [0.01, 0.12])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ----------------------------------------------------------
## Selfless_scale | 0.22 | [0.18, 1.00]
## Brave_scale | 0.09 | [0.06, 1.00]
## Selfless_scale:Brave_scale | 7.19e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
Let’s assess this significant interaction:
Accounting for a possible halo effects by controlling for attitude, does not change our main inferences:
##
## Call:
## lm(formula = Heroism ~ Selfless_scale * Brave_scale + Attitude_scale,
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.6330 -0.4634 0.2330 0.5581 3.1123
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.08436 0.04004 126.967 < 2e-16 ***
## Selfless_scale 0.45887 0.04749 9.662 < 2e-16 ***
## Brave_scale 0.32821 0.05015 6.545 1.05e-10 ***
## Attitude_scale 0.57968 0.04524 12.814 < 2e-16 ***
## Selfless_scale:Brave_scale 0.10812 0.03619 2.988 0.0029 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9883 on 811 degrees of freedom
## Multiple R-squared: 0.5688, Adjusted R-squared: 0.5667
## F-statistic: 267.4 on 4 and 811 DF, p-value: < 2.2e-16
Assumption checks
Model Linearity
# Fitted values from your model
fitted_vals <- fitted(mod)
# Plot observed values against fitted values
plot(fitted_vals, Set$Heroism,
xlab = "Fitted Values",
ylab = "Observed Heroes",
main = "Observed vs Fitted Values")
abline(0, 1, col = "blue", lty = 2)
library(ordinal)
# Fit a cumulative link mixed model
Set$Heroes_ord <- factor(Set$Heroism, ordered = TRUE)
# Now fit the cumulative link mixed model
clm_mod <- clm(Heroes_ord ~ Brave_scale * Selfless_scale, data = Set, link = "logit")
# Summarize the cumulative link mixed model
summary(clm_mod)
## formula: Heroes_ord ~ Brave_scale * Selfless_scale
## data: Set
##
## link threshold nobs logLik AIC niter max.grad cond.H
## logit flexible 816 -1093.46 2204.92 6(0) 6.66e-11 7.5e+01
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## Brave_scale 0.95371 0.09610 9.924 < 2e-16 ***
## Selfless_scale 1.39398 0.09609 14.507 < 2e-16 ***
## Brave_scale:Selfless_scale 0.36296 0.07415 4.895 9.84e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Threshold coefficients:
## Estimate Std. Error z value
## 1|2 -5.80540 0.36382 -15.957
## 2|3 -3.72209 0.17802 -20.908
## 3|4 -2.84530 0.14114 -20.159
## 4|5 -1.17333 0.10053 -11.671
## 5|6 0.45804 0.09471 4.836
## 6|7 2.23901 0.12951 17.289
Cook’s distance plot:
Outlier analyses through model comparison with a robust model:
##
## Call:
## lmrob(formula = Heroism ~ Brave_scale * Selfless_scale, data = Set)
## \--> method = "MM"
## Residuals:
## Min 1Q Median 3Q Max
## -5.7915 -0.7091 0.2085 0.4252 3.8586
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.19452 0.04953 104.880 < 2e-16 ***
## Brave_scale 0.48398 0.06064 7.982 4.92e-15 ***
## Selfless_scale 0.83995 0.06774 12.399 < 2e-16 ***
## Brave_scale:Selfless_scale 0.09107 0.05569 1.635 0.102
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Robust residual standard error: 0.7844
## Multiple R-squared: 0.6413, Adjusted R-squared: 0.6399
## Convergence in 16 IRWLS iterations
##
## Robustness weights:
## 8 observations c(210,282,321,324,380,622,678,726)
## are outliers with |weight| = 0 ( < 0.00012);
## 15 weights are ~= 1. The remaining 793 ones are summarized as
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00289 0.84810 0.95170 0.87300 0.99360 0.99870
## Algorithmic parameters:
## tuning.chi bb tuning.psi refine.tol
## 1.548e+00 5.000e-01 4.685e+00 1.000e-07
## rel.tol scale.tol solve.tol zero.tol
## 1.000e-07 1.000e-10 1.000e-07 1.000e-10
## eps.outlier eps.x warn.limit.reject warn.limit.meanrw
## 1.225e-04 2.129e-11 5.000e-01 5.000e-01
## nResample max.it best.r.s k.fast.s k.max
## 500 50 2 1 200
## maxit.scale trace.lev mts compute.rd fast.s.large.n
## 200 0 1000 0 2000
## psi subsampling cov
## "bisquare" "nonsingular" ".vcov.avar1"
## compute.outlier.stats
## "SM"
## seed : int(0)
Let’s see if there is an higher-order job interaction:
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Selfless_scale 1 779.98 779.98 714.7900 < 2.2e-16 ***
## Brave_scale 1 97.57 97.57 89.4141 < 2.2e-16 ***
## Job 2 71.08 35.54 32.5675 2.511e-14 ***
## Selfless_scale:Brave_scale 1 3.41 3.41 3.1226 0.07759 .
## Selfless_scale:Job 2 0.53 0.26 0.2407 0.78615
## Brave_scale:Job 2 5.73 2.86 2.6240 0.07313 .
## Selfless_scale:Brave_scale:Job 2 1.32 0.66 0.6038 0.54700
## Residuals 804 877.33 1.09
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
No. For exploratory purposes, I’ll leave these analyses below. Let us underline the lack of interaction between Bravery and Selflessness
## [1] "Firefighter analysis"
Firef<-subset(Set, Set$Job == "F")
summary(FireMod<-lm(Heroism ~ scale(Brave_scale) * scale(Selfless_scale), data = Firef))
##
## Call:
## lm(formula = Heroism ~ scale(Brave_scale) * scale(Selfless_scale),
## data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.7392 -0.3707 0.2608 0.3312 2.4930
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.97418 0.06115 97.704 < 2e-16
## scale(Brave_scale) 0.59063 0.08694 6.794 7.05e-11
## scale(Selfless_scale) 0.38742 0.06603 5.867 1.30e-08
## scale(Brave_scale):scale(Selfless_scale) 0.07849 0.05202 1.509 0.133
##
## (Intercept) ***
## scale(Brave_scale) ***
## scale(Selfless_scale) ***
## scale(Brave_scale):scale(Selfless_scale)
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8851 on 268 degrees of freedom
## Multiple R-squared: 0.4573, Adjusted R-squared: 0.4512
## F-statistic: 75.28 on 3 and 268 DF, p-value: < 2.2e-16
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ------------------------------------------------------------------------
## scale(Brave_scale) | 0.15 | [0.09, 1.00]
## scale(Selfless_scale) | 0.11 | [0.06, 1.00]
## scale(Brave_scale):scale(Selfless_scale) | 8.42e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
In firefighters: Heroism is driven bu Helpfulness, and then Danger. No interaction.
## [1] "Psy analysis"
PsyRole<- subset(Set, Set$Job == "P")
PsyRole$Brave <- scale(PsyRole$Brave)
PsyRole$Selfless <- scale(PsyRole$Selfless)
summary(PsyMod<-lm(Heroism ~ Brave * Selfless, data = PsyRole))
##
## Call:
## lm(formula = Heroism ~ Brave * Selfless, data = PsyRole)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2036 -0.5624 0.0790 0.6357 3.0790
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.68824 0.06704 69.931 < 2e-16 ***
## Brave 0.58249 0.07702 7.562 6.16e-13 ***
## Selfless 0.53804 0.07540 7.135 8.83e-12 ***
## Brave:Selfless 0.03375 0.05329 0.633 0.527
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9685 on 271 degrees of freedom
## Multiple R-squared: 0.521, Adjusted R-squared: 0.5157
## F-statistic: 98.26 on 3 and 271 DF, p-value: < 2.2e-16
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ----------------------------------------------
## Brave | 0.17 | [0.11, 1.00]
## Selfless | 0.16 | [0.10, 1.00]
## Brave:Selfless | 1.48e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## JOHNSON-NEYMAN INTERVAL
##
## When Selfless is INSIDE the interval [-4.29, 7.47], the slope of Brave is p
## < .05.
##
## Note: The range of observed values of Selfless is [-2.51, 1.75]
##
## SIMPLE SLOPES ANALYSIS
##
## Slope of Brave when Selfless = -1.000000e+00 (- 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.55 0.08 6.70 0.00
##
## Slope of Brave when Selfless = -2.091256e-16 (Mean):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.58 0.08 7.56 0.00
##
## Slope of Brave when Selfless = 1.000000e+00 (+ 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.62 0.10 5.92 0.00
Psychiatrists heroism is largely derived from both Helpfulness (21%) but not so much by Danger (7%). The interaction is not significant.
## [1] "Welders analysis"
Weld<- subset(Set, Set$Job == "W")
Weld$Brave <- scale(Weld$Brave)
Weld$Selfless <- scale(Weld$Selfless)
summary(WeldMod<-lm(Heroism ~ Brave * Selfless, data = Weld))
##
## Call:
## lm(formula = Heroism ~ Brave * Selfless, data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.0395 -0.6597 0.1677 0.9521 3.1439
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.66879 0.08361 55.840 < 2e-16 ***
## Brave 0.30238 0.09031 3.348 0.000931 ***
## Selfless 0.68509 0.08672 7.900 7.47e-14 ***
## Brave:Selfless 0.10107 0.09309 1.086 0.278581
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.249 on 265 degrees of freedom
## Multiple R-squared: 0.3203, Adjusted R-squared: 0.3126
## F-statistic: 41.62 on 3 and 265 DF, p-value: < 2.2e-16
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ----------------------------------------------
## Brave | 0.04 | [0.01, 1.00]
## Selfless | 0.19 | [0.13, 1.00]
## Brave:Selfless | 4.43e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## JOHNSON-NEYMAN INTERVAL
##
## When Selfless is INSIDE the interval [-1.03, 2.49], the slope of Brave is p
## < .05.
##
## Note: The range of observed values of Selfless is [-2.43, 1.45]
##
## SIMPLE SLOPES ANALYSIS
##
## Slope of Brave when Selfless = -1.000000e+00 (- 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.20 0.10 2.03 0.04
##
## Slope of Brave when Selfless = -1.626126e-16 (Mean):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.30 0.09 3.35 0.00
##
## Slope of Brave when Selfless = 1.000000e+00 (+ 1 SD):
##
## Est. S.E. t val. p
## ------ ------ -------- ------
## 0.40 0.15 2.62 0.01
Additional sensitivity analyses will be conducted when excluding participants whose occupations are directly relevant or similar to the target occupations of the study.
library(PerformanceAnalytics)
PerformanceAnalytics::chart.Correlation(Set[, c("Heroism", "Danger", "Helpfulness", "Attitude")], method = "spearman")
It appears that all interactions are weak. Perhaps Altruism and Motivation work independently on heroism and not that synergetically. In the following section, I compare additive and interactive solutions to see which model result in the best fit.
In this section we will compare an additive
model (Outcome ~ IV1 + IV2
) and an interactive model
(Outcome ~ IV1 * IV2
)
modAdd<-lm(Heroism ~ Help_dummy + Motivation_dummy, data = Set)
modInt<-lm(Heroism ~ Help_dummy * Motivation_dummy, data = Set)
paste0("Comparison between additive vs interactive models")
## [1] "Comparison between additive vs interactive models"
## Analysis of Variance Table
##
## Model 1: Heroism ~ Help_dummy * Motivation_dummy
## Model 2: Heroism ~ Help_dummy + Motivation_dummy
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 1731.8
## 2 813 1736.3 -1 -4.4833 2.1021 0.1475
No preference between additive and interactive = Additive model is more parsimonious and should be preferred.
## [1] "Additive model"
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Help_dummy 1 93.16 93.158 43.621 7.196e-11 ***
## Motivation_dummy 1 7.51 7.511 3.517 0.0611 .
## Residuals 813 1736.27 2.136
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ------------------------------------------------
## Help_dummy | 0.05 | [0.03, 1.00]
## Motivation_dummy | 4.31e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## [1] "Interactive model"
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Help_dummy 1 93.16 93.158 43.6800 6.998e-11 ***
## Motivation_dummy 1 7.51 7.511 3.5218 0.06093 .
## Help_dummy:Motivation_dummy 1 4.48 4.483 2.1021 0.14748
## Residuals 812 1731.78 2.133
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## -----------------------------------------------------------
## Help_dummy | 0.05 | [0.03, 1.00]
## Motivation_dummy | 4.30e-03 | [0.00, 1.00]
## Help_dummy:Motivation_dummy | 2.58e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
modAdd<-lm(Heroism ~ scale(Brave) + scale(Selfless), data = Set)
modInt<-lm(Heroism ~ scale(Brave) * scale(Selfless), data = Set)
paste0("Comparison between additive vs interactive models")
## [1] "Comparison between additive vs interactive models"
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Brave) * scale(Selfless)
## Model 2: Heroism ~ scale(Brave) + scale(Selfless)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 952.49
## 2 813 959.38 -1 -6.8982 5.8807 0.01552 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Here, there is a preference for the additive model which has a smaller RSS.
## [1] "Additive model"
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Brave) 1 565.41 565.41 479.14 < 2.2e-16 ***
## scale(Selfless) 1 312.14 312.14 264.52 < 2.2e-16 ***
## Residuals 813 959.38 1.18
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## -----------------------------------------------
## scale(Brave) | 0.09 | [0.06, 1.00]
## scale(Selfless) | 0.25 | [0.21, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## [1] "Interactive model"
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Brave) 1 565.41 565.41 482.0159 < 2e-16 ***
## scale(Selfless) 1 312.14 312.14 266.1039 < 2e-16 ***
## scale(Brave):scale(Selfless) 1 6.90 6.90 5.8807 0.01552 *
## Residuals 812 952.49 1.17
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ------------------------------------------------------------
## scale(Brave) | 0.09 | [0.06, 1.00]
## scale(Selfless) | 0.22 | [0.18, 1.00]
## scale(Brave):scale(Selfless) | 7.19e-03 | [0.00, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
modAdd<-lm(Heroism ~ scale(Danger) + scale(Helpfulness), data = Set)
modInt<-lm(Heroism ~ scale(Danger) * scale(Helpfulness), data = Set)
paste0("Comparison between additive vs interactive models")
## [1] "Comparison between additive vs interactive models"
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Danger) * scale(Helpfulness)
## Model 2: Heroism ~ scale(Danger) + scale(Helpfulness)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 812 1132.4
## 2 813 1152.2 -1 -19.771 14.177 0.0001784 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Here, there is a preference for the additive model which has a smaller RSS.
## [1] "Additive model"
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Danger) 1 228.94 228.94 161.55 < 2.2e-16 ***
## scale(Helpfulness) 1 455.83 455.83 321.65 < 2.2e-16 ***
## Residuals 813 1152.16 1.42
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## --------------------------------------------------
## scale(Danger) | 0.07 | [0.04, 1.00]
## scale(Helpfulness) | 0.28 | [0.24, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
## [1] "Interactive model"
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## scale(Danger) 1 228.94 228.94 164.167 < 2.2e-16 ***
## scale(Helpfulness) 1 455.83 455.83 326.863 < 2.2e-16 ***
## scale(Danger):scale(Helpfulness) 1 19.77 19.77 14.177 0.0001784 ***
## Residuals 812 1132.39 1.39
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Type 3 ANOVAs only give sensible and informative results when covariates
## are mean-centered and factors are coded with orthogonal contrasts (such
## as those produced by `contr.sum`, `contr.poly`, or `contr.helmert`, but
## *not* by the default `contr.treatment`).
## # Effect Size for ANOVA (Type III)
##
## Parameter | Eta2 (partial) | 95% CI
## ----------------------------------------------------------------
## scale(Danger) | 0.08 | [0.06, 1.00]
## scale(Helpfulness) | 0.29 | [0.25, 1.00]
## scale(Danger):scale(Helpfulness) | 0.02 | [0.01, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
Previous studies provided some evidence for a slight preference toward additive models. This third pilot study once again emphasise that Heroism components are additive rather than interactive: If heroes are not brave, then it means they’re selfless; and vice versa. But those two traits act independently on heroism perception. Do people have two definitions of heroism in their mind? Or is there a unified construct of heroism that is defined by Bravery OR Helpfulness. ____
In the next section, for each occupation, I systematically 1) Compare the fit of an interactive vs additive model in each occupation, and 2) compare the betas of the two predictors in the best model.
Regarding (1), I fit an interactive
(Heroism ~ FeatureA * FeatureB
) and an additive
(Heroism ~ FeatureA + FeatureB
) model. I then compare their
RSS in an ANOVA to decide which model provides the best fit.
Regarding (2), I use the best model (see Point 1 just above). Then,
to test that one feature of heroism contribute significantly more than
the other, I use car::linearHypothesis
: I force the model
betas of the two predictors to be equivalent (e.g.,
Danger = Helpful
) and see if this constrained model
provides a better fit than the model where the betas are let loose. If
the non-constrained model provides a better fit, it points to the
relative superiority of one beta over the other in explaining the
outcome.
##
## Call:
## lm(formula = Heroism ~ Motivation_dummy + Help_dummy, data = Firef)
##
## Coefficients:
## (Intercept) Motivation_dummy Help_dummy
## 6.0178 0.1555 0.1850
##
## Call:
## lm(formula = Heroism ~ Motivation_dummy * Help_dummy, data = Firef)
##
## Coefficients:
## (Intercept) Motivation_dummy
## 6.0189 0.1555
## Help_dummy Motivation_dummy:Help_dummy
## 0.1828 0.6008
## Analysis of Variance Table
##
## Model 1: Heroism ~ Motivation_dummy + Help_dummy
## Model 2: Heroism ~ Motivation_dummy * Help_dummy
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 269 382.97
## 2 268 376.83 1 6.1359 4.3638 0.03765 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "Interactive model is performing best"
##
## Linear hypothesis test:
## Motivation_dummy - Help_dummy = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ Motivation_dummy + Help_dummy
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 270 383.00
## 2 269 382.97 1 0.029719 0.0209 0.8852
For firefighters, the interactive model is slightly better than the additive one. There is no preference between the two predictors, they contribute ‘equally’ (that is they don’t contribute) to heroism.
##
## Call:
## lm(formula = Heroism ~ Motivation_dummy + Help_dummy, data = Psych)
##
## Coefficients:
## (Intercept) Motivation_dummy Help_dummy
## 4.7116 0.2638 0.3748
##
## Call:
## lm(formula = Heroism ~ Motivation_dummy * Help_dummy, data = Psych)
##
## Coefficients:
## (Intercept) Motivation_dummy
## 4.7126 0.2657
## Help_dummy Motivation_dummy:Help_dummy
## 0.3754 0.3451
## Analysis of Variance Table
##
## Model 1: Heroism ~ Motivation_dummy + Help_dummy
## Model 2: Heroism ~ Motivation_dummy * Help_dummy
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 272 516.44
## 2 271 514.39 1 2.0461 1.078 0.3001
## [1] "Model do not significantly differ."
##
## Linear hypothesis test:
## Motivation_dummy - Help_dummy = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ Motivation_dummy + Help_dummy
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 273 516.86
## 2 272 516.44 1 0.42782 0.2253 0.6354
In psychiatrists, no preference between additive vs interactive model. Altruistic motivation and altruistic outcome contribute equally to heroism, but we note that only Altruistic outcome (Helpfulness) reaches significance.
##
## Call:
## lm(formula = Heroism ~ Motivation_dummy + Help_dummy, data = Weld)
##
## Coefficients:
## (Intercept) Motivation_dummy Help_dummy
## 4.6931 0.1067 1.4890
##
## Call:
## lm(formula = Heroism ~ Motivation_dummy * Help_dummy, data = Weld)
##
## Coefficients:
## (Intercept) Motivation_dummy
## 4.69304 0.10667
## Help_dummy Motivation_dummy:Help_dummy
## 1.48902 0.00746
## Analysis of Variance Table
##
## Model 1: Heroism ~ Motivation_dummy + Help_dummy
## Model 2: Heroism ~ Motivation_dummy * Help_dummy
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 266 457.59
## 2 265 457.58 1 0.00093473 5e-04 0.9815
## [1] "No preference"
##
## Linear hypothesis test:
## Motivation_dummy - Help_dummy = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ Motivation_dummy * Help_dummy
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 266 520.59
## 2 265 457.58 1 63.002 36.486 5.182e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
In welders, interactive vs additive models are identical. However, the heroic profile of welders is definitely predicted by helpfulness (job description) rather than selflessness (character).
The plots below describe the Beta comparisons reported in the exploratory analyses:
# Right, so we're going to plot the betas difference for each occupation
# We create a list of df
datasets <- list(
Firefighters = Firef,
Psychiatrists = Psych,
Welders = Weld
)
# Storing the results of the models
results <- list()
# for loop: in each dataset, fit the model, and extract the betas to substract them
for(model_name in names(datasets)) {
data_ <- datasets[[model_name]]
# Fitting mod
mod <- lm(Heroism ~ Motivation_dummy + Help_dummy, data = data_)
# Extract coefficients and the variance-covariance matrix (used for 95%CI)
coefs <- coef(mod)
vc <- vcov(mod)
# Compute the difference between coefficients "Brave" and "Selfless"
diff_coef <- coefs["Motivation_dummy"] - coefs["Help_dummy"]
# Compute standard error of the difference:
se_diff <- sqrt(vc["Motivation_dummy", "Motivation_dummy"] + vc["Help_dummy", "Help_dummy"] - 2 * vc["Motivation_dummy", "Help_dummy"])
# Compute the 95% confidence interval using a normal approximation (z = 1.96)
crit <- qnorm(0.975)
lower <- diff_coef - crit * se_diff
upper <- diff_coef + crit * se_diff
# Store the results in a data frame
results[[model_name]] <- data.frame(
Model = model_name,
diff = diff_coef,
lower = lower,
upper = upper
)
}
# Combine the list of data frames into one
df_results <- do.call(rbind, results)
df_results$Model <- factor(df_results$Model, levels = names(datasets))
ggplot(df_results, aes(x = Model, y = diff)) +
geom_point(size = 3) +
geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) +
geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
labs(
title = "Relative contribution of Motivation vs Helpfulness in predicting Heroism",
y = "Coefficient Difference (Motivation - Help_dummy)",
x = "Occupation"
) +
theme_minimal()
##
## Call:
## lm(formula = Heroism ~ scale(Brave) + scale(Selfless), data = Firef)
##
## Coefficients:
## (Intercept) scale(Brave) scale(Selfless)
## 6.0184 0.5038 0.4034
##
## Call:
## lm(formula = Heroism ~ scale(Brave) * scale(Selfless), data = Firef)
##
## Coefficients:
## (Intercept) scale(Brave)
## 5.97418 0.59063
## scale(Selfless) scale(Brave):scale(Selfless)
## 0.38742 0.07849
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Brave) + scale(Selfless)
## Model 2: Heroism ~ scale(Brave) * scale(Selfless)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 269 211.76
## 2 268 209.97 1 1.7834 2.2762 0.1326
## [1] "Model do not significantly differ."
##
## Linear hypothesis test:
## scale(Brave) - scale(Selfless) = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ scale(Brave) + scale(Selfless)
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 270 212.35
## 2 269 211.76 1 0.5945 0.7552 0.3856
For firefighters, no preference between interactive or additive. In addition, selflessness and bravery provide equal contribution to heroism.
##
## Call:
## lm(formula = Heroism ~ scale(Brave) + scale(Selfless), data = Psych)
##
## Coefficients:
## (Intercept) scale(Brave) scale(Selfless)
## 4.7091 0.5703 0.5451
##
## Call:
## lm(formula = Heroism ~ scale(Brave) * scale(Selfless), data = Psych)
##
## Coefficients:
## (Intercept) scale(Brave)
## 4.68824 0.58249
## scale(Selfless) scale(Brave):scale(Selfless)
## 0.53804 0.03375
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Brave) + scale(Selfless)
## Model 2: Heroism ~ scale(Brave) * scale(Selfless)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 272 254.58
## 2 271 254.21 1 0.37636 0.4012 0.527
## [1] "Model do not significantly differ"
##
## Linear hypothesis test:
## scale(Brave) - scale(Selfless) = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ scale(Brave) + scale(Selfless)
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 273 254.62
## 2 272 254.58 1 0.032978 0.0352 0.8512
In psychiatrists, no preference between interactive or additive. In addition, selflessness and bravery provide equal contribution to heroism.
##
## Call:
## lm(formula = Heroism ~ scale(Brave) + scale(Selfless), data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.9630 -0.7375 0.1871 0.8861 3.7136
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.70632 0.07616 61.799 < 2e-16 ***
## scale(Brave) 0.26176 0.08222 3.184 0.00163 **
## scale(Selfless) 0.71511 0.08222 8.697 3.59e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.249 on 266 degrees of freedom
## Multiple R-squared: 0.3172, Adjusted R-squared: 0.3121
## F-statistic: 61.79 on 2 and 266 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = Heroism ~ scale(Brave) * scale(Selfless), data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.0395 -0.6597 0.1677 0.9521 3.1439
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.66879 0.08361 55.840 < 2e-16 ***
## scale(Brave) 0.30238 0.09031 3.348 0.000931 ***
## scale(Selfless) 0.68509 0.08672 7.900 7.47e-14 ***
## scale(Brave):scale(Selfless) 0.10107 0.09309 1.086 0.278581
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.249 on 265 degrees of freedom
## Multiple R-squared: 0.3203, Adjusted R-squared: 0.3126
## F-statistic: 41.62 on 3 and 265 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Brave) + scale(Selfless)
## Model 2: Heroism ~ scale(Brave) * scale(Selfless)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 266 414.99
## 2 265 413.15 1 1.8379 1.1788 0.2786
## [1] "Slight preference for interactive models for welders"
##
## Linear hypothesis test:
## scale(Brave) - scale(Selfless) = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ scale(Brave) * scale(Selfless)
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 266 423.17
## 2 265 413.15 1 10.025 6.4299 0.0118 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
For welders: no preference between interactive or additive. However, heroism is predicted by selflessness rather than bravery.
The plots below describe the Beta comparisons reported in the exploratory analyses:
# Right, so we're going to plot the betas difference for each occupation
# We create a list of df
datasets <- list(
Firefighters = Firef,
Psychiatrists = Psych,
Welders = Weld
)
# Storing the results of the models
results <- list()
Firef$Brave <- scale(Firef$Brave)
Firef$Selfless <- scale(Firef$Selfless)
Weld$Brave <- scale(Weld$Brave)
Weld$Selfless <- scale(Weld$Selfless)
Psych$Brave <- scale(Psych$Brave)
Psych$Selfless <- scale(Psych$Selfless)
# for loop: in each dataset, fit the model, and extract the betas to substract them
for(model_name in names(datasets)) {
data_ <- datasets[[model_name]]
# Fitting mod
mod <- lm(Heroism ~ Brave + Selfless, data = data_)
# Extract coefficients and the variance-covariance matrix (used for 95%CI)
coefs <- coef(mod)
vc <- vcov(mod)
# Compute the difference between coefficients "Brave" and "Selfless"
diff_coef <- coefs["Brave"] - coefs["Selfless"]
# Compute standard error of the difference:
se_diff <- sqrt(vc["Brave", "Brave"] + vc["Selfless", "Selfless"] - 2 * vc["Brave", "Selfless"])
# Compute the 95% confidence interval using a normal approximation (z = 1.96)
crit <- qnorm(0.975)
lower <- diff_coef - crit * se_diff
upper <- diff_coef + crit * se_diff
# Store the results in a data frame
results[[model_name]] <- data.frame(
Model = model_name,
diff = diff_coef,
lower = lower,
upper = upper
)
}
# Combine the list of data frames into one
df_results <- do.call(rbind, results)
df_results$Model <- factor(df_results$Model, levels = names(datasets))
ggplot(df_results, aes(x = Model, y = diff)) +
geom_point(size = 3) +
geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) +
geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
labs(
title = "Relative contribution of Motivation vs Selfless in predicting Heroism",
y = "Coefficient Difference (Brave - Selfless)",
x = "Occupation"
) +
theme_minimal()
##
## Call:
## lm(formula = Heroism ~ scale(Danger) + scale(Helpfulness), data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5281 -0.5281 0.3931 0.4719 2.2921
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.01838 0.06089 98.838 < 2e-16 ***
## scale(Danger) 0.32933 0.07037 4.680 4.55e-06 ***
## scale(Helpfulness) 0.42333 0.07037 6.016 5.82e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.004 on 269 degrees of freedom
## Multiple R-squared: 0.2988, Adjusted R-squared: 0.2936
## F-statistic: 57.32 on 2 and 269 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = Heroism ~ scale(Danger) * scale(Helpfulness), data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5463 -0.5463 0.4199 0.4537 2.2978
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.00858 0.06276 95.733 < 2e-16 ***
## scale(Danger) 0.35031 0.07738 4.527 8.99e-06 ***
## scale(Helpfulness) 0.43170 0.07159 6.030 5.41e-09 ***
## scale(Danger):scale(Helpfulness) 0.01974 0.03012 0.655 0.513
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.005 on 268 degrees of freedom
## Multiple R-squared: 0.2999, Adjusted R-squared: 0.2921
## F-statistic: 38.28 on 3 and 268 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Danger) + scale(Helpfulness)
## Model 2: Heroism ~ scale(Danger) * scale(Helpfulness)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 269 271.29
## 2 268 270.86 1 0.43402 0.4294 0.5128
paste0("Model do not significantly differ. Consistency motive: we keep interaction; or Parsimony motive: we go with additive")
## [1] "Model do not significantly differ. Consistency motive: we keep interaction; or Parsimony motive: we go with additive"
##
## Linear hypothesis test:
## scale(Danger) - scale(Helpfulness) = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ scale(Danger) + scale(Helpfulness)
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 270 271.89
## 2 269 271.29 1 0.60054 0.5955 0.441
##
## Call:
## lm(formula = Heroism ~ scale(Danger) + scale(Helpfulness), data = Psych)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8336 -0.6772 0.1664 0.8372 2.9688
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.70909 0.07008 67.192 < 2e-16 ***
## scale(Danger) 0.33513 0.07312 4.583 6.98e-06 ***
## scale(Helpfulness) 0.60826 0.07312 8.319 4.33e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.162 on 272 degrees of freedom
## Multiple R-squared: 0.3077, Adjusted R-squared: 0.3027
## F-statistic: 60.46 on 2 and 272 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = Heroism ~ scale(Danger) * scale(Helpfulness), data = Psych)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8074 -0.7717 0.1926 0.7176 3.4248
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.68036 0.07198 65.024 < 2e-16 ***
## scale(Danger) 0.33949 0.07293 4.655 5.08e-06 ***
## scale(Helpfulness) 0.61932 0.07319 8.462 1.67e-15 ***
## scale(Danger):scale(Helpfulness) 0.10330 0.06233 1.657 0.0986 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.158 on 271 degrees of freedom
## Multiple R-squared: 0.3147, Adjusted R-squared: 0.3071
## F-statistic: 41.48 on 3 and 271 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Danger) + scale(Helpfulness)
## Model 2: Heroism ~ scale(Danger) * scale(Helpfulness)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 272 367.40
## 2 271 363.71 1 3.6869 2.7471 0.09859 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
paste0("Model do not significantly differ. Consistency motive: we keep interaction; or Parsimony motive: we go with additive")
## [1] "Model do not significantly differ. Consistency motive: we keep interaction; or Parsimony motive: we go with additive"
##
## Linear hypothesis test:
## scale(Danger) - scale(Helpfulness) = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ scale(Danger) + scale(Helpfulness)
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 273 374.76
## 2 272 367.40 1 7.3676 5.4545 0.02024 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
In psychiatrists, Heroism is about helpfulness rather than danger.
##
## Call:
## lm(formula = Heroism ~ scale(Danger) + scale(Helpfulness), data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.7343 -0.7605 0.2133 0.9320 3.3926
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.70632 0.07552 62.317 <2e-16 ***
## scale(Danger) 0.15624 0.07751 2.016 0.0448 *
## scale(Helpfulness) 0.81569 0.07751 10.524 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.239 on 266 degrees of freedom
## Multiple R-squared: 0.3285, Adjusted R-squared: 0.3235
## F-statistic: 65.07 on 2 and 266 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = Heroism ~ scale(Danger) * scale(Helpfulness), data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.8375 -0.7809 0.1625 0.8412 3.2324
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.67804 0.07613 61.450 < 2e-16 ***
## scale(Danger) 0.24276 0.08671 2.800 0.00549 **
## scale(Helpfulness) 0.80637 0.07710 10.459 < 2e-16 ***
## scale(Danger):scale(Helpfulness) 0.13076 0.06032 2.168 0.03105 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.23 on 265 degrees of freedom
## Multiple R-squared: 0.3402, Adjusted R-squared: 0.3328
## F-statistic: 45.55 on 3 and 265 DF, p-value: < 2.2e-16
## Analysis of Variance Table
##
## Model 1: Heroism ~ scale(Danger) + scale(Helpfulness)
## Model 2: Heroism ~ scale(Danger) * scale(Helpfulness)
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 266 408.12
## 2 265 401.00 1 7.1122 4.7 0.03105 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## [1] "Slight preference for interactive models for welders"
##
## Linear hypothesis test:
## scale(Danger) - scale(Helpfulness) = 0
##
## Model 1: restricted model
## Model 2: Heroism ~ scale(Danger) * scale(Helpfulness)
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 266 430.35
## 2 265 401.00 1 29.35 19.396 1.543e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
For welders: an interactive model. Heroism is definitely about Helpfulness though. In our previous study, we did not find a superior influence of helpfulness over danger - but participants were not made aware of the fact that welders were helpful.
The plots below describe the Beta comparisons reported in the exploratory analyses:
# Right, so we're going to plot the betas difference for each occupation
# We create a list of df
datasets <- list(
Firefighters = Firef,
Psychiatrists = Psych,
Welders = Weld
)
# Storing the results of the models
results <- list()
Firef$Danger <- scale(Firef$Danger)
Firef$Helpfulness <- scale(Firef$Helpfulness)
Weld$Danger <- scale(Weld$Danger)
Weld$Helpfulness <- scale(Weld$Helpfulness)
Psych$Danger <- scale(Psych$Danger)
Psych$Helpful <- scale(Psych$Helpfulness)
# for loop: in each dataset, fit the model, and extract the betas to substract them
for(model_name in names(datasets)) {
data_ <- datasets[[model_name]]
# Fitting mod
mod <- lm(Heroism ~ Danger + Helpfulness, data = data_)
# Extract coefficients and the variance-covariance matrix (used for 95%CI)
coefs <- coef(mod)
vc <- vcov(mod)
# Compute the difference between coefficients "Brave" and "Selfless"
diff_coef <- coefs["Danger"] - coefs["Helpfulness"]
# Compute standard error of the difference:
se_diff <- sqrt(vc["Danger", "Danger"] + vc["Helpfulness", "Helpfulness"] - 2 * vc["Danger", "Helpfulness"])
# Compute the 95% confidence interval using a normal approximation (z = 1.96)
crit <- qnorm(0.975)
lower <- diff_coef - crit * se_diff
upper <- diff_coef + crit * se_diff
# Store the results in a data frame
results[[model_name]] <- data.frame(
Model = model_name,
diff = diff_coef,
lower = lower,
upper = upper
)
}
# Combine the list of data frames into one
df_results <- do.call(rbind, results)
df_results$Model <- factor(df_results$Model, levels = names(datasets))
ggplot(df_results, aes(x = Model, y = diff)) +
geom_point(size = 3) +
geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) +
geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
labs(
title = "Relative contribution of Motivation vs Helpfulness in predicting Heroism",
y = "Coefficient Difference (Motivation - Helpfulness)",
x = "Occupation"
) +
theme_minimal()
Any question can be addressed to Jean Monéger (My contact can be easily found using Google).
Below are some additional insights into credibility of the manipulation and how it 1) is influenced by the conclusion, and 2) how it influences our results. There is solid ground to consider that the manipulation was:
##
## Call:
## lm(formula = Credibility ~ Job, data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6103 -0.6103 0.3897 0.8800 1.8800
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.61029 0.08382 66.931 < 2e-16 ***
## JobP -0.49029 0.11822 -4.147 3.72e-05 ***
## JobW -0.24970 0.11887 -2.101 0.036 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.382 on 813 degrees of freedom
## Multiple R-squared: 0.02072, Adjusted R-squared: 0.01831
## F-statistic: 8.601 on 2 and 813 DF, p-value: 0.0002013
##
## Call:
## lm(formula = Credibility ~ Help_dummy, data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.4338 -0.4338 0.2132 1.2132 1.5662
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.61029 0.07968 70.414 <2e-16 ***
## Help_dummy 0.35294 0.15935 2.215 0.0276 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.314 on 270 degrees of freedom
## Multiple R-squared: 0.01784, Adjusted R-squared: 0.01421
## F-statistic: 4.906 on 1 and 270 DF, p-value: 0.02761
## Firef$Help_dummy: -0.5
## [1] 5.433824
## ------------------------------------------------------------
## Firef$Help_dummy: 0.5
## [1] 5.786765
## Firef$Help_dummy: -0.5
## [1] 1.39152
## ------------------------------------------------------------
## Firef$Help_dummy: 0.5
## [1] 1.231729
ggplot(Firef, aes(x = Help, y = Credibility)) +
geom_boxplot() +
labs(x = "Condition ",
y = "Credibility",
title = "FIREFIGHTERS: Credibility by Help Conditions") +
theme_minimal()
##
## Call:
## lm(formula = Credibility ~ Help_dummy, data = Psych)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.3162 -0.9281 0.0719 1.0719 2.0719
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.12212 0.08296 61.739 <2e-16 ***
## Help_dummy 0.38812 0.16593 2.339 0.0201 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.376 on 273 degrees of freedom
## Multiple R-squared: 0.01965, Adjusted R-squared: 0.01606
## F-statistic: 5.471 on 1 and 273 DF, p-value: 0.02005
## Psych$Help_dummy: -0.5
## [1] 4.928058
## ------------------------------------------------------------
## Psych$Help_dummy: 0.5
## [1] 5.316176
## Psych$Help_dummy: -0.5
## [1] 1.391695
## ------------------------------------------------------------
## Psych$Help_dummy: 0.5
## [1] 1.359206
ggplot(Psych, aes(x = Help, y = Credibility)) +
geom_boxplot() +
labs(x = "Condition (Motivation_dummy & Help_dummy)",
y = "Credibility",
title = "PSYCH: Credibility by Motivation and Help Conditions") +
theme_minimal()
##
## Call:
## lm(formula = Credibility ~ Help_dummy, data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.6423 -0.6423 0.3577 0.9318 1.9318
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.35526 0.08591 62.338 < 2e-16 ***
## Help_dummy 0.57415 0.17181 3.342 0.000951 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.409 on 267 degrees of freedom
## Multiple R-squared: 0.04015, Adjusted R-squared: 0.03655
## F-statistic: 11.17 on 1 and 267 DF, p-value: 0.0009515
## Weld$Help_dummy: -0.5
## [1] 5.068182
## ------------------------------------------------------------
## Weld$Help_dummy: 0.5
## [1] 5.642336
## Weld$Help_dummy: -0.5
## [1] 1.554079
## ------------------------------------------------------------
## Weld$Help_dummy: 0.5
## [1] 1.252863
ggplot(Weld, aes(x = Help, y = Credibility)) +
geom_boxplot() +
labs(x = "Condition (Motivation_dummy & Help_dummy)",
y = "Credibility",
title = "WELDERS: Credibility by Motivation and Help Conditions") +
theme_minimal()
Maybe our effects are conditionned by the credibility of our manipulation. We can model our effects using credibility as a covariant
##
## Call:
## lm(formula = Heroism ~ Help_dummy + scale(Credibility), data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.3217 -0.7663 0.2337 1.1246 3.3444
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.14393 0.04948 103.950 < 2e-16 ***
## Help_dummy 0.55376 0.10022 5.525 4.43e-08 ***
## scale(Credibility) 0.38742 0.05014 7.727 3.25e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.414 on 813 degrees of freedom
## Multiple R-squared: 0.1157, Adjusted R-squared: 0.1135
## F-statistic: 53.16 on 2 and 813 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = Heroism ~ Danger_scale * Helpfulness_scale + scale(Credibility),
## data = Set)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.3643 -0.6281 0.2646 0.7884 3.8951
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.11837 0.04150 123.334 < 2e-16 ***
## Danger_scale 0.35186 0.04463 7.885 1.02e-14 ***
## Helpfulness_scale 0.73581 0.04272 17.225 < 2e-16 ***
## scale(Credibility) 0.21306 0.04221 5.047 5.53e-07 ***
## Danger_scale:Helpfulness_scale 0.10492 0.03180 3.299 0.00101 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.164 on 811 degrees of freedom
## Multiple R-squared: 0.4023, Adjusted R-squared: 0.3994
## F-statistic: 136.5 on 4 and 811 DF, p-value: < 2.2e-16
## Cohen's d | 95% CI
## ------------------------
## 0.27 | [0.03, 0.51]
##
## - Estimated using pooled SD.
## Cohen's d | 95% CI
## ------------------------
## 0.54 | [0.30, 0.79]
##
## - Estimated using pooled SD.
## Cohen's d | 95% CI
## ------------------------
## 0.28 | [0.04, 0.52]
##
## - Estimated using pooled SD.
## Cohen's d | 95% CI
## ------------------------
## 0.45 | [0.21, 0.68]
##
## - Estimated using pooled SD.
## Cohen's d | 95% CI
## ------------------------
## 0.41 | [0.17, 0.65]
##
## - Estimated using pooled SD.
## Cohen's d | 95% CI
## -------------------------
## -0.10 | [-0.34, 0.14]
##
## - Estimated using pooled SD.
Subset analyses: testing attitude and credibility as covariates within occupations.
Firef <- subset(Set, Set$Job == "F")
Psych <- subset(Set, Set$Job == "P")
Weld <- subset(Set, Set$Job == "W")
anova(lm(Heroism ~ Help_dummy* Motivation_dummy, data = Firef))
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Help_dummy 1 2.30 2.2978 1.6342 0.20223
## Motivation_dummy 1 1.64 1.6443 1.1694 0.28049
## Help_dummy:Motivation_dummy 1 6.14 6.1359 4.3638 0.03765 *
## Residuals 268 376.83 1.4061
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Help_dummy 1 9.51 9.5066 5.0084 0.02604 *
## Motivation_dummy 1 4.78 4.7840 2.5204 0.11355
## Help_dummy:Motivation_dummy 1 2.05 2.0461 1.0780 0.30008
## Residuals 271 514.39 1.8981
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Analysis of Variance Table
##
## Response: Heroism
## Df Sum Sq Mean Sq F value Pr(>F)
## Help_dummy 1 149.45 149.448 86.5494 <2e-16 ***
## Motivation_dummy 1 0.77 0.766 0.4435 0.5060
## Help_dummy:Motivation_dummy 1 0.00 0.001 0.0005 0.9815
## Residuals 265 457.58 1.727
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Attitude),
## data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.3249 -0.3992 0.4528 0.6751 3.1083
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.019269 0.064546 93.256 <2e-16 ***
## Help_dummy 0.157466 0.129129 1.219 0.2238
## Motivation_dummy -0.009478 0.130689 -0.073 0.9422
## scale(Attitude) 0.531344 0.065616 8.098 2e-14 ***
## Help_dummy:Motivation_dummy 0.463633 0.258738 1.792 0.0743 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.064 on 267 degrees of freedom
## Multiple R-squared: 0.2181, Adjusted R-squared: 0.2064
## F-statistic: 18.62 on 4 and 267 DF, p-value: 1.644e-13
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Attitude (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Attitude)). The model explains a statistically
## significant and moderate proportion of variance (R2 = 0.22, F(4, 267) = 18.62,
## p < .001, adj. R2 = 0.21). The model's intercept, corresponding to Help_dummy =
## 0, Motivation_dummy = 0 and Attitude = 0, is at 6.02 (95% CI [5.89, 6.15],
## t(267) = 93.26, p < .001). Within this model:
##
## - The effect of Help dummy is statistically non-significant and positive (beta
## = 0.16, 95% CI [-0.10, 0.41], t(267) = 1.22, p = 0.224; Std. beta = 0.07, 95%
## CI [-0.04, 0.17])
## - The effect of Motivation dummy is statistically non-significant and negative
## (beta = -9.48e-03, 95% CI [-0.27, 0.25], t(267) = -0.07, p = 0.942; Std. beta =
## -3.97e-03, 95% CI [-0.11, 0.10])
## - The effect of Attitude is statistically significant and positive (beta =
## 0.53, 95% CI [0.40, 0.66], t(267) = 8.10, p < .001; Std. beta = 0.44, 95% CI
## [0.34, 0.55])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.46, 95% CI [-0.05, 0.97], t(267) = 1.79, p = 0.074; Std.
## beta = 0.10, 95% CI [-9.62e-03, 0.20])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Credibility),
## data = Firef)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0634 -0.6851 0.2233 0.8451 1.7480
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.01957 0.07056 85.317 < 2e-16 ***
## Help_dummy 0.11470 0.14255 0.805 0.421776
## Motivation_dummy 0.02316 0.14648 0.158 0.874476
## scale(Credibility) 0.25031 0.07436 3.366 0.000874 ***
## Help_dummy:Motivation_dummy 0.69300 0.28355 2.444 0.015172 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.164 on 267 degrees of freedom
## Multiple R-squared: 0.0657, Adjusted R-squared: 0.0517
## F-statistic: 4.694 on 4 and 267 DF, p-value: 0.001122
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Credibility (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Credibility)). The model explains a statistically
## significant and weak proportion of variance (R2 = 0.07, F(4, 267) = 4.69, p =
## 0.001, adj. R2 = 0.05). The model's intercept, corresponding to Help_dummy = 0,
## Motivation_dummy = 0 and Credibility = 0, is at 6.02 (95% CI [5.88, 6.16],
## t(267) = 85.32, p < .001). Within this model:
##
## - The effect of Help dummy is statistically non-significant and positive (beta
## = 0.11, 95% CI [-0.17, 0.40], t(267) = 0.80, p = 0.422; Std. beta = 0.05, 95%
## CI [-0.07, 0.17])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.02, 95% CI [-0.27, 0.31], t(267) = 0.16, p = 0.874; Std. beta =
## 9.71e-03, 95% CI [-0.11, 0.13])
## - The effect of Credibility is statistically significant and positive (beta =
## 0.25, 95% CI [0.10, 0.40], t(267) = 3.37, p < .001; Std. beta = 0.21, 95% CI
## [0.09, 0.33])
## - The effect of Help dummy × Motivation dummy is statistically significant and
## positive (beta = 0.69, 95% CI [0.13, 1.25], t(267) = 2.44, p = 0.015; Std. beta
## = 0.15, 95% CI [0.03, 0.26])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Attitude),
## data = Psych)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.1198 -0.4149 -0.0264 0.8119 2.7146
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.709965 0.058473 80.549 <2e-16 ***
## Help_dummy -0.009536 0.119210 -0.080 0.9363
## Motivation_dummy 0.200274 0.117012 1.712 0.0881 .
## scale(Attitude) 0.995139 0.059769 16.650 <2e-16 ***
## Help_dummy:Motivation_dummy 0.205923 0.234042 0.880 0.3797
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9695 on 270 degrees of freedom
## Multiple R-squared: 0.5218, Adjusted R-squared: 0.5147
## F-statistic: 73.65 on 4 and 270 DF, p-value: < 2.2e-16
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Attitude (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Attitude)). The model explains a statistically
## significant and substantial proportion of variance (R2 = 0.52, F(4, 270) =
## 73.65, p < .001, adj. R2 = 0.51). The model's intercept, corresponding to
## Help_dummy = 0, Motivation_dummy = 0 and Attitude = 0, is at 4.71 (95% CI
## [4.59, 4.83], t(270) = 80.55, p < .001). Within this model:
##
## - The effect of Help dummy is statistically non-significant and negative (beta
## = -9.54e-03, 95% CI [-0.24, 0.23], t(270) = -0.08, p = 0.936; Std. beta =
## -3.57e-03, 95% CI [-0.09, 0.08])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.20, 95% CI [-0.03, 0.43], t(270) = 1.71, p = 0.088; Std. beta = 0.07,
## 95% CI [-0.01, 0.15])
## - The effect of Attitude is statistically significant and positive (beta =
## 1.00, 95% CI [0.88, 1.11], t(270) = 16.65, p < .001; Std. beta = 0.72, 95% CI
## [0.63, 0.80])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.21, 95% CI [-0.25, 0.67], t(270) = 0.88, p = 0.380; Std.
## beta = 0.04, 95% CI [-0.05, 0.12])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Credibility),
## data = Psych)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.7534 -0.7534 0.0815 0.9867 2.8613
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.71192 0.08052 58.517 < 2e-16 ***
## Help_dummy 0.27296 0.16279 1.677 0.0947 .
## Motivation_dummy 0.10785 0.16516 0.653 0.5143
## scale(Credibility) 0.36051 0.08367 4.309 2.3e-05 ***
## Help_dummy:Motivation_dummy 0.41890 0.32254 1.299 0.1951
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.335 on 270 degrees of freedom
## Multiple R-squared: 0.09314, Adjusted R-squared: 0.07971
## F-statistic: 6.933 on 4 and 270 DF, p-value: 2.515e-05
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Credibility (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Credibility)). The model explains a statistically
## significant and weak proportion of variance (R2 = 0.09, F(4, 270) = 6.93, p <
## .001, adj. R2 = 0.08). The model's intercept, corresponding to Help_dummy = 0,
## Motivation_dummy = 0 and Credibility = 0, is at 4.71 (95% CI [4.55, 4.87],
## t(270) = 58.52, p < .001). Within this model:
##
## - The effect of Help dummy is statistically non-significant and positive (beta
## = 0.27, 95% CI [-0.05, 0.59], t(270) = 1.68, p = 0.095; Std. beta = 0.10, 95%
## CI [-0.02, 0.21])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.11, 95% CI [-0.22, 0.43], t(270) = 0.65, p = 0.514; Std. beta = 0.04,
## 95% CI [-0.08, 0.16])
## - The effect of Credibility is statistically significant and positive (beta =
## 0.36, 95% CI [0.20, 0.53], t(270) = 4.31, p < .001; Std. beta = 0.26, 95% CI
## [0.14, 0.38])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.42, 95% CI [-0.22, 1.05], t(270) = 1.30, p = 0.195; Std.
## beta = 0.08, 95% CI [-0.04, 0.19])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Attitude),
## data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.0067 -0.5745 0.0551 0.9308 2.1037
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.69737 0.07080 66.344 < 2e-16 ***
## Help_dummy 0.88260 0.15784 5.592 5.61e-08 ***
## Motivation_dummy -0.04158 0.14262 -0.292 0.771
## scale(Attitude) 0.69253 0.07963 8.696 3.72e-16 ***
## Help_dummy:Motivation_dummy 0.11114 0.28346 0.392 0.695
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.161 on 264 degrees of freedom
## Multiple R-squared: 0.4148, Adjusted R-squared: 0.4059
## F-statistic: 46.78 on 4 and 264 DF, p-value: < 2.2e-16
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Attitude (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Attitude)). The model explains a statistically
## significant and substantial proportion of variance (R2 = 0.41, F(4, 264) =
## 46.78, p < .001, adj. R2 = 0.41). The model's intercept, corresponding to
## Help_dummy = 0, Motivation_dummy = 0 and Attitude = 0, is at 4.70 (95% CI
## [4.56, 4.84], t(264) = 66.34, p < .001). Within this model:
##
## - The effect of Help dummy is statistically significant and positive (beta =
## 0.88, 95% CI [0.57, 1.19], t(264) = 5.59, p < .001; Std. beta = 0.29, 95% CI
## [0.19, 0.40])
## - The effect of Motivation dummy is statistically non-significant and negative
## (beta = -0.04, 95% CI [-0.32, 0.24], t(264) = -0.29, p = 0.771; Std. beta =
## -0.01, 95% CI [-0.11, 0.08])
## - The effect of Attitude is statistically significant and positive (beta =
## 0.69, 95% CI [0.54, 0.85], t(264) = 8.70, p < .001; Std. beta = 0.46, 95% CI
## [0.36, 0.56])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.11, 95% CI [-0.45, 0.67], t(264) = 0.39, p = 0.695; Std.
## beta = 0.02, 95% CI [-0.07, 0.11])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.
##
## Call:
## lm(formula = Heroism ~ Help_dummy * Motivation_dummy + scale(Credibility),
## data = Weld)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8177 -0.6312 0.1123 0.8083 2.7469
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.69395 0.07821 60.013 < 2e-16 ***
## Help_dummy 1.36745 0.15970 8.563 9.26e-16 ***
## Motivation_dummy 0.13947 0.15667 0.890 0.374151
## scale(Credibility) 0.30359 0.08029 3.781 0.000193 ***
## Help_dummy:Motivation_dummy 0.09406 0.31370 0.300 0.764531
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.282 on 264 degrees of freedom
## Multiple R-squared: 0.2858, Adjusted R-squared: 0.275
## F-statistic: 26.41 on 4 and 264 DF, p-value: < 2.2e-16
## We fitted a linear model (estimated using OLS) to predict Heroism with
## Help_dummy, Motivation_dummy and Credibility (formula: Heroism ~ Help_dummy *
## Motivation_dummy + scale(Credibility)). The model explains a statistically
## significant and substantial proportion of variance (R2 = 0.29, F(4, 264) =
## 26.41, p < .001, adj. R2 = 0.28). The model's intercept, corresponding to
## Help_dummy = 0, Motivation_dummy = 0 and Credibility = 0, is at 4.69 (95% CI
## [4.54, 4.85], t(264) = 60.01, p < .001). Within this model:
##
## - The effect of Help dummy is statistically significant and positive (beta =
## 1.37, 95% CI [1.05, 1.68], t(264) = 8.56, p < .001; Std. beta = 0.45, 95% CI
## [0.35, 0.56])
## - The effect of Motivation dummy is statistically non-significant and positive
## (beta = 0.14, 95% CI [-0.17, 0.45], t(264) = 0.89, p = 0.374; Std. beta = 0.05,
## 95% CI [-0.06, 0.15])
## - The effect of Credibility is statistically significant and positive (beta =
## 0.30, 95% CI [0.15, 0.46], t(264) = 3.78, p < .001; Std. beta = 0.20, 95% CI
## [0.10, 0.31])
## - The effect of Help dummy × Motivation dummy is statistically non-significant
## and positive (beta = 0.09, 95% CI [-0.52, 0.71], t(264) = 0.30, p = 0.765; Std.
## beta = 0.02, 95% CI [-0.09, 0.12])
##
## Standardized parameters were obtained by fitting the model on a standardized
## version of the dataset. 95% Confidence Intervals (CIs) and p-values were
## computed using a Wald t-distribution approximation.