FictionEro2 - Affective Impact of Fiction

Data Preparation

Code
library(tidyverse)
library(easystats)
library(patchwork)
library(ggside)
library(glmmTMB)

options(mc.cores = parallel::detectCores(),
        brms.backend = "cmdstanr",
        width = 300)
Code
dfsub <- read.csv("../data/data_participants.csv")

df <- read.csv("../data/data.csv") |> 
  right_join(
    select(dfsub, Participant, Mobile, starts_with(c("Feedback_","BAIT")), COPS_Frequency, SexualActivity,- Feedback_Text),
    by = "Participant"
    ) |> 
    datawizard::rescale(select= c("Arousal", "Enticing", "Valence"), range=c(0, 6), to=c(0,1)) |> 
  datawizard::rescale(select= c("Realness"), range=c(-3,3), to=c(0,1)) |>
  mutate(Condition = case_when(
    Condition == "Fiction" ~ "AI-Generated",
    Condition == "Reality" ~ "Photograph"
  )) |>
  mutate(Condition = fct_relevel(Condition, "Photograph", "AI-Generated"),
         Gender =  fct_relevel(Gender, "Male", "Female"),
         SexualOrientation = fct_relevel(SexualOrientation, "Heterosexual", "Homosexual", "Bisexual"),
         PornFrequency = as.numeric(as.factor(COPS_Frequency)),
         SexualActivity_num = as.numeric(as.factor(SexualActivity)),
         ConditionBelief = case_when(
           Condition == "Photograph" & Realness > 0.5 ~ "True",
           Condition == "AI-Generated" & Realness < 0.5 ~ "True",
           .default = "False",
         )) |>
  rename(AllRealConfidence = "Feedback_AllRealConfidence",
         AllFakeConfidence = "Feedback_AllFakeConfidence",
         Enjoyment = "Feedback_Enjoyment"
         )|>
  mutate(across(starts_with("Feedback_"), as.factor)) |>
  mutate(ConditionBelief = as.factor(ConditionBelief)) |>
  mutate(StimuliType = case_when(
    grepl("couple", Stimulus, ignore.case = TRUE) ~ "Couple",
    TRUE ~ "Individual")) |>
  mutate(StimuliType = fct_relevel(StimuliType, "Individual", "Couple"))

results_table <- function(model, effects="fixed", filter=NULL) {
  if("marginaleffects" %in% class(model)) {
    model |> 
      parameters::parameters() |> 
      as.data.frame() |> 
      select(-Parameter, -SE, -S, z=Statistic) |> 
      insight::format_table() |> 
      parameters::display()
  } else {
    display(parameters::parameters(model, effects=effects, keep=filter))
  }
}
Code
df$BAIT_Videos <- (df$BAIT_VideosRealistic + (1 - df$BAIT_VideosIssues)) / 2

df$BAIT_Visual = (df$BAIT_ImagesRealistic + (1 - df$BAIT_ImagesIssues) + df$BAIT_ImitatingReality + df$BAIT_EnvironmentReal) / 4

df$BAIT_Text = (df$BAIT_TextRealistic + (1 - df$BAIT_TextIssues)) / 2

df$BAIT_Negative <- (df$BAIT_Worry + df$BAIT_Dangerous)/2

df$BAIT_Positive <- (df$BAIT_Exciting + df$BAIT_Benefit)/2

Visualisation of Key Variables

This section is about selecting the best model. Notably, all the stimuli presented are of an erotic nature. Note that variables were rescaled to [0,1] when fitting the models and that the stimuli presented to participants was assigned according to their self-rated sexuality, making all stimuli relevant to participants.

To summarise, women rate stimuli on average significantly lower in arousal, enticiment and valence than men. There was no difference between heterosexual, homosexual, and bisexual individuals within each gender on subjective ratings.

In general, males exhibited greater variability in their arousal ratings, while females tended to provide more lower arousal ratings.

The pattern of arousal ratings for images that participants believed to be either AI-generated or photos (i.e., initially labeled as photos and later rated as photos, or initially labeled as AI and later rated as AI), as well as for images where participants disagreed with the original labels, was generally similar within genders. However, between genders, women tended to provide more low arousal ratings than men.

Code
arousal <- df |> 
  ggplot(aes(x=Arousal, fill = Gender)) +
  geom_bar() +
  scale_y_sqrt(expand = c(0, 0)) +
  scale_x_continuous(
    breaks = c(0, 1),
    labels = c("Not at all","Very much")) +
  labs(title = "Arousal", ) +
  facet_wrap(Gender~SexualOrientation) +
   scale_fill_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))

arousal

Code
df |> 
  mutate(ConditionBelief = as.factor(ConditionBelief)) |> 
  mutate(ConditionBelief = case_when(
    ConditionBelief == "False" ~ "Not Believed",
    ConditionBelief == "True" ~ "Believed",)) |>
  ggplot(aes(x=Arousal, fill=Gender)) +
  geom_bar(position = "identity") +
   scale_x_continuous(
    breaks = c(0, 1),
    labels = c("Not at all","Very much")) +
  facet_grid(Gender~ConditionBelief, scales="free_y") +
  scale_color_manual(values=c("red", "white"), guide="none") +
  scale_fill_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +
  # scale_y_sqrt(expand = c(0, 0)) +
  labs(title = "Arousal Ratings for Images Based on Belief in Original Labels") +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))

Code
# Get a sense of Random Factors
m1 <- glmmTMB::glmmTMB(Arousal ~ Gender + (1|Participant), data=df)
m2 <- glmmTMB::glmmTMB(Arousal ~ Gender + (1|Participant) + (1|Stimulus ), data=df)
m3 <- glmmTMB::glmmTMB(Arousal ~ Gender + (1|Participant) + (1+Gender|Stimulus ), data=df)
m4 <- glmmTMB::glmmTMB(Arousal ~ Gender/SexualOrientation + (1|Participant), data=df)
m5 <- glmmTMB::glmmTMB(Arousal ~ Gender/SexualOrientation + (1|Participant) + (1|Stimulus ), data=df)
m6 <- glmmTMB::glmmTMB(Arousal ~ Gender/SexualOrientation + (1|Participant) + (1+Gender|Stimulus ), data=df)


test_bf(m1,m2, m3, m4, m5,m6)
compare_performance(m1, m2, m3, m4, m5, m6)

# Model m3, which includes random intercepts for Participants and both random intercepts and slopes for Gender at the Stimulus level, seems to be the best

This model evaluate ths the effects of Gender and Sexual Orientation on Arousal, accounting for random variability due to participants (i.e., random effects). The analysis revealed that on average women rate erotic stimuli significantly lower in arousal than men. There was no difference between heterosexual, homosexual, and bisexual individuals within each gender on arousal ratings.

Code
m_a <- glmmTMB::glmmTMB(Arousal ~ Gender/ SexualOrientation + (1|Participant),
                      data=df, family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))
                      # control = glmmTMB::glmmTMBControl(optimizer=stats::optim, # nlminb, optim
                      #                                   optArgs = list(method = "BFGS"),  #Nelder-Mead, BFGS, CG
                      #                                   parallel = 8))

results_table(m_a)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.08 0.07 (-0.07, 0.22) 1.05 0.295
Gender (Female) -0.57 0.11 (-0.78, -0.36) -5.34 < .001
Gender (Male) × SexualOrientationHomosexual -0.08 0.29 (-0.65, 0.49) -0.27 0.787
Gender (Female) × SexualOrientationHomosexual 0.16 0.49 (-0.81, 1.13) 0.32 0.746
Gender (Male) × SexualOrientationBisexual -0.04 0.27 (-0.57, 0.49) -0.16 0.872
Gender (Female) × SexualOrientationBisexual 0.27 0.21 (-0.15, 0.69) 1.24 0.215
Code
estimate_relation(m_a) |> 
  ggplot(aes(x=Gender, y=Predicted)) +
  geom_pointrange(aes(ymin=CI_low, ymax=CI_high, color = Gender), position=position_dodge(width=0.5)) +
 scale_color_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +  labs(y="Arousal") +
  facet_wrap(~SexualOrientation) +
  theme_abyss()

In general, males tended to rate images higher in enticement more often than females.

Enticing ratings for images where participants believed in the original labels, as well as for those where they disagreed with the labels, were similar for within genders, with males providing higher ratings of enticement.

For females, although a similar pattern was observed, they tended to provide more lower enticement ratings, particularly for images where they disagreed with the original labels.

Code
enticiment <- df |> 
  ggplot(aes(x=Enticing, fill = Gender)) +
  geom_bar() +
  scale_y_sqrt(expand = c(0, 0)) +
  scale_x_continuous(
    breaks = c(0, 1),
    labels = c("Not at all","Very much")) +
  labs(title = "Enticement", ) +
  facet_wrap(Gender~SexualOrientation) +
  scale_fill_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))

enticiment

Code
df |> 
  mutate(ConditionBelief = as.factor(ConditionBelief)) |> 
  mutate(ConditionBelief = case_when(
    ConditionBelief == "False" ~ "Not Believed",
    ConditionBelief == "True" ~ "Believed",)) |>
  ggplot(aes(x=Enticing, fill=Gender)) +
  geom_bar(position = "identity", binwidth = 0.5) +
  scale_x_continuous(
    breaks = c(0, 1),
    labels = c("Not at all","Very much")) +
  facet_grid(Gender~ConditionBelief, scales="free_y") +
  scale_fill_manual(values=c("Female"="#E91E63", "Male"="#FF9800"), guide="none") +
  # scale_y_sqrt(expand = c(0, 0)) +
  labs(title = "Enticement Ratings for Images Based on Belief in Original Labels") +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))
Warning in geom_bar(position = "identity", binwidth = 0.5): Ignoring unknown parameters: `binwidth`

This model evaluate ths the effects of Gender on Enticement, accounting for random variability due to participants (i.e., random effects). The analysis revealed that on average women rate erotic stimuli significantly lower in enticiment than men. There was no difference between heterosexual, homosexual, and bisexual individuals within each gender on enticement ratings.

Code
m_e <- glmmTMB::glmmTMB(Enticing ~ Gender/SexualOrientation + (1|Participant),
                      data=df,family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))
                      # control = glmmTMB::glmmTMBControl(optimizer=stats::optim, # nlminb, optim
                      #                                   optArgs = list(method = "BFGS"),  #Nelder-Mead, BFGS, CG
                      #                                   parallel = 8))

results_table(m_e)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.26 0.06 (0.14, 0.38) 4.23 < .001
Gender (Female) -0.42 0.09 (-0.59, -0.25) -4.73 < .001
Gender (Male) × SexualOrientationHomosexual 0.06 0.24 (-0.42, 0.54) 0.25 0.801
Gender (Female) × SexualOrientationHomosexual 0.08 0.41 (-0.72, 0.89) 0.20 0.842
Gender (Male) × SexualOrientationBisexual 0.12 0.23 (-0.33, 0.56) 0.51 0.609
Gender (Female) × SexualOrientationBisexual 0.14 0.18 (-0.21, 0.49) 0.78 0.437
Code
estimate_relation(m_e) |> 
  ggplot(aes(x=Gender, y=Predicted)) +
  geom_pointrange(aes(ymin=CI_low, ymax=CI_high, color = Gender), position=position_dodge(width=0.5)) +
 scale_color_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") + 
  facet_wrap(~SexualOrientation) +
  labs(y="Enticement") +
  theme_abyss()

