Poster presentation of the current work at the conference:
Poster report
Consent
Go through hypothetical online shopping scenarios.
When they click reviews button:
Clickstop condition: “Reviews were posted by other shoppers just like you. Every person took a minute to post a review that helps you find good products or warns you about concerns.”
Control condition: no click-stop screen.
A list of review comments posted by previous shoppers are shown.
Rate the impression of the product (slider scale from 0 to 100; default value at 50).
Repeat the process two more times.
Dependent measures:
Which of the headphones would you buy?
help: How much do you think reading reviews helps you make decisions? (0 to 100; default at 50, “Moderately”).
desire 1: How much would you consider posting a review of the headphones? (0 to 100; default at 50, “Moderately”).
desire 2: If you get the headphones and are very satisfied, how willing would you be to post a review? (0 to 100; default at 50, “Moderately”).
desire 3: If you get the headphones and are very dis-satisfied, how willing would you be to post a review? (0 to 100; default at 50, “Moderately”).
desire 4: If you get the headphones and later receive an email asking you to post a review, how willing would you be? (0 to 100; default at 50, “Moderately”).
8 attitude questions about posting reviews: To what extent do you agree or disagree with the following statements? When you were considering your willingness to review, you had in mind that (-100 to +100; default at 0, “Neither Agree nor Disagree”)
people who read reviews should contribute reviews (shouldPost)
people have no obligation to post reviews even if they read reviews (noObligation)
people who post reviews are providing free labor to sellers (freeLabor)
sellers or producers should compensate people to post reviews (compensate)
it only takes a minute to post a review (notmuchTime)
it takes too much time to post a review (toomuchTime)
most reviews are fake and not posted by genuine shoppers (fake)
most reviews are real and posted by genuine shoppers (genuine)
Attention check: How many reviewer comments were shown for each product? (Answer: 4 comments)
Gender and age
See comments in R code for explanation of each step:
# Housekeeping:
graphics.off()
rm(list=ls())
#Mturk
Data = read.csv( "Data.csv" )
#First data had a recording problem
Data = Data[-1,]
# First row is explanation of headers, second row is Qualtrics data ID. Store
# info from 1st & 2nd rows, then remove from data frame:
columnInfo = Data[c(1,2),]
Data = droplevels.data.frame( Data[ -c(1,2) , ] )
# Include only rows who finished the survey:
# Finished: response 1 is finished
Data = droplevels( Data[ Data$Finished == 1, ])
# Include only rows who consented to participate:
# Q1 is consent question, response 2 is consent.
Data = droplevels( Data[ Data$Q1 == 2, ] )
# Utility function for "de-factoring" a factor:
factorContent = function( x , returnNumeric=TRUE){
if ( class(x)=="factor" ) {
if ( returnNumeric ) {
return( as.numeric( levels(x)[x] ) )
} else {
return( levels(x)[x] )
}
} else {
if ( class(x)=="character" ) {
if ( returnNumeric ) {
return( as.numeric( x ) )
} else {
return( x )
}
} else { # class(x) is none of above
return(x)
}
}
}
# Convert factor-coded numeric responses to numeric vectors:
for ( colName in c( "Duration..in.seconds.","LocationLatitude","LocationLongitude",
"CS_impression1_1", "CS_impression2_1", "CS_impression3_1",
"Ctrl_impression1_1", "Ctrl_impression2_1", "Ctrl_impression3_1",
"choice",
"help_1", "desire1_1", "desire2_1", "desire3_1", "desire4_1",
"shouldPost_1", "noObligation_1", "freeLabor_1", "compensate_1",
"notmuchTime_1", "toomuchTime_1", "fake_1", "genuine_1",
"Attention",
"Age", "Gender" ) ) {
Data[,colName] = factorContent( Data[,colName] )
}
# Remove irrelevant columns (e.g., date, IP address, etc.):
irrelCols = which( colnames(Data)
%in% c("StartDate", "EndDate", "Status", "IPAddress",
"Progress", "Finished", "RecordedDate", "ResponseId",
"RecipientLastName", "RecipientFirstName",
"RecipientEmail", "ExternalReference",
#"LocationLatitude", "LocationLongitude",
"DistributionChannel", "UserLanguage",
"Q_RecaptchaScore", "Q92" ) )
Data = Data[, -irrelCols]
# Remove Mturk data that were collected before the finalized version (without the additional attitude questions):
Data = Data[!is.na(Data$genuine_1), ]
# Remove subjects who failed attention check.
nSubj = nrow(Data)
subjCorrect = rep(FALSE,nSubj)
for ( sIdx in 1:nSubj ) {
Attentioncheck = as.numeric( Data[sIdx,"Attention"] )
Attentioncorrect = all( Attentioncheck == 4)
if ( Attentioncorrect ) subjCorrect[sIdx]=TRUE
}
DataOfAttentionFail = droplevels( Data[ !subjCorrect , ] )
DataAfterCheck = droplevels( Data[ subjCorrect , ] )
## Remove data with inconsistent attitude answers
# Exclude if any of the following occur:
# * the genuine and fake ratings are both greater than 50+margin
# * the genuine and fake ratings are both less than 50-margin
# * the not-much-time and too-much-time ratings are both greater than 50+margin
# * the not-much-time and too-much-time ratings are both less than 50-margin
margin = 20
nSubj = nrow(DataAfterCheck)
subjCorrect = rep(TRUE,nSubj)
for ( sIdx in 1:nSubj ) {
genuine = as.numeric( DataAfterCheck[sIdx,"genuine_1"] )
fake = as.numeric( DataAfterCheck[sIdx, "fake_1"] )
notmuchTime = as.numeric( DataAfterCheck[sIdx,"notmuchTime_1"] )
toomuchTime = as.numeric( DataAfterCheck[sIdx, "toomuchTime_1"] )
Consistent = all(
genuine > 50+margin & fake > 50+margin |
genuine < -50-margin & fake < -50-margin |
notmuchTime > 50+margin & toomuchTime > 50+margin |
notmuchTime < -50-margin & toomuchTime < -50-margin
)
if (Consistent) subjCorrect[sIdx]=FALSE
}
# Remove inconsistent subjects:
DataMargin = droplevels( DataAfterCheck[ !subjCorrect , ] )
DataAfterCheck = droplevels( DataAfterCheck[ subjCorrect , ] )
# Change column name:
names(DataAfterCheck)[names(DataAfterCheck) == "FL_19_DO"] = "Condition"
## Click-stop data:
ClickstopAfterCheck = DataAfterCheck[ which(DataAfterCheck$Condition == "Click-stop"), ]
## Control data:
ControlAfterCheck = DataAfterCheck[ which(DataAfterCheck$Condition == "Control"), ]
### Demographics
## Total data
# Age
ageTotal = summary(DataAfterCheck$Age)
show(ageTotal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 22.00 32.00 39.50 41.98 49.00 85.00
# Gender
library("plyr")
genderTotal = count(DataAfterCheck$Gender)
genderTotal
## x freq
## 1 1 224
## 2 2 334
## 3 3 2
## 4 4 2
maleLabel = 1 # index for male respondents
femaleLabel = 2 # index for female respondents
maleTotal = genderTotal[maleLabel, 2] / nrow(DataAfterCheck)
maleTotal
## [1] 0.3985765
femaleTotal = genderTotal[femaleLabel, 2] / nrow(DataAfterCheck)
femaleTotal
## [1] 0.594306
## Clickstop and Control
# Clickstop Age
ageClickstop = summary(ClickstopAfterCheck$Age)
ageClickstop
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 23.00 32.00 39.00 41.82 49.00 85.00
# Clickstop Gender
genderClickstop = count(ClickstopAfterCheck$Gender)
genderClickstop
## x freq
## 1 1 113
## 2 2 160
## 3 3 2
## 4 4 2
maleClickstop = genderClickstop[maleLabel,2] / nrow(ClickstopAfterCheck)
maleClickstop
## [1] 0.4079422
femaleClickstop = genderClickstop[femaleLabel,2] / nrow(ClickstopAfterCheck)
femaleClickstop
## [1] 0.5776173
# Control Age
ageControl = summary(ControlAfterCheck$Age)
ageControl
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 22.00 33.00 40.00 42.13 50.00 74.00
# Control Gender
genderControl = count(ControlAfterCheck$Gender)
genderControl
## x freq
## 1 1 111
## 2 2 174
maleControl = genderControl[maleLabel,2] / nrow(ControlAfterCheck)
maleControl
## [1] 0.3894737
femaleControl = genderControl[femaleLabel,2] / nrow(ControlAfterCheck)
femaleControl
## [1] 0.6105263
Total N
nrow(DataAfterCheck)
## [1] 562
Control Condition
nrow(ControlAfterCheck)
## [1] 285
Click-stop Condition
nrow(ClickstopAfterCheck)
## [1] 277
par(mfrow=c(1,1))
plot( DataAfterCheck$LocationLongitude , DataAfterCheck$LocationLatitude ,
xlab="Longitude" , ylab="Latitude" , main="Locations" )
cities = data.frame(
name=c("Seattle","LosAngeles","Chicago","NewYork","Miami",
"Anchorage","Honolulu") ,
lat=c(47.6062,34.0522,41.8781,40.7128,25.7617,
61.2181,21.3069) ,
long=c(-122.3321,-118.2437,-87.6298,-74.0060,-80.1918,
-149.9003,-157.8583) )
for ( citIdx in 1:nrow(cities) ) {
points( x=cities$long[citIdx] , y=cities$lat[citIdx] ,
pch="+" , col="red" )
text( x=cities$long[citIdx] , y=cities$lat[citIdx] ,
labels=cities$name[citIdx] , col="red" ,
cex=0.75 , adj=c(0.5,-0.5) )
}
medianDuration = median( DataAfterCheck$Duration..in.seconds. / 60 )
hist( DataAfterCheck$Duration..in.seconds. / 60 ,
xlab="Minutes" ,
main=bquote("Median Duration: "*.(round(medianDuration,2))) )
abline(v=medianDuration,lty="dotted")
Ctrl_help2 = ControlAfterCheck$help_1
summary(Ctrl_help2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 71.00 84.00 80.89 92.00 100.00
hist(Ctrl_help2, main = "Control condition: Help rating",
xlim = c(0,100),
probability = TRUE,
breaks = 10)
CS_help2 = ClickstopAfterCheck$help_1
summary(CS_help2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.00 74.00 86.00 82.55 95.00 100.00
hist(CS_help2, main = "Click-stop condition: Help rating",
xlim = c(0,100),
probability = TRUE,
breaks = 10)
# t-test:
t.test(Ctrl_help2, CS_help2)
##
## Welch Two Sample t-test
##
## data: Ctrl_help2 and CS_help2
## t = -1.211, df = 559.53, p-value = 0.2264
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -4.336379 1.028582
## sample estimates:
## mean of x mean of y
## 80.89123 82.54513
# Kruskal-wallis test:
kruskal.test(help_1 ~ Condition, DataAfterCheck)
##
## Kruskal-Wallis rank sum test
##
## data: help_1 by Condition
## Kruskal-Wallis chi-squared = 1.8537, df = 1, p-value = 0.1733
Graph of 4 desire-to-post Q’s in the two conditions:
library(psych)
pairs.panels(ControlAfterCheck[,c( "desire1_1", "desire2_1",
"desire3_1", "desire4_1" )] ,
main="Control Condition" ,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE, # show correlation ellipses
#pch = ".",
gap=0
)
pairs.panels(ClickstopAfterCheck[,c( "desire1_1", "desire2_1",
"desire3_1", "desire4_1" )] ,
main="Clickstop Condition" ,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE, # show correlation ellipses
#pch = ".",
gap=0
)
## Cronbach's alpha
ControlDesire = ControlAfterCheck[,c( "desire1_1", "desire2_1",
"desire3_1", "desire4_1" )]
CSDesire = ClickstopAfterCheck[,c( "desire1_1", "desire2_1",
"desire3_1", "desire4_1" )]
alpha(ControlDesire)
## Number of categories should be increased in order to count frequencies.
##
## Reliability analysis
## Call: alpha(x = ControlDesire)
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.92 0.92 0.91 0.73 11 0.0081 63 25 0.72
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.9 0.92 0.93
## Duhachek 0.9 0.92 0.93
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## desire1_1 0.87 0.87 0.82 0.68 6.5 0.0137 0.0045 0.71
## desire2_1 0.86 0.86 0.82 0.68 6.3 0.0140 0.0049 0.68
## desire3_1 0.92 0.92 0.91 0.80 12.0 0.0082 0.0101 0.75
## desire4_1 0.91 0.91 0.89 0.77 9.8 0.0097 0.0170 0.71
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## desire1_1 285 0.94 0.93 0.94 0.88 58 29
## desire2_1 285 0.94 0.94 0.94 0.89 64 29
## desire3_1 285 0.83 0.84 0.74 0.71 73 26
## desire4_1 285 0.87 0.86 0.79 0.76 57 28
alpha(CSDesire)
## Number of categories should be increased in order to count frequencies.
##
## Reliability analysis
## Call: alpha(x = CSDesire)
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.91 0.91 0.9 0.72 10 0.0082 69 24 0.71
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.9 0.91 0.93
## Duhachek 0.9 0.91 0.93
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## desire1_1 0.87 0.87 0.83 0.68 6.4 0.0137 0.0114 0.65
## desire2_1 0.86 0.86 0.82 0.67 6.2 0.0141 0.0085 0.65
## desire3_1 0.93 0.93 0.91 0.82 13.5 0.0073 0.0026 0.80
## desire4_1 0.89 0.89 0.86 0.72 7.8 0.0116 0.0174 0.65
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## desire1_1 277 0.93 0.93 0.91 0.87 64 28
## desire2_1 277 0.94 0.93 0.93 0.88 70 27
## desire3_1 277 0.80 0.81 0.69 0.67 76 24
## desire4_1 277 0.90 0.89 0.84 0.81 65 28
DataDesire = DataAfterCheck[,c( "desire1_1", "desire2_1",
"desire3_1", "desire4_1" )]
alpha(DataDesire)
## Number of categories should be increased in order to count frequencies.
##
## Reliability analysis
## Call: alpha(x = DataDesire)
##
## raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
## 0.92 0.92 0.9 0.73 11 0.0057 66 25 0.72
##
## 95% confidence boundaries
## lower alpha upper
## Feldt 0.90 0.92 0.93
## Duhachek 0.91 0.92 0.93
##
## Reliability if an item is dropped:
## raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## desire1_1 0.87 0.87 0.82 0.69 6.5 0.0096 0.0069 0.68
## desire2_1 0.86 0.86 0.82 0.68 6.3 0.0098 0.0064 0.67
## desire3_1 0.93 0.93 0.91 0.81 12.9 0.0054 0.0056 0.77
## desire4_1 0.90 0.90 0.88 0.75 8.9 0.0074 0.0169 0.68
##
## Item statistics
## n raw.r std.r r.cor r.drop mean sd
## desire1_1 562 0.93 0.93 0.93 0.88 61 29
## desire2_1 562 0.94 0.94 0.94 0.89 67 28
## desire3_1 562 0.82 0.83 0.72 0.70 74 25
## desire4_1 562 0.88 0.88 0.82 0.79 61 28
library(psych)
pairs.panels(Data[,c( "desire1_1", "desire2_1",
"desire3_1", "desire4_1" )] ,
main="Email Condition" ,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE, # show correlation ellipses
#pch = ".",
gap=0
)
meanControlDesire = rowMeans(Data[,grep("desire",colnames(Data))])
Is desire to post greater for dissatisfied (Q3) than satisfied (Q2)?
# Result of t.test is x-y.
t.test( x = ControlAfterCheck$desire3_1 , # dissat
y = ControlAfterCheck$desire2_1 , # sat
paired = TRUE )
##
## Paired t-test
##
## data: ControlAfterCheck$desire3_1 and ControlAfterCheck$desire2_1
## t = 6.6092, df = 284, p-value = 1.906e-10
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 5.821932 10.760525
## sample estimates:
## mean difference
## 8.291228
t.test( x = ClickstopAfterCheck$desire3_1 , # dissat
y = ClickstopAfterCheck$desire2_1 , # sat
paired = TRUE )
##
## Paired t-test
##
## data: ClickstopAfterCheck$desire3_1 and ClickstopAfterCheck$desire2_1
## t = 4.5633, df = 276, p-value = 7.586e-06
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 3.395203 8.547035
## sample estimates:
## mean difference
## 5.971119
# Kruskal-wallis test:
kruskal.test(list(ControlAfterCheck$desire2_1, ControlAfterCheck$desire3_1))
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlAfterCheck$desire2_1, ControlAfterCheck$desire3_1)
## Kruskal-Wallis chi-squared = 13.829, df = 1, p-value = 0.0002002
kruskal.test(list(ClickstopAfterCheck$desire2_1, ClickstopAfterCheck$desire3_1))
##
## Kruskal-Wallis rank sum test
##
## data: list(ClickstopAfterCheck$desire2_1, ClickstopAfterCheck$desire3_1)
## Kruskal-Wallis chi-squared = 5.5243, df = 1, p-value = 0.01875
Difference between conditions for mean desire to post:
meanClickstopDesire = rowMeans(ClickstopAfterCheck[,grep("desire",colnames(ClickstopAfterCheck))])
meanControlDesire = rowMeans(ControlAfterCheck[,grep("desire",colnames(ControlAfterCheck))])
# ClickstopAfterCheck$ClickstopIntention = meanClickstopDesire
# ControlAfterCheck$ControlIntention = meanControlDesire
#
# library("plotrix")
# std.error(ClickstopAfterCheck$ClickstopIntention)
# std.error(ControlAfterCheck$ControlIntention)
hist( meanControlDesire , breaks=seq(0,100,10) ,
probability = TRUE,
xlab="Desire" , main="Mean Desire (4Q's), Control Condition")
hist( meanClickstopDesire , breaks=seq(0,100,10) ,
probability = TRUE,
xlab="Desire" , main="Mean Desire (4Q's), Click-stop Condition" )
t.test(
x = meanControlDesire ,
y = meanClickstopDesire )
##
## Welch Two Sample t-test
##
## data: meanControlDesire and meanClickstopDesire
## t = -2.8166, df = 559.9, p-value = 0.005025
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -9.869401 -1.759594
## sample estimates:
## mean of x mean of y
## 63.13947 68.95397
# ## Effect size
# library("effectsize")
#
# cohensd = cohens_d(meanClickstopDesire, meanControlDesire,
# data = c(ClickstopAfterCheck, ControlAfterCheck),
# correction = FALSE,
# pooled_sd = TRUE,
# paired = FALSE,
# ci = 0.95)
# cohensd[1]
#
# # The calculation below shows the same value.
# pooled_sd = sqrt((sd(meanClickstopDesire)^2 + sd(meanControlDesire)^2)/2)
# calculated_cohensd = (mean(meanClickstopDesire) - mean(meanControlDesire)) / pooled_sd
# show(calculated_cohensd)
#
# ## Power analysis
# library("pwr")
# n1 = length(meanClickstopDesire)
# n2 = length(meanControlDesire)
#
# # what's the current power?
# pwr.t2n.test(n1,n2,
# d = calculated_cohensd,
# sig.level = 0.05)
DataAfterCheck$meanDesire = rowMeans(DataAfterCheck[,grep("desire",colnames(DataAfterCheck))])
kruskal.test(meanDesire ~ Condition, DataAfterCheck)
##
## Kruskal-Wallis rank sum test
##
## data: meanDesire by Condition
## Kruskal-Wallis chi-squared = 8.7031, df = 1, p-value = 0.003177
Ctrl_post2 = ControlAfterCheck$desire1_1
summary(Ctrl_post2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 40.0 62.0 58.4 81.0 100.0
hist(Ctrl_post2, main = bquote("Control: Generic Desire (Q1). Mean = " *.(round(mean(Ctrl_post2),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
CS_post2 = ClickstopAfterCheck$desire1_1
summary(CS_post2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 50.00 70.00 64.35 90.00 100.00
hist(CS_post2, main = bquote("Click-stop: Generic Desire (Q1). Mean = " *.(round(mean(CS_post2),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
t.test(Ctrl_post2, CS_post2)
##
## Welch Two Sample t-test
##
## data: Ctrl_post2 and CS_post2
## t = -2.4847, df = 559.87, p-value = 0.01326
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.654033 -1.246531
## sample estimates:
## mean of x mean of y
## 58.40351 64.35379
kruskal.test(desire1_1 ~ Condition, DataAfterCheck)
##
## Kruskal-Wallis rank sum test
##
## data: desire1_1 by Condition
## Kruskal-Wallis chi-squared = 6.8199, df = 1, p-value = 0.009015
Ctrl_satisfied = ControlAfterCheck$desire2_1
summary(Ctrl_satisfied)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 43.00 71.00 64.31 88.00 100.00
hist(Ctrl_satisfied, main = bquote("Control: if satisfied (Q2). Mean = " *.(round(mean(Ctrl_satisfied),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
CS_satisfied = ClickstopAfterCheck$desire2_1
summary(CS_satisfied)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 50.00 78.00 70.37 94.00 100.00
hist(CS_satisfied, main = bquote("Click-stop: if satisfied (Q2). Mean = " *.(round(mean(CS_satisfied),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
t.test(Ctrl_satisfied, CS_satisfied)
##
## Welch Two Sample t-test
##
## data: Ctrl_satisfied and CS_satisfied
## t = -2.5637, df = 559.94, p-value = 0.01061
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.702087 -1.417034
## sample estimates:
## mean of x mean of y
## 64.31228 70.37184
kruskal.test(desire2_1 ~ Condition, DataAfterCheck)
##
## Kruskal-Wallis rank sum test
##
## data: desire2_1 by Condition
## Kruskal-Wallis chi-squared = 7.206, df = 1, p-value = 0.007266
Ctrl_dissatisfied = ControlAfterCheck$desire3_1
summary(Ctrl_dissatisfied)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 60.0 80.0 72.6 94.0 100.0
hist(Ctrl_dissatisfied, main = bquote("Control: if dissatisfied (Q3). Mean = " *.(round(mean(Ctrl_dissatisfied),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
CS_dissatisfied = ClickstopAfterCheck$desire3_1
summary(CS_dissatisfied)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 65.00 81.00 76.34 95.00 100.00
hist(CS_dissatisfied, main = bquote("Click-stop: if dissatisfied (Q3). Mean = " *.(round(mean(CS_dissatisfied),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
t.test(Ctrl_dissatisfied, CS_dissatisfied)
##
## Welch Two Sample t-test
##
## data: Ctrl_dissatisfied and CS_dissatisfied
## t = -1.773, df = 556.58, p-value = 0.07677
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -7.8821967 0.4032937
## sample estimates:
## mean of x mean of y
## 72.60351 76.34296
kruskal.test(desire3_1 ~ Condition, DataAfterCheck)
##
## Kruskal-Wallis rank sum test
##
## data: desire3_1 by Condition
## Kruskal-Wallis chi-squared = 2.2392, df = 1, p-value = 0.1346
Ctrl_email = ControlAfterCheck$desire4_1
summary(Ctrl_email)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 40.00 56.00 57.24 80.00 100.00
hist(Ctrl_email, main = bquote("Control: Desire to respond to email (Q4). Mean = " *.(round(mean(Ctrl_email),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
CS_email = ClickstopAfterCheck$desire4_1
summary(CS_email)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 50.00 71.00 64.75 87.00 100.00
hist(CS_email, main = bquote("Click-stop: Desire to respond to email (Q4). Mean = " *.(round(mean(CS_email),2)) ),
breaks = 10,
probability = TRUE,
xlim = c(0,100))
t.test(Ctrl_email, CS_email)
##
## Welch Two Sample t-test
##
## data: Ctrl_email and CS_email
## t = -3.1743, df = 559.77, p-value = 0.001585
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -12.154997 -2.862395
## sample estimates:
## mean of x mean of y
## 57.23860 64.74729
kruskal.test(desire4_1 ~ Condition, DataAfterCheck)
##
## Kruskal-Wallis rank sum test
##
## data: desire4_1 by Condition
## Kruskal-Wallis chi-squared = 11.457, df = 1, p-value = 0.0007121
Gender data extraction:
ControlMale = ControlAfterCheck[which(ControlAfterCheck$Gender == maleLabel),]
ControlFemale = ControlAfterCheck[which(ControlAfterCheck$Gender == femaleLabel),]
ClickstopMale = ClickstopAfterCheck[which(ClickstopAfterCheck$Gender == maleLabel),]
ClickstopFemale = ClickstopAfterCheck[which(ClickstopAfterCheck$Gender == femaleLabel),]
GenderData = rbind(ControlFemale, ClickstopFemale, ControlMale, ClickstopMale)
# append columns with meaningful names:
GenderData$Gendername[GenderData$Gender == maleLabel] = "Male"
GenderData$Gendername[GenderData$Gender == femaleLabel] = "Female"
GenderData$Gendername = factor(GenderData$Gendername)
Effect of message among men vs. women in the mean desire-to-post
# male
meanControlDesireMale = rowMeans(ControlMale[,grep("desire",colnames(ControlMale))])
meanClickstopDesireMale = rowMeans(ClickstopMale[,grep("desire",colnames(ClickstopMale))])
# female
meanControlDesireFemale = rowMeans(ControlFemale[,grep("desire",colnames(ControlFemale))])
meanClickstopDesireFemale = rowMeans(ClickstopFemale[,grep("desire",colnames(ClickstopFemale))])
# t-test:
t.test(meanControlDesireMale, meanClickstopDesireMale) #male
##
## Welch Two Sample t-test
##
## data: meanControlDesireMale and meanClickstopDesireMale
## t = -2.4147, df = 221.31, p-value = 0.01656
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -14.270225 -1.444636
## sample estimates:
## mean of x mean of y
## 55.93018 63.78761
t.test(meanControlDesireFemale, meanClickstopDesireFemale) #female
##
## Welch Two Sample t-test
##
## data: meanControlDesireFemale and meanClickstopDesireFemale
## t = -1.9281, df = 331.8, p-value = 0.0547
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.0676593 0.1009208
## sample estimates:
## mean of x mean of y
## 67.73851 72.72187
# Kruskal-wallis test:
kruskal.test(list(meanControlDesireMale, meanClickstopDesireMale)) #male
##
## Kruskal-Wallis rank sum test
##
## data: list(meanControlDesireMale, meanClickstopDesireMale)
## Kruskal-Wallis chi-squared = 6.4809, df = 1, p-value = 0.0109
kruskal.test(list(meanControlDesireFemale, meanClickstopDesireFemale)) #female
##
## Kruskal-Wallis rank sum test
##
## data: list(meanControlDesireFemale, meanClickstopDesireFemale)
## Kruskal-Wallis chi-squared = 3.2438, df = 1, p-value = 0.07169
Effect of message among men vs. women in Q1
# Male
ControlMalePost = ControlMale$desire1_1
CSMalePost = ClickstopMale$desire1_1
# Female
ControlFemalePost = ControlFemale$desire1_1
CSFemalePost = ClickstopFemale$desire1_1
# t-test:
t.test( ControlMalePost, CSMalePost ) #male
##
## Welch Two Sample t-test
##
## data: ControlMalePost and CSMalePost
## t = -1.8185, df = 221.7, p-value = 0.07034
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -14.5011532 0.5826329
## sample estimates:
## mean of x mean of y
## 50.80180 57.76106
t.test( ControlFemalePost, CSFemalePost) #female
##
## Welch Two Sample t-test
##
## data: ControlFemalePost and CSFemalePost
## t = -2.1403, df = 331.98, p-value = 0.03306
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -12.1446536 -0.5120993
## sample estimates:
## mean of x mean of y
## 63.25287 69.58125
# Kruskal-wallis test:
kruskal.test(list(ControlMalePost, CSMalePost)) #male
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlMalePost, CSMalePost)
## Kruskal-Wallis chi-squared = 3.3605, df = 1, p-value = 0.06678
kruskal.test(list(ControlFemalePost, CSFemalePost)) #female
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlFemalePost, CSFemalePost)
## Kruskal-Wallis chi-squared = 4.5027, df = 1, p-value = 0.03384
Effect of message among men vs. women in Q3
# Male
ControlMaleQ3 = ControlMale$desire3_1
CSMaleQ3 = ClickstopMale$desire3_1
# Female
ControlFemaleQ3 = ControlFemale$desire3_1
CSFemaleQ3 = ClickstopFemale$desire3_1
# t-test:
t.test( ControlMaleQ3, CSMaleQ3 ) #male
##
## Welch Two Sample t-test
##
## data: ControlMaleQ3 and CSMaleQ3
## t = -2.5304, df = 220.35, p-value = 0.01209
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -14.498223 -1.802503
## sample estimates:
## mean of x mean of y
## 67.50450 75.65487
t.test( ControlFemaleQ3, CSFemaleQ3) #female
##
## Welch Two Sample t-test
##
## data: ControlFemaleQ3 and CSFemaleQ3
## t = -0.27898, df = 331.82, p-value = 0.7804
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -6.239138 4.689282
## sample estimates:
## mean of x mean of y
## 75.85632 76.63125
# Kruskal-wallis test:
kruskal.test(list(ControlMaleQ3, CSMaleQ3)) #male
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlMaleQ3, CSMaleQ3)
## Kruskal-Wallis chi-squared = 7.0344, df = 1, p-value = 0.007996
kruskal.test(list(ControlFemaleQ3, CSFemaleQ3)) #female
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlFemaleQ3, CSFemaleQ3)
## Kruskal-Wallis chi-squared = 0.10266, df = 1, p-value = 0.7487
Effect of message among men vs. women in Q4
# male
ControlMaleQ4 = ControlMale$desire4_1
CSMaleQ4 = ClickstopMale$desire4_1
# female
ControlFemaleQ4 = ControlFemale$desire4_1
CSFemaleQ4 = ClickstopFemale$desire4_1
# t-test:
t.test( ControlMaleQ4, CSMaleQ4 ) #male
##
## Welch Two Sample t-test
##
## data: ControlMaleQ4 and CSMaleQ4
## t = -2.575, df = 220.66, p-value = 0.01068
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -16.645956 -2.212531
## sample estimates:
## mean of x mean of y
## 48.74775 58.17699
t.test( ControlFemaleQ4, CSFemaleQ4) #female
##
## Welch Two Sample t-test
##
## data: ControlFemaleQ4 and CSFemaleQ4
## t = -2.3202, df = 331.96, p-value = 0.02094
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -12.752040 -1.050115
## sample estimates:
## mean of x mean of y
## 62.65517 69.55625
# Kruskal-wallis test:
kruskal.test(list(ControlMaleQ4, CSMaleQ4)) #male
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlMaleQ4, CSMaleQ4)
## Kruskal-Wallis chi-squared = 6.749, df = 1, p-value = 0.00938
kruskal.test(list(ControlFemaleQ4, CSFemaleQ4)) #female
##
## Kruskal-Wallis rank sum test
##
## data: list(ControlFemaleQ4, CSFemaleQ4)
## Kruskal-Wallis chi-squared = 5.4018, df = 1, p-value = 0.02012
One thing to note: in this study, the percentage of male was: 0.4, and the percentage of female was: 0.59.
Mean Desire:
GenderData$meanDesire = rowMeans(GenderData[,grep("desire",colnames(GenderData))])
## Mean desire
anovaMeanDesire = aov( meanDesire ~ Gendername * Condition, GenderData)
summary(anovaMeanDesire)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 14037 14037 24.426 1.02e-06 ***
## Condition 1 5250 5250 9.137 0.00262 **
## Gendername:Condition 1 277 277 0.481 0.48805
## Residuals 554 318359 575
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library("ggpubr")
## Loading required package: ggplot2
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
##
## Attaching package: 'ggpubr'
## The following object is masked from 'package:plyr':
##
## mutate
ggline(GenderData, x = "Condition", y = "meanDesire", color = "Gendername", linetype = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
# Interaction Power analysis:
library(Superpower)
ControlMaleMean = rowMeans(ControlMale[,grep("desire",colnames(ControlMale))])
ControlFemaleMean = rowMeans(ControlFemale[,grep("desire",colnames(ControlFemale))])
ClickstopMaleMean = rowMeans(ClickstopMale[,grep("desire",colnames(ClickstopMale))])
ClickstopFemaleMean = rowMeans(ClickstopFemale[,grep("desire",colnames(ClickstopFemale))])
pooled_sd = sqrt((sd(ControlFemaleMean)^2 + sd(ControlMaleMean)^2)/2)
pooled_sd = sqrt((sd(ClickstopFemaleMean)^2 + sd(ClickstopMaleMean)^2)/2)
#a1 = Control
#a2 = Clickstop
#b1 = Male
#b2 = Female
design = ANOVA_design(
design = "2b*2b",
n = 219,
mu = c(
mean(ControlMaleMean),
mean(ControlFemaleMean),
mean(ClickstopMaleMean),
mean(ClickstopFemaleMean)
),
sd = pooled_sd,
plot = FALSE)
ANOVA_exact(design, alpha_level = 0.05)
## Power and Effect sizes for ANOVA tests
## power partial_eta_squared cohen_f non_centrality
## a 97.8462 0.0179 0.1350 15.8989
## b 99.9996 0.0454 0.2181 41.4866
## a:b 14.4826 0.0009 0.0302 0.7965
##
## Power and Effect sizes for pairwise comparisons (t-tests)
## power effect_size
## p_a_a1_b_b1_a_a1_b_b2 99.93 0.50
## p_a_a1_b_b1_a_a2_b_b1 93.10 0.33
## p_a_a1_b_b1_a_a2_b_b2 100.00 0.70
## p_a_a1_b_b2_a_a2_b_b1 40.96 -0.17
## p_a_a1_b_b2_a_a2_b_b2 58.85 0.21
## p_a_a2_b_b1_a_a2_b_b2 97.47 0.37
## Power and Effect sizes for ANOVA tests
## power partial_eta_squared cohen_f non_centrality
## a 97.8462 0.0179 0.1350 15.8989
## b 99.9996 0.0454 0.2181 41.4866
## a:b 14.4826 0.0009 0.0302 0.7965
##
## Power and Effect sizes for pairwise comparisons (t-tests)
## power effect_size
## p_a_a1_b_b1_a_a1_b_b2 99.93 0.50
## p_a_a1_b_b1_a_a2_b_b1 93.10 0.33
## p_a_a1_b_b1_a_a2_b_b2 100.00 0.70
## p_a_a1_b_b2_a_a2_b_b1 40.96 -0.17
## p_a_a1_b_b2_a_a2_b_b2 58.85 0.21
## p_a_a2_b_b1_a_a2_b_b2 97.47 0.37
Generic Desire (Q1):
anovaQ1 = aov( desire1_1 ~ Gendername * Condition, GenderData)
summary(anovaQ1)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 19217 19217 25.008 7.67e-07 ***
## Condition 1 6037 6037 7.856 0.00524 **
## Gendername:Condition 1 13 13 0.017 0.89526
## Residuals 554 425720 768
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "desire1_1", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
Desire if satisfied (Q2):
anovaQ2 = aov( desire2_1 ~ Gendername * Condition, GenderData)
summary(anovaQ2)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 18946 18946 25.043 7.54e-07 ***
## Condition 1 5558 5558 7.347 0.00693 **
## Gendername:Condition 1 31 31 0.041 0.83971
## Residuals 554 419124 757
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "desire2_1", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
Desire if dissatisfied (Q3):
anovaQ3 = aov( desire3_1 ~ Gendername * Condition, GenderData)
summary(anovaQ3)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 2851 2851.3 4.588 0.0326 *
## Condition 1 1948 1947.8 3.134 0.0772 .
## Gendername:Condition 1 1822 1822.0 2.932 0.0874 .
## Residuals 554 344264 621.4
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "desire3_1", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
# Interaction Power analysis:
ControlMaleMean = ControlMale$desire3_1
ControlFemaleMean = ControlFemale$desire3_1
ClickstopMaleMean = ClickstopMale$desire3_1
ClickstopFemaleMean = ClickstopFemale$desire3_1
pooled_sd = sqrt((sd(ControlFemaleMean)^2 + sd(ControlMaleMean)^2)/2)
pooled_sd = sqrt((sd(ClickstopFemaleMean)^2 + sd(ClickstopMaleMean)^2)/2)
#a1 = Control
#a2 = Clickstop
#b1 = Male
#b2 = Female
design = ANOVA_design(
design = "2b*2b",
n = 219,
mu = c(
mean(ControlMaleMean),
mean(ControlFemaleMean),
mean(ClickstopMaleMean),
mean(ClickstopFemaleMean)
),
sd = pooled_sd,
plot = FALSE)
ANOVA_exact(design, alpha_level = 0.05)
## Power and Effect sizes for ANOVA tests
## power partial_eta_squared cohen_f non_centrality
## a 79.6914 0.0089 0.0946 7.8047
## b 83.0621 0.0097 0.0989 8.5252
## a:b 63.5362 0.0061 0.0782 5.3295
##
## Power and Effect sizes for pairwise comparisons (t-tests)
## power effect_size
## p_a_a1_b_b1_a_a1_b_b2 95.81 0.35
## p_a_a1_b_b1_a_a2_b_b1 94.95 0.34
## p_a_a1_b_b1_a_a2_b_b2 98.08 0.39
## p_a_a1_b_b2_a_a2_b_b1 5.09 -0.01
## p_a_a1_b_b2_a_a2_b_b2 6.35 0.03
## p_a_a2_b_b1_a_a2_b_b2 7.16 0.04
## Power and Effect sizes for ANOVA tests
## power partial_eta_squared cohen_f non_centrality
## a 79.6914 0.0089 0.0946 7.8047
## b 83.0621 0.0097 0.0989 8.5252
## a:b 63.5362 0.0061 0.0782 5.3295
##
## Power and Effect sizes for pairwise comparisons (t-tests)
## power effect_size
## p_a_a1_b_b1_a_a1_b_b2 95.81 0.35
## p_a_a1_b_b1_a_a2_b_b1 94.95 0.34
## p_a_a1_b_b1_a_a2_b_b2 98.08 0.39
## p_a_a1_b_b2_a_a2_b_b1 5.09 -0.01
## p_a_a1_b_b2_a_a2_b_b2 6.35 0.03
## p_a_a2_b_b1_a_a2_b_b2 7.16 0.04
Desire to respond to an email (Q4):
## respond to email (Q4)
anovaQ4 = aov( desire4_1 ~ Gendername * Condition, GenderData)
summary(anovaQ4)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 20805 20805 27.888 1.85e-07 ***
## Condition 1 8734 8734 11.708 0.000668 ***
## Gendername:Condition 1 214 214 0.287 0.592385
## Residuals 554 413294 746
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "desire4_1", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
# Control:
pairs.panels(ControlAfterCheck[,c("shouldPost_1", "noObligation_1", "freeLabor_1",
"compensate_1", "notmuchTime_1", "toomuchTime_1",
"fake_1" , "genuine_1", "desire1_1" )] ,
main="Control Condition" ,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE, # show correlation ellipses
#pch = ".",
gap=0
)
# Clickstop:
pairs.panels(ClickstopAfterCheck[,c("shouldPost_1", "noObligation_1", "freeLabor_1",
"compensate_1", "notmuchTime_1", "toomuchTime_1",
"fake_1" , "genuine_1", "desire1_1" )] ,
main="Clickstop Condition" ,
method = "pearson", # correlation method
hist.col = "#00AFBB",
density = TRUE, # show density plots
ellipses = TRUE, # show correlation ellipses
#pch = ".",
gap=0
)
Three positive attitudes, shouldPost,
notmuchTime, and genuine are positively
related with the desire to post.
toomuchTime is negatively related with the desire to
post. Small negative correlations with noObligation and
fake.
#Control
Ctrl_noObligation = mean(ControlAfterCheck$noObligation_1)
Ctrl_freeLabor = mean(ControlAfterCheck$freeLabor_1)
Ctrl_compensate = mean(ControlAfterCheck$compensate_1)
Ctrl_toomuchTime = mean(ControlAfterCheck$toomuchTime_1)
Ctrl_fake = mean(ControlAfterCheck$fake_1)
Ctrl_shouldPost = mean(ControlAfterCheck$shouldPost_1)
Ctrl_notmuchTime = mean(ControlAfterCheck$notmuchTime_1)
Ctrl_genuine = mean(ControlAfterCheck$genuine_1)
Ctrl_attitudes = c(Ctrl_shouldPost, Ctrl_noObligation, Ctrl_freeLabor,
Ctrl_compensate, Ctrl_toomuchTime, Ctrl_notmuchTime,
Ctrl_fake, Ctrl_genuine)
## Clickstop
Clickstop_noObligation = mean(ClickstopAfterCheck$noObligation_1)
Clickstop_freeLabor = mean(ClickstopAfterCheck$freeLabor_1)
Clickstop_compensate = mean(ClickstopAfterCheck$compensate_1)
Clickstop_toomuchTime = mean(ClickstopAfterCheck$toomuchTime_1)
Clickstop_fake = mean(ClickstopAfterCheck$fake_1)
Clickstop_shouldPost = mean(ClickstopAfterCheck$shouldPost_1)
Clickstop_notmuchTime = mean(ClickstopAfterCheck$notmuchTime_1)
Clickstop_genuine = mean(ClickstopAfterCheck$genuine_1)
Clickstop_attitudes = c(Clickstop_shouldPost, Clickstop_noObligation, Clickstop_freeLabor,
Clickstop_compensate, Clickstop_toomuchTime, Clickstop_notmuchTime,
Clickstop_fake, Clickstop_genuine)
CtrlAttitude = as.data.frame(Ctrl_attitudes)
CtrlAttitude2 = as.data.frame(t(CtrlAttitude)) #transpose
names(CtrlAttitude2) = c("shouldPost", "NoObligation", "freeLabor", "shouldPay", "toomuchTime",
"notmuchTime", "Fake", "Genuine")
CSAttitude = as.data.frame(Clickstop_attitudes)
CSAttitude2 = as.data.frame(t(CSAttitude)) #transpose
names(CSAttitude2) = c("shouldPost", "NoObligation", "freeLabor", "shouldPay", "toomuchTime",
"notmuchTime", "Fake", "Genuine")
Attitudes = rbind(CtrlAttitude2, CSAttitude2)
Attitudes = as.matrix(Attitudes)
## Bar plot
par(mar=c(4, 3.8, 3.5, 0))
barplot = barplot(Attitudes,
main = "Attitudes: Control vs. Clickstop",
xlab = "Attitudes", ylab = "(Dis)Agreement Rating",
col = c("lightgrey","darkorange"),
beside = TRUE,
width = 10,
cex.names=0.65)
legend("topleft", c("Control","Clickstop"), fill = c("lightgrey","darkorange"), cex = .7)
text(barplot, 0, round(Attitudes, 1),cex=0.6,pos=3)
We can see that every measure changes in the positive direction from control to clickstop.
That is, the clickstop condition had more generous attitudes toward posting reviews than the control condition in all measures, especially:
perceived obligation: increased perceived obligation in the clickstop condition.
time perception: the clickstop condition reported that it doesn’t take much time to post reviews (vs. control condition with the opposite perception).
# Put in same direction for ease of understanding:
# the more positive the number, the more generous attitude
Ctrl_responsibility1 = ControlAfterCheck$shouldPost_1
Ctrl_responsibility2 = -ControlAfterCheck$noObligation_1
CS_responsibility1 = ClickstopAfterCheck$shouldPost_1
CS_responsibility2 = -ClickstopAfterCheck$noObligation_1
Ctrl_responsibilityTotal = (Ctrl_responsibility1 + Ctrl_responsibility2) / 2
CS_responsibilityTotal = (CS_responsibility1 + CS_responsibility2) / 2
# t-test:
t.test(Ctrl_responsibilityTotal, CS_responsibilityTotal)
##
## Welch Two Sample t-test
##
## data: Ctrl_responsibilityTotal and CS_responsibilityTotal
## t = -3.2153, df = 556.31, p-value = 0.001379
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -19.237791 -4.646787
## sample estimates:
## mean of x mean of y
## -28.99825 -17.05596
# kruskal-wallis test:
kruskal.test(list(Ctrl_responsibilityTotal, CS_responsibilityTotal))
##
## Kruskal-Wallis rank sum test
##
## data: list(Ctrl_responsibilityTotal, CS_responsibilityTotal)
## Kruskal-Wallis chi-squared = 11.932, df = 1, p-value = 0.0005517
Ctrl_effort1 = ControlAfterCheck$notmuchTime_1
Ctrl_effort2 = -ControlAfterCheck$toomuchTime_1
CS_effort1 = ClickstopAfterCheck$notmuchTime_1
CS_effort2 = -ClickstopAfterCheck$toomuchTime_1
Ctrl_effortTotal = (Ctrl_effort1 + Ctrl_effort2) / 2
CS_effortTotal = (CS_effort1 + CS_effort2) / 2
# t-test:
t.test(Ctrl_effortTotal, CS_effortTotal)
##
## Welch Two Sample t-test
##
## data: Ctrl_effortTotal and CS_effortTotal
## t = -3.2915, df = 558.01, p-value = 0.00106
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -23.052364 -5.821637
## sample estimates:
## mean of x mean of y
## 0.7561404 15.1931408
# kruskal-wallis test:
kruskal.test(list(Ctrl_effortTotal, CS_effortTotal))
##
## Kruskal-Wallis rank sum test
##
## data: list(Ctrl_effortTotal, CS_effortTotal)
## Kruskal-Wallis chi-squared = 11.195, df = 1, p-value = 0.0008204
Ctrl_genuine = ControlAfterCheck$genuine_1
Ctrl_fake = -ControlAfterCheck$fake_1
CS_genuine = ClickstopAfterCheck$genuine_1
CS_fake = -ClickstopAfterCheck$fake_1
Ctrl_genuineTotal = (Ctrl_genuine + Ctrl_fake) / 2
CS_genuineTotal = (CS_genuine + CS_fake) / 2
# t-test:
t.test(Ctrl_genuineTotal, CS_genuineTotal)
##
## Welch Two Sample t-test
##
## data: Ctrl_genuineTotal and CS_genuineTotal
## t = -1.2825, df = 555.58, p-value = 0.2002
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -11.547105 2.424729
## sample estimates:
## mean of x mean of y
## 29.55614 34.11733
# kruskal-wallis test:
kruskal.test(list(Ctrl_genuineTotal, CS_genuineTotal))
##
## Kruskal-Wallis rank sum test
##
## data: list(Ctrl_genuineTotal, CS_genuineTotal)
## Kruskal-Wallis chi-squared = 2.3041, df = 1, p-value = 0.129
Reverse directions of some questions so the more positive the ratings, the more positive (generous) attitude towards online reviewing:
#noObligtion
#freeLabor
#compensate
#toomuchTime
#fake
## Control:
Ctrl_noObligation = -mean(ControlAfterCheck$noObligation_1)
Ctrl_freeLabor = -mean(ControlAfterCheck$freeLabor_1)
Ctrl_compensate = -mean(ControlAfterCheck$compensate_1)
Ctrl_toomuchTime = -mean(ControlAfterCheck$toomuchTime_1)
Ctrl_fake = -mean(ControlAfterCheck$fake_1)
Ctrl_shouldPost = mean(ControlAfterCheck$shouldPost_1)
Ctrl_notmuchTime = mean(ControlAfterCheck$notmuchTime_1)
Ctrl_genuine = mean(ControlAfterCheck$genuine_1)
## Clickstop
Clickstop_noObligation = -mean(ClickstopAfterCheck$noObligation_1)
Clickstop_freeLabor = -mean(ClickstopAfterCheck$freeLabor_1)
Clickstop_compensate = -mean(ClickstopAfterCheck$compensate_1)
Clickstop_toomuchTime = -mean(ClickstopAfterCheck$toomuchTime_1)
Clickstop_fake = -mean(ClickstopAfterCheck$fake_1)
Clickstop_shouldPost = mean(ClickstopAfterCheck$shouldPost_1)
Clickstop_notmuchTime = mean(ClickstopAfterCheck$notmuchTime_1)
Clickstop_genuine = mean(ClickstopAfterCheck$genuine_1)
### Overall attitude
Ctrl_overallattitude = mean( c(Ctrl_noObligation, Ctrl_freeLabor, Ctrl_compensate,
Ctrl_toomuchTime, Ctrl_fake, Ctrl_shouldPost,
Ctrl_notmuchTime, Ctrl_genuine))
Clickstop_overallattitude = mean( c(Clickstop_noObligation, Clickstop_freeLabor,
Clickstop_compensate, Clickstop_toomuchTime, Clickstop_fake,
Clickstop_shouldPost, Clickstop_notmuchTime, Clickstop_genuine))
Overall attitude towards posting reviews is greater in the clickstop condition (vs. control).
Control attitude: 10.59
Clickstop attitude: 18.95
#Control Male
Ctrl_noObligation = mean(ControlMale$noObligation_1)
Ctrl_freeLabor = mean(ControlMale$freeLabor_1)
Ctrl_compensate = mean(ControlMale$compensate_1)
Ctrl_toomuchTime = mean(ControlMale$toomuchTime_1)
Ctrl_fake = mean(ControlMale$fake_1)
Ctrl_shouldPost = mean(ControlMale$shouldPost_1)
Ctrl_notmuchTime = mean(ControlMale$notmuchTime_1)
Ctrl_genuine = mean(ControlMale$genuine_1)
Ctrl_attitudes = c(Ctrl_shouldPost, Ctrl_noObligation, Ctrl_freeLabor,
Ctrl_compensate, Ctrl_toomuchTime, Ctrl_notmuchTime,
Ctrl_fake, Ctrl_genuine)
#Clickstop Male
Clickstop_noObligation = mean(ClickstopMale$noObligation_1)
Clickstop_freeLabor = mean(ClickstopMale$freeLabor_1)
Clickstop_compensate = mean(ClickstopMale$compensate_1)
Clickstop_toomuchTime = mean(ClickstopMale$toomuchTime_1)
Clickstop_fake = mean(ClickstopMale$fake_1)
Clickstop_shouldPost = mean(ClickstopMale$shouldPost_1)
Clickstop_notmuchTime = mean(ClickstopMale$notmuchTime_1)
Clickstop_genuine = mean(ClickstopMale$genuine_1)
Clickstop_attitudes = c(Clickstop_shouldPost, Clickstop_noObligation, Clickstop_freeLabor,
Clickstop_compensate, Clickstop_toomuchTime, Clickstop_notmuchTime,
Clickstop_fake, Clickstop_genuine)
CtrlAttitude = as.data.frame(Ctrl_attitudes)
CtrlAttitude2 = as.data.frame(t(CtrlAttitude))
names(CtrlAttitude2) = c("shouldPost", "NoObligation", "freeLabor", "shouldPay", "toomuchTime",
"notmuchTime", "Fake", "Genuine")
CSAttitude = as.data.frame(Clickstop_attitudes)
CSAttitude2 = as.data.frame(t(CSAttitude))
names(CSAttitude2) = c("shouldPost", "NoObligation", "freeLabor", "shouldPay", "toomuchTime",
"notmuchTime", "Fake", "Genuine")
MaleAttitudes = rbind(CtrlAttitude2, CSAttitude2)
MaleAttitudes = as.matrix(MaleAttitudes)
## Bar plot
par(mar=c(4, 3.8, 3.5, 0))
barplot = barplot(MaleAttitudes,
main = "Male Attitudes: Control vs. Clickstop",
xlab = "Attitudes", ylab = "(Dis)Agreement Rating",
col = c("lightgrey","darkorange"),
beside = TRUE,
width = 10,
cex.names=0.65)
legend("topleft", c("Male Control","Male Clickstop"), fill = c("lightgrey","darkorange"), cex = .7)
text(barplot, 0, round(MaleAttitudes, 1),cex=0.6,pos=3)
#Control Female
Ctrl_noObligation = mean(ControlFemale$noObligation_1)
Ctrl_freeLabor = mean(ControlFemale$freeLabor_1)
Ctrl_compensate = mean(ControlFemale$compensate_1)
Ctrl_toomuchTime = mean(ControlFemale$toomuchTime_1)
Ctrl_fake = mean(ControlFemale$fake_1)
Ctrl_shouldPost = mean(ControlFemale$shouldPost_1)
Ctrl_notmuchTime = mean(ControlFemale$notmuchTime_1)
Ctrl_genuine = mean(ControlFemale$genuine_1)
Ctrl_attitudes = c(Ctrl_shouldPost, Ctrl_noObligation, Ctrl_freeLabor,
Ctrl_compensate, Ctrl_toomuchTime, Ctrl_notmuchTime,
Ctrl_fake, Ctrl_genuine)
#Clickstop Female
Clickstop_noObligation = mean(ClickstopFemale$noObligation_1)
Clickstop_freeLabor = mean(ClickstopFemale$freeLabor_1)
Clickstop_compensate = mean(ClickstopFemale$compensate_1)
Clickstop_toomuchTime = mean(ClickstopFemale$toomuchTime_1)
Clickstop_fake = mean(ClickstopFemale$fake_1)
Clickstop_shouldPost = mean(ClickstopFemale$shouldPost_1)
Clickstop_notmuchTime = mean(ClickstopFemale$notmuchTime_1)
Clickstop_genuine = mean(ClickstopFemale$genuine_1)
Clickstop_attitudes = c(Clickstop_shouldPost, Clickstop_noObligation, Clickstop_freeLabor,
Clickstop_compensate, Clickstop_toomuchTime, Clickstop_notmuchTime,
Clickstop_fake, Clickstop_genuine)
CtrlAttitude = as.data.frame(Ctrl_attitudes)
CtrlAttitude2 = as.data.frame(t(CtrlAttitude))
names(CtrlAttitude2) = c("shouldPost", "NoObligation", "freeLabor", "shouldPay", "toomuchTime",
"notmuchTime", "Fake", "Genuine")
CSAttitude = as.data.frame(Clickstop_attitudes)
CSAttitude2 = as.data.frame(t(CSAttitude))
names(CSAttitude2) = c("shouldPost", "NoObligation", "freeLabor", "shouldPay", "toomuchTime",
"notmuchTime", "Fake", "Genuine")
FemaleAttitudes = rbind(CtrlAttitude2, CSAttitude2)
FemaleAttitudes = as.matrix(FemaleAttitudes)
## Bar plot
par(mar=c(4, 3.8, 3.5, 0))
barplot = barplot(FemaleAttitudes,
main = "Female Attitudes: Control vs. Clickstop",
xlab = "Attitudes", ylab = "(Dis)Agreement Rating",
col = c("lightgrey","darkorange"),
beside = TRUE,
width = 10,
cex.names=0.65)
legend("topleft", c("Female Control","Female Clickstop"), fill = c("lightgrey","darkorange"), cex = .7)
text(barplot, 0, round(FemaleAttitudes, 1),cex=0.6,pos=3)
Perceived responsibility:
GenderData$responsibility = (GenderData$shouldPost_1 + (-GenderData$noObligation_1)) / 2
anovaResponsible = aov( responsibility ~ Gendername * Condition, GenderData)
summary(anovaResponsible)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 14516 14516 7.642 0.00589 **
## Condition 1 19080 19080 10.045 0.00161 **
## Gendername:Condition 1 2527 2527 1.330 0.24926
## Residuals 554 1052256 1899
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "responsibility", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
Perceived ease:
GenderData$ease = (GenderData$notmuchTime_1 + (-GenderData$toomuchTime_1)) / 2
anovaEase = aov( ease ~ Gendername * Condition, GenderData)
summary(anovaEase)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 14158 14158 5.265 0.022133 *
## Condition 1 31242 31242 11.618 0.000701 ***
## Gendername:Condition 1 1870 1870 0.695 0.404704
## Residuals 554 1489749 2689
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "ease", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
Perceived genuineness:
GenderData$fakeReal = (GenderData$genuine_1 + (-GenderData$fake_1)) / 2
anovaFake = aov( fakeReal ~ Gendername * Condition, GenderData)
summary(anovaFake)
## Df Sum Sq Mean Sq F value Pr(>F)
## Gendername 1 9781 9781 5.573 0.0186 *
## Condition 1 3623 3623 2.064 0.1514
## Gendername:Condition 1 51 51 0.029 0.8646
## Residuals 554 972352 1755
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggline(GenderData, x = "Condition", y = "fakeReal", color = "Gendername",
palette = c("indianred3", "steelblue"),
add = "mean_se", size = 1.1)
Test if some attitude ratings are mediating the effect of the click-stop on the desire-to-post.
library(mediation)
## Loading required package: MASS
## Loading required package: Matrix
## Loading required package: mvtnorm
## Loading required package: sandwich
## mediation: Causal Mediation Analysis
## Version: 4.5.0
##
## Attaching package: 'mediation'
## The following object is masked from 'package:psych':
##
## mediate
GenderData$Condition = factor(GenderData$Condition)
GenderData$ConditionNum[GenderData$Condition == "Control"] = 1
GenderData$ConditionNum[GenderData$Condition == "Click-stop"] = 2
## responsibility
# Direct effect
mediationDirect = lm(meanDesire ~ ConditionNum + responsibility, data=GenderData)
# mediator
mediatorResp = lm(responsibility ~ ConditionNum, data=GenderData)
# mediation
mediation = mediation::mediate( model.m = mediatorResp,
model.y = mediationDirect,
treat = "ConditionNum",
mediator = "responsibility")
summary(mediation)
##
## Causal Mediation Analysis
##
## Quasi-Bayesian Confidence Intervals
##
## Estimate 95% CI Lower 95% CI Upper p-value
## ACME 2.812 0.998 4.84 0.002 **
## ADE 3.026 -0.779 6.63 0.112
## Total Effect 5.838 1.650 9.98 0.004 **
## Prop. Mediated 0.475 0.190 1.42 0.006 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Sample Size Used: 558
##
##
## Simulations: 1000
library(psych)
psychMediation = psych::mediate(meanDesire ~ ConditionNum + (responsibility), data=GenderData)
summary(psychMediation)
## Call: psych::mediate(y = meanDesire ~ ConditionNum + (responsibility),
## data = GenderData)
##
## Direct effect estimates (traditional regression) (c') X + M on Y
## meanDesire se t df Prob
## Intercept 67.26 3.04 22.09 555 4.49e-78
## ConditionNum 3.05 1.88 1.63 555 1.04e-01
## responsibility 0.25 0.02 11.66 555 3.04e-28
##
## R = 0.46 R2 = 0.21 F = 72.96 on 2 and 555 DF p-value: 7.38e-29
##
## Total effect estimates (c) (X on Y)
## meanDesire se t df Prob
## Intercept 57.26 3.26 17.58 556 2.33e-55
## ConditionNum 5.88 2.07 2.84 556 4.69e-03
##
## 'a' effect estimates (X on M)
## responsibility se t df Prob
## Intercept -40.44 5.84 -6.93 556 1.18e-11
## ConditionNum 11.44 3.72 3.08 556 2.18e-03
##
## 'b' effect estimates (M on Y controlling for X)
## meanDesire se t df Prob
## responsibility 0.25 0.02 11.66 555 3.04e-28
##
## 'ab' effect estimates (through all mediators)
## meanDesire boot sd lower upper
## ConditionNum 2.83 2.82 0.95 1.02 4.76
psychMediation
##
## Mediation/Moderation Analysis
## Call: psych::mediate(y = meanDesire ~ ConditionNum + (responsibility),
## data = GenderData)
##
## The DV (Y) was meanDesire . The IV (X) was ConditionNum . The mediating variable(s) = responsibility .
##
## Total effect(c) of ConditionNum on meanDesire = 5.88 S.E. = 2.07 t = 2.84 df= 556 with p = 0.0047
## Direct effect (c') of ConditionNum on meanDesire removing responsibility = 3.05 S.E. = 1.88 t = 1.63 df= 555 with p = 0.1
## Indirect effect (ab) of ConditionNum on meanDesire through responsibility = 2.83
## Mean bootstrapped indirect effect = 2.82 with standard error = 0.95 Lower CI = 1.02 Upper CI = 4.76
## R = 0.46 R2 = 0.21 F = 72.96 on 2 and 555 DF p-value: 8.65e-40
##
## To see the longer output, specify short = FALSE in the print statement or ask for the summary
summary( lm( meanDesire ~ ConditionNum , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -69.024 -13.615 4.293 19.361 36.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 57.255 3.256 17.583 < 2e-16 ***
## ConditionNum 5.884 2.073 2.839 0.00469 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.48 on 556 degrees of freedom
## Multiple R-squared: 0.01429, Adjusted R-squared: 0.01251
## F-statistic: 8.059 on 1 and 556 DF, p-value: 0.004694
summary( lm( meanDesire ~ ConditionNum + responsibility , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum + responsibility, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -70.065 -12.239 1.887 15.144 54.429
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.26120 3.04453 22.092 <2e-16 ***
## ConditionNum 3.05368 1.87525 1.628 0.104
## responsibility 0.24744 0.02123 11.658 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.96 on 555 degrees of freedom
## Multiple R-squared: 0.2082, Adjusted R-squared: 0.2053
## F-statistic: 72.96 on 2 and 555 DF, p-value: < 2.2e-16
With Gender included:
summary( lm( meanDesire ~ ConditionNum * Gender , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum * Gender, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -72.72 -13.85 4.52 18.53 44.07
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 33.390 10.953 3.048 0.00241 **
## ConditionNum 10.731 6.924 1.550 0.12175
## Gender 14.682 6.527 2.250 0.02486 *
## ConditionNum:Gender -2.874 4.142 -0.694 0.48805
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.97 on 554 degrees of freedom
## Multiple R-squared: 0.05789, Adjusted R-squared: 0.05279
## F-statistic: 11.35 on 3 and 554 DF, p-value: 3.115e-07
summary( lm( meanDesire ~ ConditionNum * Gender + responsibility , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum * Gender + responsibility,
## data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -65.699 -12.996 1.575 15.224 58.709
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 52.02534 10.03496 5.184 3.04e-07 ***
## ConditionNum 4.67641 6.27922 0.745 0.457
## Gender 9.07736 5.91785 1.534 0.126
## responsibility 0.23669 0.02111 11.210 < 2e-16 ***
## ConditionNum:Gender -0.81829 3.74682 -0.218 0.827
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.66 on 553 degrees of freedom
## Multiple R-squared: 0.2323, Adjusted R-squared: 0.2268
## F-statistic: 41.84 on 4 and 553 DF, p-value: < 2.2e-16
Perceived responsibility is mediating the effect of the condition on the desire-to-post.
# Direct effect
mediationDirect = lm(meanDesire ~ ConditionNum + ease, data=GenderData)
# mediator
mediatorResp = lm(ease ~ ConditionNum, data=GenderData)
# mediation
mediation = mediation::mediate( model.m = mediatorResp,
model.y = mediationDirect,
treat = "ConditionNum",
mediator = "ease")
summary(mediation)
##
## Causal Mediation Analysis
##
## Quasi-Bayesian Confidence Intervals
##
## Estimate 95% CI Lower 95% CI Upper p-value
## ACME 3.833 1.626 6.09 0.002 **
## ADE 2.188 -1.261 5.59 0.202
## Total Effect 6.021 2.105 10.03 0.004 **
## Prop. Mediated 0.639 0.314 1.46 0.006 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Sample Size Used: 558
##
##
## Simulations: 1000
psychMediation = psych::mediate(meanDesire ~ ConditionNum + (ease), data=GenderData)
summary(psychMediation)
## Call: psych::mediate(y = meanDesire ~ ConditionNum + (ease), data = GenderData)
##
## Direct effect estimates (traditional regression) (c') X + M on Y
## meanDesire se t df Prob
## Intercept 60.85 2.74 22.24 555 7.51e-79
## ConditionNum 2.09 1.75 1.19 555 2.33e-01
## ease 0.26 0.02 15.44 555 5.13e-45
##
## R = 0.56 R2 = 0.31 F = 124.99 on 2 and 555 DF p-value: 1.54e-45
##
## Total effect estimates (c) (X on Y)
## meanDesire se t df Prob
## Intercept 57.26 3.26 17.58 556 2.33e-55
## ConditionNum 5.88 2.07 2.84 556 4.69e-03
##
## 'a' effect estimates (X on M)
## ease se t df Prob
## Intercept -13.96 6.93 -2.02 556 0.044400
## ConditionNum 14.71 4.41 3.34 556 0.000903
##
## 'b' effect estimates (M on Y controlling for X)
## meanDesire se t df Prob
## ease 0.26 0.02 15.44 555 5.13e-45
##
## 'ab' effect estimates (through all mediators)
## meanDesire boot sd lower upper
## ConditionNum 3.79 3.81 1.15 1.61 6.11
psychMediation
##
## Mediation/Moderation Analysis
## Call: psych::mediate(y = meanDesire ~ ConditionNum + (ease), data = GenderData)
##
## The DV (Y) was meanDesire . The IV (X) was ConditionNum . The mediating variable(s) = ease .
##
## Total effect(c) of ConditionNum on meanDesire = 5.88 S.E. = 2.07 t = 2.84 df= 556 with p = 0.0047
## Direct effect (c') of ConditionNum on meanDesire removing ease = 2.09 S.E. = 1.75 t = 1.19 df= 555 with p = 0.23
## Indirect effect (ab) of ConditionNum on meanDesire through ease = 3.79
## Mean bootstrapped indirect effect = 3.81 with standard error = 1.15 Lower CI = 1.61 Upper CI = 6.11
## R = 0.56 R2 = 0.31 F = 124.99 on 2 and 555 DF p-value: 7.43e-62
##
## To see the longer output, specify short = FALSE in the print statement or ask for the summary
summary( lm( meanDesire ~ ConditionNum , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -69.024 -13.615 4.293 19.361 36.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 57.255 3.256 17.583 < 2e-16 ***
## ConditionNum 5.884 2.073 2.839 0.00469 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.48 on 556 degrees of freedom
## Multiple R-squared: 0.01429, Adjusted R-squared: 0.01251
## F-statistic: 8.059 on 1 and 556 DF, p-value: 0.004694
summary( lm( meanDesire ~ ConditionNum + ease , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum + ease, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -81.146 -10.039 3.721 12.020 54.562
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 60.85249 2.73566 22.244 <2e-16 ***
## ConditionNum 2.09209 1.75242 1.194 0.233
## ease 0.25775 0.01669 15.443 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 20.49 on 555 degrees of freedom
## Multiple R-squared: 0.3105, Adjusted R-squared: 0.3081
## F-statistic: 125 on 2 and 555 DF, p-value: < 2.2e-16
With Gender included:
summary( lm( meanDesire ~ ConditionNum * Gender , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum * Gender, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -72.72 -13.85 4.52 18.53 44.07
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 33.390 10.953 3.048 0.00241 **
## ConditionNum 10.731 6.924 1.550 0.12175
## Gender 14.682 6.527 2.250 0.02486 *
## ConditionNum:Gender -2.874 4.142 -0.694 0.48805
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.97 on 554 degrees of freedom
## Multiple R-squared: 0.05789, Adjusted R-squared: 0.05279
## F-statistic: 11.35 on 3 and 554 DF, p-value: 3.115e-07
summary( lm( meanDesire ~ ConditionNum * Gender + ease , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum * Gender + ease, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -83.780 -11.039 3.157 12.805 50.746
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.72069 9.25357 4.941 1.03e-06 ***
## ConditionNum 3.99565 5.84389 0.684 0.4944
## Gender 9.22123 5.50414 1.675 0.0944 .
## ease 0.25027 0.01653 15.142 < 2e-16 ***
## ConditionNum:Gender -1.00411 3.48788 -0.288 0.7735
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 20.17 on 553 degrees of freedom
## Multiple R-squared: 0.334, Adjusted R-squared: 0.3292
## F-statistic: 69.34 on 4 and 553 DF, p-value: < 2.2e-16
Perceived ease is mediating the effect of the condition on the desire-to-post.
# Direct effect
mediationDirect = lm(meanDesire ~ ConditionNum + fakeReal, data=GenderData)
# mediator
mediatorResp = lm(fakeReal ~ ConditionNum, data=GenderData)
# mediation
mediation = mediation::mediate( model.m = mediatorResp,
model.y = mediationDirect,
treat = "ConditionNum",
mediator = "fakeReal")
summary(mediation)
##
## Causal Mediation Analysis
##
## Quasi-Bayesian Confidence Intervals
##
## Estimate 95% CI Lower 95% CI Upper p-value
## ACME 0.6965 -0.3388 1.84 0.180
## ADE 5.2259 1.4031 9.44 0.016 *
## Total Effect 5.9224 2.0838 10.17 0.008 **
## Prop. Mediated 0.1126 -0.0886 0.41 0.184
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Sample Size Used: 558
##
##
## Simulations: 1000
psychMediation = psych::mediate(meanDesire ~ ConditionNum + (fakeReal), data=GenderData)
summary(psychMediation)
## Call: psych::mediate(y = meanDesire ~ ConditionNum + (fakeReal), data = GenderData)
##
## Direct effect estimates (traditional regression) (c') X + M on Y
## meanDesire se t df Prob
## Intercept 53.53 3.20 16.72 555 4.17e-51
## ConditionNum 5.15 2.01 2.56 555 1.06e-02
## fakeReal 0.15 0.02 6.32 555 5.35e-10
##
## R = 0.28 R2 = 0.08 F = 24.29 on 2 and 555 DF p-value: 7.73e-11
##
## Total effect estimates (c) (X on Y)
## meanDesire se t df Prob
## Intercept 57.26 3.26 17.58 556 2.33e-55
## ConditionNum 5.88 2.07 2.84 556 4.69e-03
##
## 'a' effect estimates (X on M)
## fakeReal se t df Prob
## Intercept 24.67 5.59 4.41 556 1.23e-05
## ConditionNum 4.89 3.56 1.37 556 1.70e-01
##
## 'b' effect estimates (M on Y controlling for X)
## meanDesire se t df Prob
## fakeReal 0.15 0.02 6.32 555 5.35e-10
##
## 'ab' effect estimates (through all mediators)
## meanDesire boot sd lower upper
## ConditionNum 0.74 0.74 0.56 -0.29 1.91
psychMediation
##
## Mediation/Moderation Analysis
## Call: psych::mediate(y = meanDesire ~ ConditionNum + (fakeReal), data = GenderData)
##
## The DV (Y) was meanDesire . The IV (X) was ConditionNum . The mediating variable(s) = fakeReal .
##
## Total effect(c) of ConditionNum on meanDesire = 5.88 S.E. = 2.07 t = 2.84 df= 556 with p = 0.0047
## Direct effect (c') of ConditionNum on meanDesire removing fakeReal = 5.15 S.E. = 2.01 t = 2.56 df= 555 with p = 0.011
## Indirect effect (ab) of ConditionNum on meanDesire through fakeReal = 0.74
## Mean bootstrapped indirect effect = 0.74 with standard error = 0.56 Lower CI = -0.29 Upper CI = 1.91
## R = 0.28 R2 = 0.08 F = 24.29 on 2 and 555 DF p-value: 8.83e-15
##
## To see the longer output, specify short = FALSE in the print statement or ask for the summary
summary( lm( meanDesire ~ ConditionNum , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -69.024 -13.615 4.293 19.361 36.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 57.255 3.256 17.583 < 2e-16 ***
## ConditionNum 5.884 2.073 2.839 0.00469 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.48 on 556 degrees of freedom
## Multiple R-squared: 0.01429, Adjusted R-squared: 0.01251
## F-statistic: 8.059 on 1 and 556 DF, p-value: 0.004694
summary( lm( meanDesire ~ ConditionNum + fakeReal , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum + fakeReal, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -74.766 -13.502 4.122 18.042 42.058
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 53.53283 3.20240 16.716 < 2e-16 ***
## ConditionNum 5.14692 2.00720 2.564 0.0106 *
## fakeReal 0.15089 0.02387 6.321 5.35e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.66 on 555 degrees of freedom
## Multiple R-squared: 0.08048, Adjusted R-squared: 0.07717
## F-statistic: 24.29 on 2 and 555 DF, p-value: 7.726e-11
With Gender included:
summary( lm( meanDesire ~ ConditionNum * Gender , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum * Gender, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -72.72 -13.85 4.52 18.53 44.07
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 33.390 10.953 3.048 0.00241 **
## ConditionNum 10.731 6.924 1.550 0.12175
## Gender 14.682 6.527 2.250 0.02486 *
## ConditionNum:Gender -2.874 4.142 -0.694 0.48805
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.97 on 554 degrees of freedom
## Multiple R-squared: 0.05789, Adjusted R-squared: 0.05279
## F-statistic: 11.35 on 3 and 554 DF, p-value: 3.115e-07
summary( lm( meanDesire ~ ConditionNum * Gender + fakeReal , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum * Gender + fakeReal, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -77.517 -14.147 4.244 17.882 45.701
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 31.50517 10.63399 2.963 0.00318 **
## ConditionNum 10.29336 6.71968 1.532 0.12614
## Gender 13.72565 6.33545 2.166 0.03070 *
## fakeReal 0.14017 0.02359 5.942 4.99e-09 ***
## ConditionNum:Gender -3.04714 4.01960 -0.758 0.44873
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.26 on 553 degrees of freedom
## Multiple R-squared: 0.1144, Adjusted R-squared: 0.108
## F-statistic: 17.86 on 4 and 553 DF, p-value: 8.335e-14
Perceived genuineness is partially mediating the effect of the condition on the desire-to-post.
summary( lm( meanDesire ~ ConditionNum + responsibility + ease + fakeReal , data=GenderData) )
##
## Call:
## lm(formula = meanDesire ~ ConditionNum + responsibility + ease +
## fakeReal, data = GenderData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -71.439 -10.888 2.275 12.699 51.296
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 65.06494 2.73552 23.785 < 2e-16 ***
## ConditionNum 0.83827 1.65204 0.507 0.61207
## responsibility 0.15977 0.01978 8.076 4.2e-15 ***
## ease 0.19944 0.01717 11.616 < 2e-16 ***
## fakeReal 0.05814 0.02024 2.873 0.00422 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 19.24 on 553 degrees of freedom
## Multiple R-squared: 0.3942, Adjusted R-squared: 0.3898
## F-statistic: 89.96 on 4 and 553 DF, p-value: < 2.2e-16
Perceived responsibility and perceived ease are mediating the effect of the click-stop.
date()
## [1] "Mon Mar 20 15:41:22 2023"
sessionInfo()
## R version 4.2.1 (2022-06-23)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur ... 10.16
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] mediation_4.5.0 sandwich_3.0-2 mvtnorm_1.1-3 Matrix_1.5-1
## [5] MASS_7.3-57 Superpower_0.2.0 ggpubr_0.4.0 ggplot2_3.3.6
## [9] psych_2.2.5 plyr_1.8.7
##
## loaded via a namespace (and not attached):
## [1] nlme_3.1-157 RColorBrewer_1.1-3 numDeriv_2016.8-1.1
## [4] tools_4.2.1 backports_1.4.1 bslib_0.4.0
## [7] utf8_1.2.2 R6_2.5.1 rpart_4.1.16
## [10] afex_1.1-1 Hmisc_4.7-1 DBI_1.1.3
## [13] colorspace_2.0-3 nnet_7.3-17 withr_2.5.0
## [16] tidyselect_1.1.2 gridExtra_2.3 mnormt_2.1.0
## [19] emmeans_1.8.1-1 compiler_4.2.1 cli_3.4.1
## [22] htmlTable_2.4.1 labeling_0.4.2 sass_0.4.2
## [25] checkmate_2.1.0 scales_1.2.1 stringr_1.4.1
## [28] digest_0.6.29 foreign_0.8-82 minqa_1.2.4
## [31] rmarkdown_2.16 base64enc_0.1-3 jpeg_0.1-9
## [34] pkgconfig_2.0.3 htmltools_0.5.3 lme4_1.1-30
## [37] fastmap_1.1.0 highr_0.9 htmlwidgets_1.5.4
## [40] rlang_1.0.6 rstudioapi_0.14 jquerylib_0.1.4
## [43] farver_2.1.1 generics_0.1.3 zoo_1.8-11
## [46] jsonlite_1.8.0 dplyr_1.0.10 car_3.1-0
## [49] magrittr_2.0.3 Formula_1.2-4 interp_1.1-3
## [52] Rcpp_1.0.9 munsell_0.5.0 fansi_1.0.3
## [55] abind_1.4-5 lifecycle_1.0.2 stringi_1.7.8
## [58] yaml_2.3.5 carData_3.0-5 grid_4.2.1
## [61] parallel_4.2.1 deldir_1.0-6 lattice_0.20-45
## [64] splines_4.2.1 knitr_1.40 pillar_1.8.1
## [67] boot_1.3-28 estimability_1.4.1 ggsignif_0.6.3
## [70] lpSolve_5.6.17 reshape2_1.4.4 glue_1.6.2
## [73] evaluate_0.16 latticeExtra_0.6-30 data.table_1.14.2
## [76] vctrs_0.4.1 png_0.1-7 nloptr_2.0.3
## [79] gtable_0.3.1 purrr_0.3.4 tidyr_1.2.1
## [82] assertthat_0.2.1 cachem_1.0.6 xfun_0.33
## [85] xtable_1.8-4 broom_1.0.1 coda_0.19-4
## [88] rstatix_0.7.0 survival_3.3-1 tibble_3.1.8
## [91] lmerTest_3.1-3 cluster_2.1.3 ellipsis_0.3.2