In general, males tended to assign higher valence ratings to images more frequently. Females, on the other hand, showed higher frequencies of ratings in the middle and lower ranges of the valence scale.

The pattern of valence ratings for images, whether believed or not believed, was similar within genders, with ratings for believed images closely resembling those for non-believed images.

Code
valence <- df |> 
  ggplot(aes(x=Valence, fill = Gender)) +
  geom_bar() +
  scale_y_sqrt(expand = c(0, 0)) +
  scale_x_continuous(
    breaks = c(0, 1),
    labels = c("Unplesant","Pleasant")) +
  scale_fill_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +
  labs(title = "Valence", ) +
    facet_wrap(Gender~SexualOrientation) +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))

valence

Code
df |> 
  mutate(ConditionBelief = as.factor(ConditionBelief)) |> 
  mutate(ConditionBelief = case_when(
    ConditionBelief == "False" ~ "Not Believed",
    ConditionBelief == "True" ~ "Believed",)) |>
  ggplot(aes(x=Valence, fill=Gender)) +
  geom_bar(position = "identity", binwidth = 0.5) +
  scale_x_continuous(
    breaks = c(0, 1),
    labels = c("Unplesant","Pleasant")) +
  facet_grid(Gender~ConditionBelief, scales="free_y") +
  scale_fill_manual(values=c("Female"="#E91E63", "Male"="#FF9800"), guide="none") +
  # scale_y_sqrt(expand = c(0, 0)) +
  labs(title = "Valence to Ratings for Images Based on Belief in Original Labels") +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))
Warning in geom_bar(position = "identity", binwidth = 0.5): Ignoring unknown parameters: `binwidth`

This model evaluate ths the effects of Gender on valence, accounting for random variability due to participants. The analysis revealed that on average women rate erotic stimuli significantly lower in valence than men. There was no difference between heterosexual, homosexual, and bisexual individuals within each gender on arousal ratings.

Code
m_v <- glmmTMB::glmmTMB(Valence ~ Gender/SexualOrientation+ (1|Participant), family=glmmTMB::ordbeta(),
                      data=df,
                      control = glmmTMB::glmmTMBControl(parallel = 8))
                      # control = glmmTMB::glmmTMBControl(optimizer=stats::optim, # nlminb, optim
                      #                                   optArgs = list(method = "BFGS"),  #Nelder-Mead, BFGS, CG
                      #                                   parallel = 8))

results_table(m_v)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.38 0.06 (0.27, 0.49) 6.84 < .001
Gender (Female) -0.33 0.08 (-0.49, -0.17) -4.07 < .001
Gender (Male) × SexualOrientationHomosexual -0.08 0.22 (-0.51, 0.35) -0.37 0.711
Gender (Female) × SexualOrientationHomosexual 0.29 0.37 (-0.44, 1.02) 0.77 0.441
Gender (Male) × SexualOrientationBisexual 0.22 0.21 (-0.19, 0.62) 1.06 0.290
Gender (Female) × SexualOrientationBisexual 0.20 0.16 (-0.12, 0.52) 1.25 0.210
Code
estimate_relation(m_v) |> 
  ggplot(aes(x=Gender, y=Predicted)) +
  geom_pointrange(aes(ymin=CI_low, ymax=CI_high, color = Gender), position=position_dodge(width=0.5)) +
 scale_color_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +  labs(y="Valence") +
  facet_wrap(~SexualOrientation) +
  theme_abyss()

Code
df <- df |>
  filter(SexualOrientation == "Heterosexual")

Due to the low number of participants self-described as Bisexual (N= 19) and Homosexual (N= 8) the main analysis will focus solely on Heterosexual individuals.

Exploratory analysis will then evaluate the effect of sexual orientation on ratings.

Arousal

Similar to study1 arousal ratings for some “AI-generated” are lower then when they are presented as real photos.

Code
plot_descriptive <- function(df, target="Arousal") {
  # By item
  order <- df |>
    mutate(.Item_Order = paste0(Gender, "_", Stimulus)) |>
    summarize(mean = mean(.data[[target]], na.rm=TRUE), .by=c("Condition", ".Item_Order")) |> 
    arrange(.Item_Order, desc(Condition)) |> 
    mutate(diff = sign(mean - lag(mean)),
           Relevance = str_extract(.Item_Order, "^[^_]+"),
           .Item_Order = str_extract(.Item_Order, "(?<=_).+")) |>
    filter(Condition == "Photograph") |> 
    arrange(diff, mean)
    
  p1 <- df |>
    mutate(.Item_Order = paste0(Gender, "_", Stimulus)) |>
    group_by(.Item_Order, Condition) |>
    ggdist::mean_qi(.data[[target]], .width=0.95) |>
    mutate(Gender = fct_rev(str_extract(.Item_Order, "^[^_]+"))) |>
    left_join(order[c(".Item_Order", "diff")], by=".Item_Order") |>
mutate(.Item_Order = fct_relevel(.Item_Order, intersect(order$.Item_Order, unique(.Item_Order)))) |>
    # mutate(.average = mean(.data[[target]]), .by="Item") |>
    # mutate(Item = fct_reorder(Item, .average)) |>
    ggplot(aes(y = .Item_Order, x=.data[[target]])) +
    geom_line(aes(color=as.factor(diff)), linewidth=1) +
    geom_point(aes(color=Condition), size=2) +
      
    # ggdist::stat_slabinterval(aes(fill=Condition, color=Condition),
    #                           .width=0.95, normalize="xy", slab_alpha=0.5) +
    # ggdist::stat_histinterval(aes(fill=Condition, color=Condition),
    #                           .width=0.95, normalize="xy", slab_alpha=0.5) +
    scale_color_manual(values=c("AI-Generated"="#2196F3", "Photograph"="#F44336", "1"="#F44336", "-1"="#2196F3"),
                       breaks = c('AI-Generated', 'Photograph')) +
    # scale_fill_manual(values=c("AI-Generated"="#2196F3", "Photograph"="#F44336")) +
    scale_y_discrete(labels = function(x) str_extract(x, "(?<=_).+")) +
    theme_minimal() +
    theme(panel.grid.minor.x = element_blank(),
          # panel.grid.major.x = element_blank(),
          panel.border = element_blank(),
          axis.line.x = element_blank()) +
    labs(title = paste0(target, " by Item"), color="Condition", y="Items") +
    facet_wrap(~Gender, scales="free_y")

  # By participant
  p2 <- df |>
    summarize(.average = mean(.data[[target]]),
              .by=c("Gender", "Participant", "Condition")) |>
    pivot_wider(names_from = Condition, values_from = .average) |>
    mutate(.diff = Photograph - `AI-Generated`) |>
    mutate(Participant = fct_reorder(Participant, .diff)) |>
    ggplot(aes(x = .diff, y=Participant)) +
    geom_bar(aes(fill=.diff), stat = "identity")  +
    scale_fill_gradient2(guide="none", low="red", high="red", mid="blue") +
    labs(title = paste0(target, " by Participant")) +
    facet_wrap(~Gender, ncol=2, scales="free_y") +
    theme_minimal() +
    theme(panel.grid.major.y = element_blank(),
          panel.border = element_blank(),
          axis.line.x = element_blank(),
          axis.text.y = element_blank()) +
    labs(title = paste0(target, " by Participant"), x="Difference (Photograph - AI-Generated)", y="Participants")

  p1 / p2 + plot_layout(heights = c(2, 1))
}

# remove other 
arousal_desc <- df |> 
  filter(Gender != "Other") |> 
  plot_descriptive("Arousal")

arousal_desc

Whole Sample

This model examines the effect of Gender Sexual Orientation, stimuli type, and Condition on Arousal, accounting for random variability due to participants and items (i.e., random intercepts) and condition as random slope for participants.

Women rate photograph of individuals lower than males. Men show less arousal toward couple images (vs individual ones), regardless of condition. Women show greater arousal toward couple images than individual ones. Men show less arousal for AI-generated individual images compared to photographic individual images.

Looking at average slopes:

  1. Males rate AI-generated images ~0.014 lower in arousal (on average) than photos — significant.
  2. Females also rate AI images lower, but not significantly.
  3. Males rate couple images significantly lower in arousal than individual ones.
  4. Females rate couple images significantly higher in arousal than individual ones.
Code
m_arousal <- glmmTMB::glmmTMB(Arousal ~ Gender/ StimuliType/ Condition + 
                                (Condition| Participant) + (1|Stimulus), family=glmmTMB::ordbeta(),
                              data=df, control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m_arousal)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.26 0.12 (0.03, 0.50) 2.17 0.030
Gender (Female) -1.17 0.17 (-1.52, -0.83) -6.72 < .001
Gender (Male) × StimuliTypeCouple -0.39 0.13 (-0.64, -0.14) -3.02 0.003
Gender (Female) × StimuliTypeCouple 0.60 0.13 (0.34, 0.85) 4.59 < .001
Gender (Male) × StimuliTypeIndividual × ConditionAI-Generated -0.08 0.04 (-0.15, -0.01) -2.34 0.019
Gender (Female) × StimuliTypeIndividual × ConditionAI-Generated 0.01 0.05 (-0.08, 0.10) 0.23 0.815
Gender (Male) × StimuliTypeCouple × ConditionAI-Generated -0.06 0.04 (-0.14, 9.21e-03) -1.72 0.086
Gender (Female) × StimuliTypeCouple × ConditionAI-Generated -0.05 0.04 (-0.13, 0.03) -1.12 0.261
Code
marginaleffects::avg_slopes(m_arousal, variables=c("Condition", "StimuliType"), by="Gender") |>
  results_table()
Comparison Gender Coefficient z p 95% CI
AI-Generated - Photograph Male -0.02 -2.71 0.007 [-0.03, 0.00]
AI-Generated - Photograph Female -2.19e-03 -0.34 0.735 [-0.01, 0.01]
Couple - Individual Male -0.08 -3.01 0.003 [-0.14, -0.03]
Couple - Individual Female 0.11 4.50 < .001 [ 0.06, 0.16]

Moderators

This model explores whether various factors such as attitudes towards AI, knowledge about AI, frequency of porn consumption, and sexual activity moderate the relationship between gender, image relevance (specifically AI-generated versus photographs), and arousal ratings.

The analysis revealed a significant interaction effect only for positive attitudes towards AI among females. Specifically, females with higher positive attitudes towards AI rated AI-generated images as more arousing, relative to when they viewed images labelled as photographs.

No other moderators showed statistically significant effects on arousal across the interactions of gender, condition (AI-generated vs Photograph), and the respective moderators.

We also examined whether feedback moderates the relationship between gender and condition on arousal. Findings suggest that feedback moderates this relationship only for men. Specifically, males who reported finding AI-generated images as less and more arousing had lower and higher, respectively, arousal ratings for those images.

Lastly, the interaction between sexual activity and condition on Arousal levels. The three-way interaction between gender, condition (AI-Generated), and sexual activity did not reach statistical significance for either males or females, suggesting that the relationship between the AI-Generated condition and arousal ratings does not significantly vary with sexual activity levels for either gender.

Code
test_moderator <- function(df, outcome="Arousal", moderator="BAIT_Visual") {
  f <- paste0(outcome, " ~ Gender / (Condition * ", moderator, ") + (Condition | Participant) + (1|Stimulus)")
  r <- glmmTMB::glmmTMB(as.formula(f),
                      data = df,
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8)) |>
    parameters::parameters() |> 
    as.data.frame() |> 
    select(-df_error, -Effects, -Group, -Component, -SE)
  r$Moderator <- moderator
  r$Outcome <- outcome
  insight::format_table(r[c(7, 8), ])
}


moderator_results <- data.frame()
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI", "BAIT_Positive", "BAIT_Negative", "PornFrequency", "SexualActivity_num")) {
  moderator_results <- rbind(moderator_results,
                             test_moderator(df, "Arousal", m))
}

display(moderator_results)
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × BAIT Visual 0.04 [-0.02, 0.10] 1.27 0.205 BAIT_Visual Arousal
Gender [Female] × ConditionAI-Generated × BAIT Visual 8.80e-03 [-0.06, 0.07] 0.26 0.792 BAIT_Visual Arousal
Gender [Male] × ConditionAI-Generated × BAIT Text -0.03 [-0.07, 0.02] -1.15 0.251 BAIT_Text Arousal
Gender [Female] × ConditionAI-Generated × BAIT Text -1.51e-03 [-0.05, 0.05] -0.06 0.955 BAIT_Text Arousal
Gender [Male] × ConditionAI-Generated × BAIT ExpertAI 0.02 [-0.01, 0.06] 1.29 0.198 BAIT_ExpertAI Arousal
Gender [Female] × ConditionAI-Generated × BAIT ExpertAI 0.03 [-0.01, 0.08] 1.56 0.119 BAIT_ExpertAI Arousal
Gender [Male] × ConditionAI-Generated × BAIT Positive 0.01 [-0.04, 0.06] 0.50 0.620 BAIT_Positive Arousal
Gender [Female] × ConditionAI-Generated × BAIT Positive 0.07 [ 0.02, 0.12] 2.69 0.007 BAIT_Positive Arousal
Gender [Male] × ConditionAI-Generated × BAIT Negative -0.02 [-0.05, 0.01] -1.07 0.285 BAIT_Negative Arousal
Gender [Female] × ConditionAI-Generated × BAIT Negative -0.02 [-0.06, 0.03] -0.77 0.439 BAIT_Negative Arousal
Gender [Male] × ConditionAI-Generated × PornFrequency 0.01 [-0.02, 0.05] 0.87 0.384 PornFrequency Arousal
Gender [Female] × ConditionAI-Generated × PornFrequency 0.01 [-0.03, 0.06] 0.56 0.577 PornFrequency Arousal
Gender [Male] × ConditionAI-Generated × SexualActivity num -8.01e-03 [-0.04, 0.03] -0.47 0.638 SexualActivity_num Arousal
Gender [Female] × ConditionAI-Generated × SexualActivity num -0.02 [-0.06, 0.02] -0.91 0.361 SexualActivity_num Arousal
Code
feedback_results <- data.frame()
for(m in c("Feedback_NoFacesAttractive", "Feedback_SomeFacesAttractive",
           "Feedback_AIMoreAttractive", "Feedback_AILessAttractive",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing", 
            
           "Feedback_DiffObvious", "Feedback_DiffNone",
           
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed",
           "Feedback_AllReal", "Feedback_AllFake",
           
           "AllRealConfidence","AllFakeConfidence" ,
           "Enjoyment")) {
  feedback_results <- rbind(feedback_results,
                            test_moderator(df, "Arousal", m))
}
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Code
display(feedback_results)
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue 0.09 [-0.18, 0.35] 0.66 0.511 Feedback_NoFacesAttractive Arousal
Gender [Female] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue -0.31 [-0.58, -0.03] -2.19 0.029 Feedback_NoFacesAttractive Arousal
Gender [Male] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue -0.05 [-0.15, 0.06] -0.81 0.416 Feedback_SomeFacesAttractive Arousal
Gender [Female] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue 0.07 [-0.06, 0.20] 1.10 0.272 Feedback_SomeFacesAttractive Arousal
Gender [Male] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.14 [ 0.01, 0.28] 2.12 0.034 Feedback_AIMoreAttractive Arousal
Gender [Female] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.06 [-0.09, 0.20] 0.76 0.448 Feedback_AIMoreAttractive Arousal
Gender [Male] × ConditionAI-Generated × Feedback AILessAttractiveTrue -0.18 [-0.36, 0.00] -1.92 0.054 Feedback_AILessAttractive Arousal
Gender [Female] × ConditionAI-Generated × Feedback AILessAttractiveTrue 0.03 [-0.18, 0.24] 0.29 0.772 Feedback_AILessAttractive Arousal
Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue 0.09 [-0.12, 0.29] 0.83 0.407 Feedback_AIMoreArousing Arousal
Gender [Female] × ConditionAI-Generated × Feedback AIMoreArousingTrue -1.92e-03 [-0.35, 0.35] -0.01 0.991 Feedback_AIMoreArousing Arousal
Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue 0.11 [-0.10, 0.31] 0.99 0.322 Feedback_AILessArousing Arousal
Gender [Female] × ConditionAI-Generated × Feedback AILessArousingTrue 0.07 [-0.21, 0.36] 0.51 0.608 Feedback_AILessArousing Arousal
Gender [Male] × ConditionAI-Generated × Feedback DiffObviousTrue 1.08e-03 [-0.23, 0.23] 9.10e-03 0.993 Feedback_DiffObvious Arousal
Gender [Female] × ConditionAI-Generated × Feedback DiffObviousTrue -0.19 [-0.49, 0.10] -1.27 0.203 Feedback_DiffObvious Arousal
Gender [Male] × ConditionAI-Generated × Feedback DiffNoneTrue 0.01 [-0.10, 0.12] 0.25 0.806 Feedback_DiffNone Arousal
Gender [Female] × ConditionAI-Generated × Feedback DiffNoneTrue 0.02 [-0.12, 0.15] 0.25 0.804 Feedback_DiffNone Arousal
Gender [Male] × ConditionAI-Generated × Feedback LabelsIncorrectTrue -0.06 [-0.19, 0.07] -0.92 0.359 Feedback_LabelsIncorrect Arousal
Gender [Female] × ConditionAI-Generated × Feedback LabelsIncorrectTrue 0.11 [-0.03, 0.26] 1.50 0.133 Feedback_LabelsIncorrect Arousal
Gender [Male] × ConditionAI-Generated × Feedback LabelsReversedTrue 0.20 [-0.05, 0.46] 1.54 0.122 Feedback_LabelsReversed Arousal
Gender [Female] × ConditionAI-Generated × Feedback LabelsReversedTrue -0.13 [-0.47, 0.21] -0.77 0.439 Feedback_LabelsReversed Arousal
Gender [Male] × ConditionAI-Generated × Feedback AllRealTrue 3.71e-04 [-0.11, 0.12] 6.31e-03 0.995 Feedback_AllReal Arousal
Gender [Female] × ConditionAI-Generated × Feedback AllRealTrue 0.01 [-0.12, 0.15] 0.22 0.827 Feedback_AllReal Arousal
Gender [Male] × ConditionAI-Generated × Feedback AllFakeTrue 0.14 [-0.09, 0.36] 1.16 0.244 Feedback_AllFake Arousal
Gender [Female] × ConditionAI-Generated × Feedback AllFakeTrue -0.12 [-0.43, 0.18] -0.81 0.417 Feedback_AllFake Arousal
Gender [Male] × ConditionAI-Generated × AllRealConfidence -5.04e-03 [-0.07, 0.06] -0.14 0.887 AllRealConfidence Arousal
Gender [Female] × ConditionAI-Generated × AllRealConfidence 0.02 [-0.06, 0.09] 0.41 0.678 AllRealConfidence Arousal
Gender [Male] × ConditionAI-Generated × AllFakeConfidence 0.04 [-0.23, 0.30] 0.26 0.798 AllFakeConfidence Arousal
Gender [Female] × ConditionAI-Generated × AllFakeConfidence -0.10 [-0.48, 0.27] -0.54 0.592 AllFakeConfidence Arousal
Gender [Male] × ConditionAI-Generated × Enjoyment -2.76e-03 [-0.09, 0.09] -0.06 0.952 Enjoyment Arousal
Gender [Female] × ConditionAI-Generated × Enjoyment 0.02 [-0.06, 0.09] 0.43 0.664 Enjoyment Arousal
Code
m <- glmmTMB::glmmTMB(Arousal ~ Gender / (Condition * SexualActivity_num) + (Condition | Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) -0.20 0.18 (-0.55, 0.14) -1.15 0.252
Gender (Female) -0.30 0.26 (-0.81, 0.21) -1.16 0.247
Gender (Male) × ConditionAI-Generated -0.29 0.09 (-0.47, -0.12) -3.35 < .001
Gender (Female) × ConditionAI-Generated -0.23 0.13 (-0.48, 0.02) -1.82 0.069
Gender (Male) × SexualActivity num 0.04 0.05 (-0.06, 0.13) 0.78 0.438
Gender (Female) × SexualActivity num 0.05 0.05 (-0.06, 0.16) 0.89 0.373
Gender (Male) × ConditionAI-Generated × SexualActivity num -3.09e-03 0.03 (-0.05, 0.05) -0.12 0.905
Gender (Female) × ConditionAI-Generated × SexualActivity num 0.03 0.03 (-0.04, 0.10) 0.90 0.366
Code
sex_act_plot<- estimate_relation(m, length=20) |> 
  ggplot(aes(x=SexualActivity_num, y=Predicted)) +
  geom_ribbon(aes(ymin=CI_low, ymax=CI_high, fill=Condition), alpha=0.2) +
  geom_line(aes(color=Condition)) +
  facet_grid(~Gender)

sex_act_plot

Believed

Code
m <- glmmTMB::glmmTMB(Arousal ~ Gender / StimuliType/Condition + (Condition|Participant) + (Condition|Stimulus),
                        data=filter(df, ConditionBelief == "True"), 
                        family=glmmTMB::ordbeta(),
                        control = glmmTMB::glmmTMBControl(parallel = 8))
  
results_table(m)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.37 0.12 (0.13, 0.61) 3.02 0.002
Gender (Female) -1.26 0.18 (-1.61, -0.91) -7.05 < .001
Gender (Male) × StimuliTypeCouple -0.45 0.13 (-0.71, -0.19) -3.35 < .001
Gender (Female) × StimuliTypeCouple 0.62 0.14 (0.35, 0.89) 4.45 < .001
Gender (Male) × StimuliTypeIndividual × ConditionAI-Generated -0.31 0.06 (-0.43, -0.20) -5.38 < .001
Gender (Female) × StimuliTypeIndividual × ConditionAI-Generated -0.03 0.08 (-0.18, 0.12) -0.39 0.696
Gender (Male) × StimuliTypeCouple × ConditionAI-Generated -0.31 0.06 (-0.44, -0.19) -4.91 < .001
Gender (Female) × StimuliTypeCouple × ConditionAI-Generated -0.17 0.07 (-0.31, -0.03) -2.39 0.017
Code
moderator_believed <- data.frame()
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
             "BAIT_Positive", "BAIT_Negative",
             "PornFrequency", "SexualActivity", 
             "Feedback_DiffObvious", "Feedback_DiffNone",
             "Feedback_AIMoreArousing", "Feedback_AILessArousing", 
             "Feedback_AIMoreAttractive", "Feedback_AILessAttractive",
             "Feedback_LabelsIncorrect", "Feedback_LabelsReversed")) {
    moderator_believed <- rbind(moderator_believed,
                               test_moderator(filter(df, ConditionBelief == "True"), "Arousal", m))
  }
  
  display(filter(moderator_believed, p < .1))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Female] × ConditionAI-Generated × PornFrequency 0.06 [-0.01, 0.13] 1.65 0.099 PornFrequency Arousal
Gender [Female] × SexualActivitywithin the last 3 days 0.50 [ 0.02, 0.98] 2.03 0.042 SexualActivity Arousal
Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue 0.25 [-0.04, 0.54] 1.72 0.086 Feedback_AIMoreArousing Arousal

Enticement

Enticment ratings, for some images, differ by whether the images were preceeded by ‘photograph’ or by ‘AI-generated’.

Code
enticement_desc <- plot_descriptive(df, "Enticing")
enticement_desc

Whole Sample

This model examines how Gender, Stimuli Type and Condition influence enticement ratings, treating participant and items as random intercepts.

Women rated images as less enticing than men overall. They rated couple images as more enticing than individual images. Men, on the other hand, rated couple images as less enticing. Men also rated AI-generated images as significantly less enticing than photographs, both for images of individual and couple stimuli. In contrast, women did not significantly differentiate between AI and photographic images in terms of enticement.

Looking at the average slopes, both genders rate Ai-generated conditions lower in enticement, although this effect is only significant for men.

Code
m_enticement <- glmmTMB::glmmTMB(Enticing ~ Gender / StimuliType/ Condition + 
                                   (Condition | Participant) + (1|Stimulus),
                      data=df, family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))



results_table(m_enticement)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.50 0.10 (0.31, 0.70) 5.03 < .001
Gender (Female) -0.98 0.14 (-1.26, -0.70) -6.83 < .001
Gender (Male) × StimuliTypeCouple -0.38 0.11 (-0.59, -0.17) -3.61 < .001
Gender (Female) × StimuliTypeCouple 0.53 0.11 (0.32, 0.74) 4.95 < .001
Gender (Male) × StimuliTypeIndividual × ConditionAI-Generated -0.10 0.04 (-0.17, -0.03) -2.83 0.005
Gender (Female) × StimuliTypeIndividual × ConditionAI-Generated 0.05 0.04 (-0.04, 0.13) 1.12 0.262
Gender (Male) × StimuliTypeCouple × ConditionAI-Generated -0.08 0.04 (-0.15, -0.01) -2.28 0.022
Gender (Female) × StimuliTypeCouple × ConditionAI-Generated -0.04 0.04 (-0.12, 0.03) -1.14 0.253
Code
marginaleffects::avg_slopes(m_enticement, variables="Condition", by="Gender") |>
  results_table()
Comparison Gender Coefficient z p 95% CI
AI-Generated - Photograph Male -0.02 -3.33 < .001 [-0.03, -0.01]
AI-Generated - Photograph Female 1.50e-04 0.02 0.982 [-0.01, 0.01]

Moderators

We examined whether attitudes towards AI, porn frequency, and sexual activity moderated the relationship between the predictors (sex, relevance, condition) and enticement ratings. The results showed that enticing ratings for images labeled AI-generated were moderated by the feedback reporting attitudes towards AI, but this was only significant for women. Specifically, women who reported having more positive attitudes towards AI, rated these images higher in arousal compared to images labeled as photographs.

Looking at feedback as a moderator, the results showed that enticement ratings for images labelled as AI-Generated were moderated by the feedback that AI is less attractive for males, and that difference between the AI-Generated images and real photos is obvious for females. Specifically,

Lastly, the interaction between sexual activity and condition on enticement, suggests that enticement ratings do not significantly differ with sexual activity levels for either gender.

Code
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
           "BAIT_Positive", "BAIT_Negative",
           "PornFrequency", "SexualActivity")) {
  moderator_results <- rbind(moderator_results,
                             test_moderator(df, "Enticing", m))
}

display(filter(moderator_results, Outcome == "Enticing"))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × BAIT Visual 0.03 [-0.03, 0.09] 0.92 0.355 BAIT_Visual Enticing
Gender [Female] × ConditionAI-Generated × BAIT Visual 2.94e-03 [-0.05, 0.06] 0.10 0.919 BAIT_Visual Enticing
Gender [Male] × ConditionAI-Generated × BAIT Text -0.01 [-0.06, 0.03] -0.47 0.639 BAIT_Text Enticing
Gender [Female] × ConditionAI-Generated × BAIT Text -8.19e-04 [-0.05, 0.05] -0.03 0.973 BAIT_Text Enticing
Gender [Male] × ConditionAI-Generated × BAIT ExpertAI 0.02 [-0.01, 0.05] 1.13 0.257 BAIT_ExpertAI Enticing
Gender [Female] × ConditionAI-Generated × BAIT ExpertAI 2.02e-03 [-0.04, 0.04] 0.10 0.921 BAIT_ExpertAI Enticing
Gender [Male] × ConditionAI-Generated × BAIT Positive 0.01 [-0.04, 0.06] 0.49 0.624 BAIT_Positive Enticing
Gender [Female] × ConditionAI-Generated × BAIT Positive 0.05 [ 0.00, 0.09] 1.96 0.050 BAIT_Positive Enticing
Gender [Male] × ConditionAI-Generated × BAIT Negative -0.04 [-0.07, -0.01] -2.38 0.017 BAIT_Negative Enticing
Gender [Female] × ConditionAI-Generated × BAIT Negative 1.45e-03 [-0.04, 0.04] 0.07 0.943 BAIT_Negative Enticing
Gender [Male] × ConditionAI-Generated × PornFrequency -3.50e-03 [-0.04, 0.03] -0.21 0.835 PornFrequency Enticing
Gender [Female] × ConditionAI-Generated × PornFrequency -0.01 [-0.06, 0.03] -0.62 0.533 PornFrequency Enticing
Gender [Male] × SexualActivitywithin the last 3 days -2.15e-03 [-0.33, 0.33] -0.01 0.990 SexualActivity Enticing
Gender [Female] × SexualActivitywithin the last 3 days 0.51 [ 0.11, 0.92] 2.49 0.013 SexualActivity Enticing
Code
for(m in c("Feedback_NoFacesAttractive", "Feedback_SomeFacesAttractive",
           "Feedback_AIMoreAttractive", "Feedback_AILessAttractive",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing", 
            
           "Feedback_DiffObvious", "Feedback_DiffNone",
           
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed",
           "Feedback_AllReal", "Feedback_AllFake",
           
           "AllRealConfidence","AllFakeConfidence" ,
           "Enjoyment")) {
  feedback_results <- rbind(feedback_results,
                            test_moderator(df, "Enticing", m))
}
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Code
display(filter(feedback_results, Outcome == "Enticing"))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue 0.05 [-0.22, 0.31] 0.36 0.716 Feedback_NoFacesAttractive Enticing
Gender [Female] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue -0.09 [-0.33, 0.16] -0.71 0.478 Feedback_NoFacesAttractive Enticing
Gender [Male] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue -8.85e-03 [-0.12, 0.10] -0.16 0.874 Feedback_SomeFacesAttractive Enticing
Gender [Female] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue -0.02 [-0.14, 0.10] -0.28 0.780 Feedback_SomeFacesAttractive Enticing
Gender [Male] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.07 [-0.06, 0.21] 1.07 0.285 Feedback_AIMoreAttractive Enticing
Gender [Female] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue -8.89e-03 [-0.15, 0.13] -0.13 0.900 Feedback_AIMoreAttractive Enticing
Gender [Male] × ConditionAI-Generated × Feedback AILessAttractiveTrue -0.18 [-0.36, 0.01] -1.88 0.060 Feedback_AILessAttractive Enticing
Gender [Female] × ConditionAI-Generated × Feedback AILessAttractiveTrue 3.67e-03 [-0.19, 0.20] 0.04 0.970 Feedback_AILessAttractive Enticing
Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue 0.03 [-0.17, 0.23] 0.27 0.784 Feedback_AIMoreArousing Enticing
Gender [Female] × ConditionAI-Generated × Feedback AIMoreArousingTrue -0.09 [-0.41, 0.23] -0.55 0.585 Feedback_AIMoreArousing Enticing
Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue 0.04 [-0.18, 0.25] 0.33 0.739 Feedback_AILessArousing Enticing
Gender [Female] × ConditionAI-Generated × Feedback AILessArousingTrue 0.17 [-0.07, 0.42] 1.38 0.166 Feedback_AILessArousing Enticing
Gender [Male] × ConditionAI-Generated × Feedback DiffObviousTrue -0.14 [-0.37, 0.09] -1.17 0.241 Feedback_DiffObvious Enticing
Gender [Female] × ConditionAI-Generated × Feedback DiffObviousTrue -0.18 [-0.45, 0.09] -1.29 0.197 Feedback_DiffObvious Enticing
Gender [Male] × ConditionAI-Generated × Feedback DiffNoneTrue 0.04 [-0.07, 0.15] 0.72 0.470 Feedback_DiffNone Enticing
Gender [Female] × ConditionAI-Generated × Feedback DiffNoneTrue 5.57e-03 [-0.12, 0.13] 0.09 0.928 Feedback_DiffNone Enticing
Gender [Male] × ConditionAI-Generated × Feedback LabelsIncorrectTrue -0.06 [-0.19, 0.07] -0.84 0.399 Feedback_LabelsIncorrect Enticing
Gender [Female] × ConditionAI-Generated × Feedback LabelsIncorrectTrue 0.02 [-0.12, 0.16] 0.27 0.784 Feedback_LabelsIncorrect Enticing
Gender [Male] × ConditionAI-Generated × Feedback LabelsReversedTrue 0.17 [-0.10, 0.43] 1.25 0.212 Feedback_LabelsReversed Enticing
Gender [Female] × ConditionAI-Generated × Feedback LabelsReversedTrue -0.14 [-0.46, 0.17] -0.89 0.375 Feedback_LabelsReversed Enticing
Gender [Male] × ConditionAI-Generated × Feedback AllRealTrue 0.02 [-0.09, 0.13] 0.35 0.724 Feedback_AllReal Enticing
Gender [Female] × ConditionAI-Generated × Feedback AllRealTrue 0.08 [-0.04, 0.21] 1.37 0.171 Feedback_AllReal Enticing
Gender [Male] × ConditionAI-Generated × Feedback AllFakeTrue 0.21 [-0.02, 0.44] 1.79 0.073 Feedback_AllFake Enticing
Gender [Female] × ConditionAI-Generated × Feedback AllFakeTrue -3.78e-03 [-0.28, 0.27] -0.03 0.979 Feedback_AllFake Enticing
Gender [Male] × ConditionAI-Generated × AllRealConfidence -0.03 [-0.09, 0.03] -0.91 0.363 AllRealConfidence Enticing
Gender [Female] × ConditionAI-Generated × AllRealConfidence 0.01 [-0.06, 0.08] 0.31 0.758 AllRealConfidence Enticing
Gender [Male] × ConditionAI-Generated × AllFakeConfidence -5.32e-03 [-0.29, 0.28] -0.04 0.970 AllFakeConfidence Enticing
Gender [Female] × ConditionAI-Generated × AllFakeConfidence 0.03 [-0.31, 0.37] 0.16 0.870 AllFakeConfidence Enticing
Gender [Male] × ConditionAI-Generated × Enjoyment 0.04 [-0.05, 0.13] 0.90 0.369 Enjoyment Enticing
Gender [Female] × ConditionAI-Generated × Enjoyment -5.09e-03 [-0.07, 0.06] -0.16 0.873 Enjoyment Enticing
Code
m <- glmmTMB::glmmTMB(Enticing ~ Gender / (Condition * SexualActivity_num) + (Condition | Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.15 0.15 (-0.15, 0.44) 0.97 0.334
Gender (Female) -0.32 0.22 (-0.75, 0.12) -1.44 0.150
Gender (Male) × ConditionAI-Generated -0.36 0.10 (-0.55, -0.17) -3.77 < .001
Gender (Female) × ConditionAI-Generated -0.12 0.12 (-0.36, 0.12) -0.99 0.323
Gender (Male) × SexualActivity num 0.02 0.04 (-0.07, 0.10) 0.38 0.707
Gender (Female) × SexualActivity num 0.06 0.05 (-0.03, 0.15) 1.37 0.171
Gender (Male) × ConditionAI-Generated × SexualActivity num 0.01 0.03 (-0.04, 0.07) 0.52 0.604
Gender (Female) × ConditionAI-Generated × SexualActivity num 6.23e-03 0.03 (-0.06, 0.07) 0.19 0.852
Code
sex_act_plot_ent<- estimate_relation(m, length=20) |> 
  ggplot(aes(x=SexualActivity_num, y=Predicted)) +
  geom_ribbon(aes(ymin=CI_low, ymax=CI_high, fill=Condition), alpha=0.2) +
  geom_line(aes(color=Condition)) +
  facet_grid(~Gender)

sex_act_plot_ent

Believed

Code
m <- glmmTMB::glmmTMB(Enticing ~ Gender / Condition + (Condition| Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.19 0.09 (0.02, 0.37) 2.13 0.033
Gender (Female) -0.15 0.10 (-0.35, 0.05) -1.50 0.134
Gender (Male) × ConditionAI-Generated -0.32 0.05 (-0.41, -0.22) -6.67 < .001
Gender (Female) × ConditionAI-Generated -0.10 0.05 (-0.20, 7.43e-04) -1.95 0.052
Code
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
           "BAIT_Positive", "BAIT_Negative", "PornFrequency", "SexualActivity", 
           
           "Feedback_DiffObvious", "Feedback_DiffNone",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing",
           "Feedback_AIMoreAttractive", "Feedback_AILessArousing",
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed")) {
  moderator_believed <- rbind(moderator_believed,
                             test_moderator(filter(df, ConditionBelief == "True"), "Enticing", m))
}

display(filter(moderator_believed, p < .1))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Female] × ConditionAI-Generated × PornFrequency 0.06 [-0.01, 0.13] 1.65 0.099 PornFrequency Arousal
Gender [Female] × SexualActivitywithin the last 3 days 0.50 [ 0.02, 0.98] 2.03 0.042 SexualActivity Arousal
Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue 0.25 [-0.04, 0.54] 1.72 0.086 Feedback_AIMoreArousing Arousal
Gender [Female] × SexualActivitywithin the last 3 days 0.53 [ 0.13, 0.94] 2.56 0.010 SexualActivity Enticing

Valence

Code
valence_desc <- plot_descriptive(df, "Valence")
valence_desc

Whole Sample

This model examines the effect of Gender, Stimuli Type and Condition on Valence ratings, while accounting for random variability due to participants and items (i.e., random intercepts).

Women rated images overall as lower in valence than men did. They rated couple images as higher in valence than individual ones. Additionally, women rated AI-generated couple images as significantly lower in valence than photographic couple images. Men rated images of couples lower in valence and AI-images of individuals lower in valence comapred to real photos of individuals.

Looking at avergae slopes, both genders rate AI-generated images lower in valence, but this effect is only significant for males as well.

Code
m_valence <- glmmTMB::glmmTMB(Valence ~ Gender / StimuliType/ Condition + 
                                (Condition| Participant) + (1|Stimulus),
                      data=df, family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m_valence)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.57 0.08 (0.41, 0.73) 7.05 < .001
Gender (Female) -0.77 0.12 (-0.99, -0.54) -6.60 < .001
Gender (Male) × StimuliTypeCouple -0.27 0.08 (-0.43, -0.12) -3.39 < .001
Gender (Female) × StimuliTypeCouple 0.48 0.08 (0.32, 0.64) 5.79 < .001
Gender (Male) × StimuliTypeIndividual × ConditionAI-Generated -0.08 0.03 (-0.15, -0.02) -2.43 0.015
Gender (Female) × StimuliTypeIndividual × ConditionAI-Generated 0.01 0.04 (-0.06, 0.08) 0.30 0.763
Gender (Male) × StimuliTypeCouple × ConditionAI-Generated -0.04 0.03 (-0.10, 0.03) -1.15 0.249
Gender (Female) × StimuliTypeCouple × ConditionAI-Generated -0.06 0.03 (-0.13, 0.01) -1.66 0.098
Code
marginaleffects::avg_slopes(m_valence, variables="Condition", by="Gender") |>
  results_table()
Comparison Gender Coefficient z p 95% CI
AI-Generated - Photograph Male -0.01 -2.51 0.012 [-0.02, 0.00]
AI-Generated - Photograph Female -6.08e-03 -1.02 0.308 [-0.02, 0.01]

Moderators

Here we look at whether the relationship between gender and condition and valence is moderated by AI-attitudes, porn frequency, and sexual activity. The results showed that enticing ratings for images labeled AI-generated were moderated by the feedback reporting attitudes towards AI, but this was only significant for women. More specifically, females who have more positive and negative attitudes towards AI rated images labelled as AI-Generated significantly higher and lower in valence compared to images labelled as photographs.

Looking at feedback as a moderator, the results show that valence ratings for images labelled AI-Generated were moderted by the feedback that the difference between AI and Photos was obvious, but only for females.

Code
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
           "BAIT_Positive", "BAIT_Negative", "PornFrequency", "SexualActivity_num")) {
  moderator_results <- rbind(moderator_results,
                             test_moderator(df, "Valence", m))
}

display(filter(moderator_results, Outcome == "Valence"))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × BAIT Visual 0.04 [-0.01, 0.09] 1.53 0.127 BAIT_Visual Valence
Gender [Female] × ConditionAI-Generated × BAIT Visual 8.76e-03 [-0.04, 0.06] 0.35 0.726 BAIT_Visual Valence
Gender [Male] × ConditionAI-Generated × BAIT Text -3.72e-04 [-0.04, 0.04] -0.02 0.985 BAIT_Text Valence
Gender [Female] × ConditionAI-Generated × BAIT Text 0.02 [-0.02, 0.06] 0.99 0.323 BAIT_Text Valence
Gender [Male] × ConditionAI-Generated × BAIT ExpertAI 0.04 [ 0.01, 0.07] 2.51 0.012 BAIT_ExpertAI Valence
Gender [Female] × ConditionAI-Generated × BAIT ExpertAI 0.02 [-0.01, 0.05] 1.11 0.269 BAIT_ExpertAI Valence
Gender [Male] × ConditionAI-Generated × BAIT Positive 0.02 [-0.02, 0.07] 1.04 0.300 BAIT_Positive Valence
Gender [Female] × ConditionAI-Generated × BAIT Positive 0.03 [-0.01, 0.07] 1.71 0.087 BAIT_Positive Valence
Gender [Male] × ConditionAI-Generated × BAIT Negative -0.03 [-0.06, 0.00] -2.30 0.022 BAIT_Negative Valence
Gender [Female] × ConditionAI-Generated × BAIT Negative -0.04 [-0.07, 0.00] -2.24 0.025 BAIT_Negative Valence
Gender [Male] × ConditionAI-Generated × PornFrequency -1.16e-03 [-0.03, 0.03] -0.08 0.937 PornFrequency Valence
Gender [Female] × ConditionAI-Generated × PornFrequency -2.57e-03 [-0.04, 0.03] -0.14 0.888 PornFrequency Valence
Gender [Male] × ConditionAI-Generated × SexualActivity num -0.02 [-0.05, 0.01] -1.17 0.243 SexualActivity_num Valence
Gender [Female] × ConditionAI-Generated × SexualActivity num -0.01 [-0.04, 0.02] -0.70 0.481 SexualActivity_num Valence
Code
for(m in c("Feedback_NoFacesAttractive", "Feedback_SomeFacesAttractive",
           "Feedback_AIMoreAttractive", "Feedback_AILessAttractive",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing", 
            
           "Feedback_DiffObvious", "Feedback_DiffNone",
           
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed",
           "Feedback_AllReal", "Feedback_AllFake",
           
           "AllRealConfidence","AllFakeConfidence" ,
           "Enjoyment")) {
  feedback_results <- rbind(feedback_results,
                            test_moderator(df, "Valence", m))
}
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; non-positive-definite Hessian matrix. See vignette('troubleshooting')
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Code
display(filter(feedback_results, Outcome == "Valence"))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue 0.06 [-0.17, 0.29] 0.51 0.611 Feedback_NoFacesAttractive Valence
Gender [Female] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue -1.47e-03 [-0.19, 0.19] -0.02 0.988 Feedback_NoFacesAttractive Valence
Gender [Male] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue 0.03 [-0.06, 0.13] 0.64 0.521 Feedback_SomeFacesAttractive Valence
Gender [Female] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue 0.06 [-0.05, 0.16] 1.10 0.270 Feedback_SomeFacesAttractive Valence
Gender [Male] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.13 [ 0.01, 0.25] 2.13 0.033 Feedback_AIMoreAttractive Valence
Gender [Female] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.06 [-0.05, 0.18] 1.05 0.293 Feedback_AIMoreAttractive Valence
Gender [Male] × ConditionAI-Generated × Feedback AILessAttractiveTrue -0.10 [-0.26, 0.06] -1.19 0.234 Feedback_AILessAttractive Valence
Gender [Female] × ConditionAI-Generated × Feedback AILessAttractiveTrue 0.05 [-0.12, 0.22] 0.55 0.579 Feedback_AILessAttractive Valence
Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue -0.06 [-0.23, 0.11] -0.68 0.497 Feedback_AIMoreArousing Valence
Gender [Female] × ConditionAI-Generated × Feedback AIMoreArousingTrue -0.13 [-0.42, 0.15] -0.93 0.352 Feedback_AIMoreArousing Valence
Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue 0.02 [-0.17, 0.20] 0.19 0.848 Feedback_AILessArousing Valence
Gender [Female] × ConditionAI-Generated × Feedback AILessArousingTrue -0.04 [-0.23, 0.16] -0.37 0.714 Feedback_AILessArousing Valence
Gender [Male] × ConditionAI-Generated × Feedback DiffObviousTrue -0.01 [-0.21, 0.18] -0.13 0.898 Feedback_DiffObvious Valence
Gender [Female] × ConditionAI-Generated × Feedback DiffObviousTrue -0.11 [-0.36, 0.15] -0.83 0.406 Feedback_DiffObvious Valence
Gender [Male] × ConditionAI-Generated × Feedback DiffNoneTrue 6.34e-03 [-0.09, 0.10] 0.13 0.895 Feedback_DiffNone Valence
Gender [Female] × ConditionAI-Generated × Feedback DiffNoneTrue 0.07 [-0.03, 0.17] 1.31 0.189 Feedback_DiffNone Valence
Gender [Male] × ConditionAI-Generated × Feedback LabelsIncorrectTrue -0.11 [-0.22, 0.00] -1.93 0.054 Feedback_LabelsIncorrect Valence
Gender [Female] × ConditionAI-Generated × Feedback LabelsIncorrectTrue 0.02 [-0.09, 0.14] 0.42 0.672 Feedback_LabelsIncorrect Valence
Gender [Male] × ConditionAI-Generated × Feedback LabelsReversedTrue 0.09 [-0.14, 0.32] 0.78 0.435 Feedback_LabelsReversed Valence
Gender [Female] × ConditionAI-Generated × Feedback LabelsReversedTrue 0.09 [-0.16, 0.35] 0.71 0.479 Feedback_LabelsReversed Valence
Gender [Male] × ConditionAI-Generated × Feedback AllRealTrue 0.07 [-0.03, 0.17] 1.37 0.172 Feedback_AllReal Valence
Gender [Female] × ConditionAI-Generated × Feedback AllRealTrue 0.10 [ 0.00, 0.20] 1.93 0.054 Feedback_AllReal Valence
Gender [Male] × ConditionAI-Generated × Feedback AllFakeTrue 0.18 [-0.02, 0.38] 1.79 0.073 Feedback_AllFake Valence
Gender [Female] × ConditionAI-Generated × Feedback AllFakeTrue -0.21 [-0.44, 0.02] -1.76 0.078 Feedback_AllFake Valence
Gender [Male] × ConditionAI-Generated × AllRealConfidence -0.03 [-0.09, 0.03] -1.05 0.294 AllRealConfidence Valence
Gender [Female] × ConditionAI-Generated × AllRealConfidence 0.03 [-0.04, 0.10] 0.84 0.400 AllRealConfidence Valence
Gender [Male] × ConditionAI-Generated × AllFakeConfidence 0.02 [-0.27, 0.32] 0.16 0.874 AllFakeConfidence Valence
Gender [Female] × ConditionAI-Generated × AllFakeConfidence 0.11 [-0.19, 0.42] 0.73 0.467 AllFakeConfidence Valence
Gender [Male] × ConditionAI-Generated × Enjoyment 0.04 [-0.04, 0.12] 1.02 0.309 Enjoyment Valence
Gender [Female] × ConditionAI-Generated × Enjoyment 9.40e-03 [-0.04, 0.06] 0.35 0.725 Enjoyment Valence

Believed

Code
m <- glmmTMB::glmmTMB(Valence ~ Gender /Condition + (Condition| Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.32 0.07 (0.18, 0.46) 4.46 < .001
Gender (Female) -0.09 0.08 (-0.25, 0.08) -1.03 0.305
Gender (Male) × ConditionAI-Generated -0.24 0.04 (-0.32, -0.15) -5.59 < .001
Gender (Female) × ConditionAI-Generated -0.17 0.05 (-0.26, -0.08) -3.79 < .001
Code
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
           "BAIT_Positive", "BAIT_Negative", "PornFrequency", "SexualActivity", 
           
           "Feedback_DiffObvious", "Feedback_DiffNone",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing",
           "Feedback_AIMoreAttractive", "Feedback_AILessArousing",
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed")) {
  moderator_believed <- rbind(moderator_believed,
                             test_moderator(filter(df, ConditionBelief == "True"), "Valence", m))
}

(filter(moderator_believed, p < .1))
                                                              Parameter Coefficient         95% CI         z      p               Moderator  Outcome
85              Gender [Female] × ConditionAI-Generated × PornFrequency        0.06  [-0.01, 0.13]      1.65  0.099           PornFrequency  Arousal
86               Gender [Female] × SexualActivitywithin the last 3 days        0.50  [ 0.02, 0.98]      2.03  0.042          SexualActivity  Arousal
79  Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue        0.25  [-0.04, 0.54]      1.72  0.086 Feedback_AIMoreArousing  Arousal
821              Gender [Female] × SexualActivitywithin the last 3 days        0.53  [ 0.13, 0.94]      2.56  0.010          SexualActivity Enticing
834             Gender [Female] × ConditionAI-Generated × BAIT Negative       -0.07 [-0.12, -0.01]     -2.33  0.020           BAIT_Negative  Valence
836              Gender [Female] × SexualActivitywithin the last 3 days        0.37  [ 0.05, 0.70]      2.23  0.026          SexualActivity  Valence
740 Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue   -1.30e-04  [-0.33, 0.33] -7.79e-04 > .999 Feedback_AILessArousing  Valence
742 Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue   -1.30e-04  [-0.33, 0.33] -7.79e-04 > .999 Feedback_AILessArousing  Valence

Emotionality (combined factor)

Here we combined the data for arousal, valence and enticing into an emotionality factor.

Code
pca <- principal_components(df[c("Valence", "Arousal", "Enticing")], n = 2)
pca
# Loadings from Principal Component Analysis (no rotation)

Variable |   PC1 |   PC2 | Complexity
-------------------------------------
Valence  | -0.89 |  0.44 |       1.46
Arousal  | -0.91 | -0.37 |       1.33
Enticing | -0.95 | -0.06 |       1.01

The 2 principal components accounted for 94.67% of the total variance of the original data (PC1 = 83.46%, PC2 = 11.21%).
Code
df$Emotionality <- as.numeric(normalize(-predict(pca)$PC1))

emotionality <- df |> 
  mutate(Emotionality_Extreme = ifelse(Emotionality %in% c(0, 1), "Extreme", "Not extreme")) |>
  ggplot(aes(x=Emotionality, fill = Gender)) +
  geom_histogram(aes(color=Emotionality_Extreme), position = "identity", bins=20) +
  facet_grid(~Gender, scales="free_y") +
  scale_color_manual(values=c("red", "white"), guide="none") +
  scale_fill_manual(values=c("Male"="#E91E63", "Female"="#FF9800"), guide="none") +
  scale_y_sqrt(expand = c(0, 0)) +
  labs(title = "Emotionality") +
  theme_abyss() +
  theme(plot.title = element_text(hjust = 0.5, face="bold"))

emotionality

Code
emotionality_desc <- plot_descriptive(df, "Emotionality")
emotionality_desc

Whole Sample

This model looks at the effect of Gender, StimuliType and Condition on Emotionality, accounting for random variability due to participants and items (i.e., random intercepts).

Females, compared to males, report significantly lower emotionality ratings for fotographs. Among males, couple stimuli are rated lower than individual stimuli.Among females, couple stimuli are rated higher than individual stimuli. For males, AI-generated individual stimuli are rated lower than human-generated ones. Females have lower ratings for AI-generated couple stimuli compared to AI-generated stimuli of individuals.

Code
m_emotionality <- glmmTMB::glmmTMB(Emotionality ~ Gender /StimuliType/ Condition + (Condition| Participant) + (1|Stimulus),
                      data=df, family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m_emotionality)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.48 0.11 (0.27, 0.69) 4.55 < .001
Gender (Female) -1.11 0.15 (-1.41, -0.81) -7.28 < .001
Gender (Male) × StimuliTypeCouple -0.41 0.11 (-0.63, -0.19) -3.68 < .001
Gender (Female) × StimuliTypeCouple 0.62 0.11 (0.40, 0.84) 5.44 < .001
Gender (Male) × StimuliTypeIndividual × ConditionAI-Generated -0.11 0.04 (-0.19, -0.04) -3.12 0.002
Gender (Female) × StimuliTypeIndividual × ConditionAI-Generated 0.04 0.04 (-0.04, 0.12) 0.94 0.348
Gender (Male) × StimuliTypeCouple × ConditionAI-Generated -0.06 0.04 (-0.13, 6.10e-03) -1.79 0.074
Gender (Female) × StimuliTypeCouple × ConditionAI-Generated -0.06 0.04 (-0.14, 0.01) -1.60 0.109
Code
marginaleffects::avg_slopes(m_emotionality, variables="Condition", by="Gender", re.form=NA) |>
  results_table()
Comparison Gender Coefficient z p 95% CI
AI-Generated - Photograph Male -0.02 -3.13 0.002 [-0.04, -0.01]
AI-Generated - Photograph Female -3.34e-03 -0.45 0.650 [-0.02, 0.01]

Moderators

Looking at AI-attitudes, porn frequency and sexual activity, and feedback as moderators, we can see that for males reporting higher expertise in AI led to an increase of emotionality ratings for images labelled as AI-Generated. Additionally, males who reported having more negative attitiudes towards AI, rated AI-Generated images lower in emotionality compared to fotographs. While for feamles, those with more positive AI attitudes rate AI-generated images higher in emotionality.

Looking at feedback as a moderator, the results show that for males who reported finidng AI-generated images as more attractive rated these images higher in emotionality.Conversely, males who reported finding AI-generated images as less attractive rated these images lower in emotionality.

Code
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
           "BAIT_Positive", "BAIT_Negative", "PornFrequency", "SexualActivity_num")) {
  moderator_results <- rbind(moderator_results,
                             test_moderator(df, "Emotionality", m))
}

display(filter(moderator_results, Outcome == "Emotionality"))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × BAIT Visual 0.05 [ 0.00, 0.11] 1.82 0.069 BAIT_Visual Emotionality
Gender [Female] × ConditionAI-Generated × BAIT Visual 5.41e-03 [-0.05, 0.06] 0.18 0.854 BAIT_Visual Emotionality
Gender [Male] × ConditionAI-Generated × BAIT Text -3.70e-03 [-0.05, 0.04] -0.16 0.872 BAIT_Text Emotionality
Gender [Female] × ConditionAI-Generated × BAIT Text 0.01 [-0.04, 0.06] 0.53 0.595 BAIT_Text Emotionality
Gender [Male] × ConditionAI-Generated × BAIT ExpertAI 0.04 [ 0.00, 0.07] 2.11 0.035 BAIT_ExpertAI Emotionality
Gender [Female] × ConditionAI-Generated × BAIT ExpertAI 0.03 [-0.01, 0.07] 1.39 0.166 BAIT_ExpertAI Emotionality
Gender [Male] × ConditionAI-Generated × BAIT Positive 0.03 [-0.02, 0.08] 1.08 0.282 BAIT_Positive Emotionality
Gender [Female] × ConditionAI-Generated × BAIT Positive 0.05 [ 0.00, 0.09] 2.06 0.039 BAIT_Positive Emotionality
Gender [Male] × ConditionAI-Generated × BAIT Negative -0.04 [-0.07, -0.01] -2.55 0.011 BAIT_Negative Emotionality
Gender [Female] × ConditionAI-Generated × BAIT Negative -0.02 [-0.06, 0.02] -0.83 0.404 BAIT_Negative Emotionality
Gender [Male] × ConditionAI-Generated × PornFrequency 5.80e-03 [-0.03, 0.04] 0.34 0.732 PornFrequency Emotionality
Gender [Female] × ConditionAI-Generated × PornFrequency -1.34e-03 [-0.04, 0.04] -0.06 0.950 PornFrequency Emotionality
Gender [Male] × ConditionAI-Generated × SexualActivity num -0.03 [-0.06, 0.01] -1.48 0.140 SexualActivity_num Emotionality
Gender [Female] × ConditionAI-Generated × SexualActivity num -0.03 [-0.07, 0.01] -1.54 0.123 SexualActivity_num Emotionality
Code
for(m in c("Feedback_NoFacesAttractive", "Feedback_SomeFacesAttractive",
           "Feedback_AIMoreAttractive", "Feedback_AILessAttractive",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing", 
            
           "Feedback_DiffObvious", "Feedback_DiffNone",
           
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed",
           "Feedback_AllReal", "Feedback_AllFake",
           
           "AllRealConfidence","AllFakeConfidence" ,
           "Enjoyment")) {
  feedback_results <- rbind(feedback_results,
                            test_moderator(df, "Emotionality", m))
}
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Code
display(filter(feedback_results, Outcome == "Emotionality"))
Parameter Coefficient 95% CI z p Moderator Outcome
Gender [Male] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue -6.16e-03 [-0.27, 0.26] -0.05 0.964 Feedback_NoFacesAttractive Emotionality
Gender [Female] × ConditionAI-Generated × Feedback NoFacesAttractiveTrue -0.09 [-0.32, 0.15] -0.72 0.470 Feedback_NoFacesAttractive Emotionality
Gender [Male] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue 0.02 [-0.09, 0.13] 0.38 0.707 Feedback_SomeFacesAttractive Emotionality
Gender [Female] × ConditionAI-Generated × Feedback SomeFacesAttractiveTrue 0.05 [-0.07, 0.18] 0.85 0.393 Feedback_SomeFacesAttractive Emotionality
Gender [Male] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.17 [ 0.03, 0.30] 2.43 0.015 Feedback_AIMoreAttractive Emotionality
Gender [Female] × ConditionAI-Generated × Feedback AIMoreAttractiveTrue 0.09 [-0.05, 0.22] 1.23 0.220 Feedback_AIMoreAttractive Emotionality
Gender [Male] × ConditionAI-Generated × Feedback AILessAttractiveTrue -0.19 [-0.38, 0.00] -2.01 0.045 Feedback_AILessAttractive Emotionality
Gender [Female] × ConditionAI-Generated × Feedback AILessAttractiveTrue 0.03 [-0.17, 0.22] 0.26 0.796 Feedback_AILessAttractive Emotionality
Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue -0.03 [-0.23, 0.18] -0.25 0.803 Feedback_AIMoreArousing Emotionality
Gender [Female] × ConditionAI-Generated × Feedback AIMoreArousingTrue -0.19 [-0.52, 0.14] -1.13 0.258 Feedback_AIMoreArousing Emotionality
Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue 0.03 [-0.19, 0.24] 0.22 0.823 Feedback_AILessArousing Emotionality
Gender [Female] × ConditionAI-Generated × Feedback AILessArousingTrue 0.04 [-0.19, 0.27] 0.34 0.735 Feedback_AILessArousing Emotionality
Gender [Male] × ConditionAI-Generated × Feedback DiffObviousTrue -0.11 [-0.34, 0.13] -0.88 0.380 Feedback_DiffObvious Emotionality
Gender [Female] × ConditionAI-Generated × Feedback DiffObviousTrue -0.07 [-0.35, 0.21] -0.50 0.615 Feedback_DiffObvious Emotionality
Gender [Male] × ConditionAI-Generated × Feedback DiffNoneTrue 0.04 [-0.07, 0.15] 0.66 0.509 Feedback_DiffNone Emotionality
Gender [Female] × ConditionAI-Generated × Feedback DiffNoneTrue 0.03 [-0.10, 0.15] 0.42 0.677 Feedback_DiffNone Emotionality
Gender [Male] × ConditionAI-Generated × Feedback LabelsIncorrectTrue -0.09 [-0.22, 0.04] -1.32 0.188 Feedback_LabelsIncorrect Emotionality
Gender [Female] × ConditionAI-Generated × Feedback LabelsIncorrectTrue -0.02 [-0.15, 0.12] -0.25 0.804 Feedback_LabelsIncorrect Emotionality
Gender [Male] × ConditionAI-Generated × Feedback LabelsReversedTrue 0.20 [-0.07, 0.47] 1.46 0.144 Feedback_LabelsReversed Emotionality
Gender [Female] × ConditionAI-Generated × Feedback LabelsReversedTrue -0.04 [-0.34, 0.26] -0.27 0.789 Feedback_LabelsReversed Emotionality
Gender [Male] × ConditionAI-Generated × Feedback AllRealTrue 0.02 [-0.09, 0.14] 0.38 0.701 Feedback_AllReal Emotionality
Gender [Female] × ConditionAI-Generated × Feedback AllRealTrue 0.06 [-0.06, 0.18] 0.95 0.342 Feedback_AllReal Emotionality
Gender [Male] × ConditionAI-Generated × Feedback AllFakeTrue 0.22 [-0.02, 0.45] 1.82 0.068 Feedback_AllFake Emotionality
Gender [Female] × ConditionAI-Generated × Feedback AllFakeTrue -0.03 [-0.31, 0.24] -0.23 0.815 Feedback_AllFake Emotionality
Gender [Male] × ConditionAI-Generated × AllRealConfidence -0.02 [-0.08, 0.03] -0.79 0.427 AllRealConfidence Emotionality
Gender [Female] × ConditionAI-Generated × AllRealConfidence 6.01e-03 [-0.06, 0.08] 0.17 0.866 AllRealConfidence Emotionality
Gender [Male] × ConditionAI-Generated × AllFakeConfidence -2.85e-04 [-0.27, 0.27] -2.08e-03 0.998 AllFakeConfidence Emotionality
Gender [Female] × ConditionAI-Generated × AllFakeConfidence 0.09 [-0.25, 0.43] 0.54 0.592 AllFakeConfidence Emotionality
Gender [Male] × ConditionAI-Generated × Enjoyment 0.06 [-0.04, 0.15] 1.20 0.229 Enjoyment Emotionality
Gender [Female] × ConditionAI-Generated × Enjoyment 0.02 [-0.04, 0.08] 0.72 0.469 Enjoyment Emotionality

Believed

Code
m <- glmmTMB::glmmTMB(Emotionality ~ Gender / Condition + (Condition| Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))

results_table(m)
Fixed Effects
Parameter Coefficient SE 95% CI z p
(Intercept) 0.13 0.10 (-0.06, 0.32) 1.37 0.171
Gender (Female) -0.16 0.10 (-0.36, 0.05) -1.51 0.132
Gender (Male) × ConditionAI-Generated -0.33 0.05 (-0.42, -0.24) -7.04 < .001
Gender (Female) × ConditionAI-Generated -0.15 0.05 (-0.25, -0.05) -2.91 0.004
Code
for(m in c("BAIT_Visual", "BAIT_Text", "BAIT_ExpertAI",
           "BAIT_Positive", "BAIT_Negative", "PornFrequency", "SexualActivity", 
           
           "Feedback_DiffObvious", "Feedback_DiffNone",
           "Feedback_AIMoreArousing", "Feedback_AILessArousing",
           "Feedback_AIMoreAttractive", "Feedback_AILessArousing",
           "Feedback_LabelsIncorrect", "Feedback_LabelsReversed")) {
  moderator_believed <- rbind(moderator_believed,
                             test_moderator(filter(df, ConditionBelief == "True"), "Emotionality", m))
}

(filter(moderator_believed, p < .1))
                                                              Parameter Coefficient         95% CI         z      p               Moderator      Outcome
85              Gender [Female] × ConditionAI-Generated × PornFrequency        0.06  [-0.01, 0.13]      1.65  0.099           PornFrequency      Arousal
86               Gender [Female] × SexualActivitywithin the last 3 days        0.50  [ 0.02, 0.98]      2.03  0.042          SexualActivity      Arousal
79  Gender [Male] × ConditionAI-Generated × Feedback AIMoreArousingTrue        0.25  [-0.04, 0.54]      1.72  0.086 Feedback_AIMoreArousing      Arousal
821              Gender [Female] × SexualActivitywithin the last 3 days        0.53  [ 0.13, 0.94]      2.56  0.010          SexualActivity     Enticing
834             Gender [Female] × ConditionAI-Generated × BAIT Negative       -0.07 [-0.12, -0.01]     -2.33  0.020           BAIT_Negative      Valence
836              Gender [Female] × SexualActivitywithin the last 3 days        0.37  [ 0.05, 0.70]      2.23  0.026          SexualActivity      Valence
740 Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue   -1.30e-04  [-0.33, 0.33] -7.79e-04 > .999 Feedback_AILessArousing      Valence
742 Gender [Male] × ConditionAI-Generated × Feedback AILessArousingTrue   -1.30e-04  [-0.33, 0.33] -7.79e-04 > .999 Feedback_AILessArousing      Valence
851              Gender [Female] × SexualActivitywithin the last 3 days        0.55  [ 0.13, 0.97]      2.56  0.011          SexualActivity Emotionality

Summary

  • Gender is a major predictor of arousal, enticement and valence, with females generally reporting lower ratings than males overall.
  • Women prefer couple images (i.e.,significantly higher arousal, enticement and valence ratings); men prefer individual images (i.e.,significantly lower arousal, enticement and valence ratings).
  • AI-generation reduces arousal for men, especially for individual images. AI-generation has no significant effect on arousal for women, whether images are of individuals or couples.

Moderators

  • For women, positive attitudes towards AI moderated arousal and enticement, resulting in more favorable evaluations of AI-generated images. Negative attitudes moderated valence ratings, leading to less favorable evaluations.
  • Negative attitudes towards AI moderated valence ratings for both genders
  • Reporting having higher knowledge about AI moderated valence ratings for men
  • Sexual activity moderated enticement ratings for females. Specifically, females who reported having sexual activity within the 3 previous days tended to rate AI images higher in enticement.
  • Men’s perceptions of the attractiveness of AI-generated images moderated both arousal and valence ratings. More attractive AI images were rated as more arousing and valent.
  • Female’s feedback that no images were attractive moderated arousal ratings.

Figures

Code
pred1 <- rbind(
  modelbased::estimate_means(m_arousal, by=c("Gender", "StimuliType", "Condition"), backend = "emmeans") |>
  as.data.frame() |> 
  mutate(Outcome="Arousal"),
  modelbased::estimate_means(m_enticement, by=c("Gender","StimuliType",  "Condition"), backend = "emmeans") |>
  as.data.frame() |> 
  mutate(Outcome="Enticement"),
  modelbased::estimate_means(m_valence, by=c("Gender", "StimuliType", "Condition"), backend = "emmeans") |>
  as.data.frame() |> 
  mutate(Outcome="Valence")
)

# stars1a <- data.frame(label=c("**","***", "**", "***", "***", "***"),
#                     Gender=fct_relevel(c("Male", "Female", "Male", "Female", "Male", "Female"), "Male"),
#                     Outcome=c("Arousal","Arousal", "Enticement", "Enticement", "Valence", "Valence"),
#                     Condition=c("Photograph", "Photograph", "Photograph", "Photograph", "Photograph", "Photograph"), 
#                     x=c(1.5, 1.5, 1.5, 1.5, 1.5, 1.5), 
#                     y = c(0.53, 0.40, 0.6, 0.51, 0.62, 0.58))

stars1b <- data.frame(label=c("*"),
                    Gender=fct_relevel(c("Male"), "Male"),
                    Outcome=c("Arousal"),
                    x=1,
                    y=0.60)

stars1b <- data.frame(label=c("*","**", "*","*"),
                    Gender=fct_relevel(c("Male", "Male", "Male","Male"), "Male"),
                    Outcome=c("Arousal", "Enticement", "Enticement","Valence"),
                    x=c(1, 1, 2, 1),
                    y=c(0.60, 0.65, 0.56, 0.68))


p1 <- pred1 |>
  mutate(Gender = fct_relevel(Gender, "Male", "Female")) |> 
  ggplot(aes(x=StimuliType, y=Proportion)) +
  geom_hline(yintercept=0, color="darkgrey") +
  geom_line(aes(group=Condition, color=Condition), position = position_dodge(width=0.2), alpha=0.8, linewidth=0.4, key_glyph = "path") +
  geom_pointrange(aes(ymin = CI_low, ymax=CI_high, color=Condition), position = position_dodge(width=0.2), size=0.3) +
  geom_text(data=stars1b, aes(x=x, y=y, label=label), hjust=0.5, color="#424242", size=6) +
  geom_rect(data=data.frame(StimuliType = "Individual", Proportion=0.1, Gender=as.factor("Male"), Outcome="Arousal"),
            aes(xmin=0.8, xmax=1.2, ymin=0.35, ymax=0.7), color="#8BC34A", alpha=0, ) +
  geom_rect(data=data.frame(StimuliType = "Individual",Proportion=0.1, Gender=as.factor("Female"), Outcome="Arousal"),
            aes(xmin=0.8, xmax=1.2, ymin=0.2, ymax=0.5), color="#8BC34A", alpha=0) +
  facet_grid(Outcome~Gender, switch="y", scales ="free") +
  scale_y_continuous(limits=c(0, 1), labels=scales::percent) +
  scale_color_manual(values=c("AI-Generated"="#2196F3", "Photograph"="#F44336")) +
  theme_minimal() +
  theme(axis.title.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.y = element_text(size = 8),
        strip.placement = "outside",
        strip.background.x = element_rect(fill=c("lightgrey"), color=NA),
        strip.text.x = element_text(size = 10),
        strip.text.y = element_text(size = 10),
        axis.text.x = element_text(angle=25, hjust=1, vjust=1.1, size=9, color="black"),
        legend.text = element_text(size = 10),
        legend.position = ) +
  labs(color="Images presented as:")


p1

Code
m1 <- glmmTMB::glmmTMB(Arousal ~ Gender / Condition + (Condition | Participant) + (1|Stimulus),data = df, 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))
m2 <- glmmTMB::glmmTMB(Arousal ~ Gender / Condition + (Condition | Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))
m3 <- glmmTMB::glmmTMB(Arousal ~ Gender / Condition  + (Condition | Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True", Feedback_NoFacesAttractive=="True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; non-positive-definite Hessian matrix. See vignette('troubleshooting')
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Code
m4 <- glmmTMB::glmmTMB(Arousal ~ Gender / Condition  + (Condition | Participant) + (1|Stimulus),
                      data=filter(df, ConditionBelief == "True", Feedback_AIMoreAttractive=="True"), 
                      family=glmmTMB::ordbeta(),
                      control = glmmTMB::glmmTMBControl(parallel = 8))
Warning in finalizeTMB(TMBStruc, obj, fit, h, data.tmb.old): Model convergence problem; singular convergence (7). See vignette('troubleshooting'), help('diagnose')
Code
stars2 <- data.frame(label=c("**", "***", "*", "*", "*"),
                    Gender=fct_relevel(c("Male", "Male", "Male", "Female", "Female")),
                    Type=c("All trials", "Believed trials" ,"'AI was more attractive'", "Believed trials", "'No faces were attractive'"),
                    y=c(0.52, 0.56, 0.66, 0.47, 0.39))

pred2 <- rbind(
  estimate_relation(m1) |> 
    mutate(Type = "All trials"),
  estimate_relation(m2) |> 
    mutate(Type = "Believed trials"),
  estimate_relation(m3) |> 
    mutate(Type = "'No faces were attractive'"),
  estimate_relation(m4) |> 
    mutate(Type = "'AI was more attractive'"))

p2 <- pred2 |> 
  mutate(Type = fct_relevel(Type, "All trials", "Believed trials", "'No faces were attractive'", "'AI was more attractive'")) |> 
  ggplot(aes(x=Type, y=Predicted)) +
  geom_hline(yintercept=0, color="darkgrey") +
  geom_line(aes(group=Condition, color=Condition), position = position_dodge(width=0.2), alpha=0.8, linewidth=0.1) +
  geom_bar(stat="identity", aes(fill=Condition), position = position_dodge(width=0.2), width=0.2, alpha=0.6) +
  geom_pointrange(aes(ymin = CI_low, ymax=CI_high, color=Condition), position = position_dodge(width=0.2), size=0.2) +
  geom_rect(data=data.frame(Type="All trials", Predicted=0.1, Gender=as.factor("Male")),
            aes(xmin=0.7, xmax=1.3, ymin=0.35, ymax=0.55), color="#8BC34A", alpha=0) +
  geom_rect(data=data.frame(Type="All trials", Predicted=0.1, Gender=as.factor("Female")),
            aes(xmin=0.7, xmax=1.3, ymin=0.30, ymax=0.48), color="#8BC34A", alpha=0) +
  geom_text(data=stars2, aes(y=y, label=label), hjust=0.5, size=3) +
  facet_grid(~Gender) +
  scale_y_continuous(labels=scales::percent) +
  scale_color_manual(values=c("AI-Generated"="#2196F3", "Photograph"="#F44336")) +
  scale_fill_manual(values=c("AI-Generated"="#2196F3", "Photograph"="#F44336")) +
  labs(y="Arousal",
       tag = "B") +
  theme_minimal() +
  theme(axis.title.x = element_blank(),
        axis.text.x = element_text(angle=25, hjust=1, vjust=1.1, size=9),
        axis.text.y = element_text(size = 8),
        axis.title.y = element_text(size = 10),
        strip.placement = "outside",
        strip.background.x = element_rect(fill=c("lightgrey"), color=NA),
        strip.text.x = element_text(size = 10),
        legend.position = "none")

p2

Code
dfsub$Gender <- as.factor(dfsub$Gender)
dfsub$Gender <- fct_relevel(dfsub$Gender, "Male", "Female")
dfsub$BAIT_Visual = (dfsub$BAIT_ImagesRealistic + (1 - dfsub$BAIT_ImagesIssues) + dfsub$BAIT_ImitatingReality + dfsub$BAIT_EnvironmentReal) / 4


m6 <- glm(Feedback_NoFacesAttractive ~ Gender / BAIT_Visual, 
    data=mutate(dfsub, Feedback_NoFacesAttractive = ifelse(Feedback_NoFacesAttractive =="True", 1, 0)), 
    family="binomial")

results_table(m6)
Parameter Log-Odds SE 95% CI z p
(Intercept) -1.74 1.36 (-4.88, 0.62) -1.28 0.202
Gender (Female) -0.50 1.66 (-3.67, 3.06) -0.30 0.763
Gender (Male) × BAIT Visual -0.56 0.52 (-1.60, 0.50) -1.06 0.289
Gender (Female) × BAIT Visual 0.04 0.33 (-0.59, 0.74) 0.11 0.913

Notes/ Questions

  1. Models for arousal, enticement, and valence had singularity issues when also adding condition as random slope for stimuli
  2. ‘Other’ was removed due to the very small percentage of individuals identifying as such.
  3. ‘Porn’ factor was not computed, instead sexual activity and frequency of watching porn were treated seperate.
  4. Missing final figures and interpretation of belief as influencing emotional ratings of images
  5. The calculations for the BAIt/GAAIS dimensions were based on the validation of the BAIT scale

BAIT_Videos was calculated by averaging participants’ agreement with the statement that current AI algorithms can generate very realistic videos and the inverse of their agreement with the statement that videos generated by AI have obvious problems that make them easy to spot as fake. Higher scores reflect stronger beliefs in the visual realism and technical reliability of AI-generated videos.

BAIT_Visual was computed as the average of four items: belief that AI algorithms can generate very realistic images, the inverse of belief that AI-generated images always contain errors and artifacts, agreement that CGI can perfectly imitate reality, and belief that technology allows the creation of environments that seem just as real as reality. Higher scores capture stronger beliefs in the visual realism and immersive quality of AI-generated and computer-generated content.

BAIT_Text was calculated by averaging agreement with the belief that AI assistants can write texts indistinguishable from those written by humans and the inverse of the belief that AI-written documents usually read differently than human-written ones. Higher scores indicate stronger beliefs in the linguistic realism of AI-generated text.

BAIT_Negative was computed by averaging levels of agreement with the statements “AI is dangerous” and “I am worried about future uses of AI”.This composite reflects participants’ negative attitudes toward AI.

BAIT_Positive was calculated by averaging agreement with the statements “AI is exciting” and “Much of society will benefit from a future full of AI”. This score represents positive attitudes towards AI.