8  Did Americans trust artificial intelligence?

With the introduction of ChatGPT, artificial intelligence entered many Americans’ lives as a conversation partner. Some derided it as a producer of slop or merely a parrot. Others praised its ability to empathize or declared it sentient. This chapter will examine the foundation of those feelings: Did Americans trust AI?

8.1 Analysis, Visualization and Interpretation

Let’s compare Americans’ trust in artificial intelligence to other targets of trust. I ran a survey experiment with target of trust varied within-subject — meaning we can compare each person’s self-reported trust across all targets.

Code
# The file ai-trust-2023-wide-correlates.csv contains responses from a US representative sample of 501 respondents.
# Download the file from a public Open Science Framework repository at https://osf.io/download/qpdvb/
responses = read_csv("data/ai-trust-2023-wide-correlates.csv")

# Colors for the five targets of trust.
trust_colors <- c(
  "Congress"                           = "#E41A1C",
  "the President"                      = "#377EB8",
  "artificial intelligence algorithms" = "#4DAF4A",
  "the average American"               = "#984EA3",
  "my best friend"                   = "#FF7F00"
)

# Reshape the trust items and calculate descriptive statistics.
visualize_trust_means <- responses %>%
  select(
    trust_ai,
    trust_congress,
    trust_average_american,
    trust_us_president,
    trust_best_friend
  ) %>%
  pivot_longer(
    cols = everything(),
    names_to = "trust_item",
    values_to = "Response"
  ) %>%
  mutate(
    prompt_item = recode(
      trust_item,
      trust_ai               = "artificial intelligence algorithms",
      trust_congress         = "Congress",
      trust_average_american = "the average American",
      trust_us_president     = "the President",
      trust_best_friend      = "my best friend"
    ),
    prompt_item = factor(
      prompt_item,
      levels = c(
        "Congress",
        "the President",
        "artificial intelligence algorithms",
        "the average American",
        "my best friend"
      )
    )
  ) %>%
  group_by(prompt_item) %>%
  summarise(
    n = sum(!is.na(Response)),
    mean_response = mean(Response, na.rm = TRUE),
    standard_deviation = sd(Response, na.rm = TRUE),
    standard_error = standard_deviation / sqrt(n),
    critical_value = qt(.975, df = n - 1),
    ci_l = mean_response - critical_value * standard_error,
    ci_u = mean_response + critical_value * standard_error,
    .groups = "drop"
  )

book_source_caption = paste0("Source: Thinking Machines, Pondering Humans by Dr. Jason Jeffrey Jones")
trust_caption <- paste0(
  "Bars show mean agreement. Error bars show 95% confidence intervals.\n",
  "Responses range from −3 (Strongly disagree) to +3 (Strongly agree).\n",
  book_source_caption
)


visualize_trust_means %>%
  ggplot(
    aes(
      x = prompt_item,
      y = mean_response,
      color = prompt_item,
      fill = prompt_item
    )
  ) +
  geom_col(
    width = 0.75,
    linewidth = 0.4
  ) +
  geom_errorbar(
    aes(
      ymin = ci_l,
      ymax = ci_u
    ),
    color = "black",
    width = 0.2
  ) +
  geom_hline(
    yintercept = 0,
    linewidth = 0.5,
    linetype = "dashed"
  ) +
  scale_x_discrete(
    labels = \(x) stringr::str_wrap(x, width = 14)
  ) +
  scale_y_continuous(
    limits = c(-3, 3),
    breaks = -3:3,
    labels = c(
      "−3\nStrongly\ndisagree",
      "−2",
      "−1",
      "0\nNeither",
      "+1",
      "+2",
      "+3\nStrongly\nagree"
    ),
    expand = expansion(mult = c(0, 0.03))
  ) +
  scale_color_manual(values = trust_colors) +
  scale_fill_manual(values = trust_colors) +
  labs(
    title = "Trust in artificial intelligence and other targets",
    subtitle = "Agreement with “I trust <target> to do the right thing.”",
    x = NULL,
    y = "Mean response",
    caption = trust_caption
  ) +
  coord_flip() +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "none",
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank(),
    plot.caption = element_text(
      size = 10,
      color = "#666666",
      hjust = 1
    )
  )
Figure 8.1: Mean trust across five targets in the 2023 survey experiment. Respondents indicated their agreement with the statement, “I trust <target> to do the right thing.” Error bars show 95% confidence intervals.

As it turned out, Americans’ used their fellows as the center of their trust scale. The average American neither agreed nor disagreed that they trusted the average American to do the right thing. On average, they trusted their best friends much more.

Below the line were artificial intelligence and politicians. Congress (the 118th) was most distrusted. Americans’ wariness toward artificial intelligence matched that toward The President (Biden).

I have worked with this survey experiment format before, and I know it is useful to disaggregate. Below are the full distributions.

Code
# Reshape the five trust items from one column per item to one row
# per respondent-target combination.
trust_long_2023 <- responses %>%
  select(
    trust_ai,
    trust_congress,
    trust_average_american,
    trust_us_president,
    trust_best_friend
  ) %>%
  pivot_longer(
    cols = everything(),
    names_to = "trust_item",
    values_to = "Response"
  ) %>%
  mutate(
    prompt_item = recode(
      trust_item,
      trust_ai               = "artificial intelligence algorithms",
      trust_congress         = "Congress",
      trust_average_american = "the average American",
      trust_us_president     = "the President",
      trust_best_friend      = "my best friend"
    ),
    prompt_item = factor(
      prompt_item,
      levels = c(
        "Congress",
        "the President",
        "artificial intelligence algorithms",
        "the average American",
        "my best friend"
      )
    )
  )


# Calculate the percentage selecting each response for each target.
#
# complete() retains all seven response categories, even if a category
# received no responses for a particular target.
visualize_trust_distributions <- trust_long_2023 %>%
  filter(!is.na(Response)) %>%
  count(prompt_item, Response, name = "n") %>%
  group_by(prompt_item) %>%
  complete(
    Response = -3:3,
    fill = list(n = 0)
  ) %>%
  mutate(
    percent = n / sum(n)
  ) %>%
  ungroup()


trust_distribution_caption <- paste0(
  "Bars show the percentage selecting each response category.\n",
  "Responses range from −3 (Strongly disagree) to +3 (Strongly agree).\n",
  book_source_caption
)


visualize_trust_distributions %>%
  ggplot(
    aes(
      x = Response,
      y = percent,
      fill = prompt_item
    )
  ) +
  geom_col(
    width = 0.85,
    color = "black",
    linewidth = 0.3
  ) +
  geom_vline(
    xintercept = 0,
    linetype = "dashed",
    linewidth = 0.4,
    color = "#555555"
  ) +
  facet_wrap(
    vars(prompt_item),
    nrow = 1,
    labeller = label_wrap_gen(width = 16)
  ) +
  scale_x_continuous(
    breaks = -3:3,
    minor_breaks = NULL,
    labels = c(
      "−3",
      "−2",
      "−1",
      "0",
      "+1",
      "+2",
      "+3"
    ),
    expand = expansion(mult = c(0.03, 0.03))
  ) +
  scale_y_continuous(
    labels = scales::label_percent(accuracy = 1),
    breaks = scales::breaks_width(0.1),
    minor_breaks = NULL,
    expand = expansion(mult = c(0, 0.05))
  ) +
  scale_fill_manual(values = trust_colors) +
  labs(
    title = "Trust in artificial intelligence and other targets",
    subtitle = "Agreement with “I trust <target> to do the right thing.”",
    x = NULL,
    y = "Respondents",
    caption = trust_distribution_caption
  ) +
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "none",
    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank(),
    strip.text = element_text(
      size = 11,
      face = "bold"
    ),
    axis.text.x = element_text(size = 8),
    plot.caption = element_text(
      size = 10,
      color = "#666666",
      hjust = 1
    )
  )
Figure 8.2: Full distributions of trust across five targets in the 2023 survey experiment. Respondents indicated their agreement with the statement, “I trust <target> to do the right thing.”

Here one can inspect subtleties. No matter the target, respondents shied away from strong agreement. The President and the average american had modal, modestly positive trust (+1). Artificial intelligence lacked this mode.

8.1.1 What predicted trust in artificial intelligence?

We can see in Figure 8.2 that American adults were distributed among different levels of trust in AI. Who trusted and who distrusted? Let’s step through cycles of (1) hypothesis (2) test (3) evaluate.

These analyses aim to predict trust in AI. We’ll use the other observations we’ve made about each respondent to predict it.

8.1.1.1 Model 1: Demographic baseline

One has to start somewhere, so let’s begin with available demographics: Sex and Age. Respondents reported their Sex as Female or Male, and this split the sample roughly in half. Age varied from 19 to 80.

How much would knowing a respondents’ Sex and Age tell you about their trust in AI?

Code
# Create one common analysis sample for all nested models.
analysis_sample <- responses %>%
  drop_na(
    trust_ai,
    Age,
    Sex,
    generalized_trust,
    risk_self_report,
    understanding_algorithmic_bias,
    understanding_ai,
    understanding_large_language_models,
    understanding_convolutional_neural_networks,
    trust_congress,
    trust_us_president,
    trust_average_american,
    trust_best_friend
  )
# Prepare the variables for Model 1.
model_1_data <- analysis_sample %>%
  transmute(
    trust_ai,
    age_decades_centered = (Age - mean(Age, na.rm = TRUE)) / 10,
    Sex = factor(
      Sex,
      levels = c("Female", "Male")
    )
  ) %>%
  drop_na()

# Fit Model 1: demographic characteristics.
model_1_demographics <- lm(
  trust_ai ~ age_decades_centered + Sex,
  data = model_1_data
)

# Coefficients, confidence intervals, and model-level statistics.
model_1_coefficients <- broom::tidy(
  model_1_demographics,
  conf.int = TRUE
)

model_1_fit <- broom::glance(model_1_demographics)

model_1_coefficients %>%
  mutate(
    term = recode(
      term,
      `(Intercept)` = "Intercept: average-age woman",
      age_decades_centered = "Age: 10-year increase",
      SexMale = "Men compared with women"
    )
  ) %>%
  select(
    Predictor = term,
    Estimate = estimate,
    `Standard error` = std.error,
    `95% CI lower` = conf.low,
    `95% CI upper` = conf.high,
    `p-value` = p.value
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = "Model 1: Demographic predictors of trust in artificial intelligence."
  )
Model 1: Demographic predictors of trust in artificial intelligence.
Predictor Estimate Standard error 95% CI lower 95% CI upper p-value
Intercept: average-age woman -0.663 0.093 -0.845 -0.480 0.000
Age: 10-year increase -0.004 0.042 -0.086 0.078 0.920
Men compared with women 0.394 0.134 0.131 0.656 0.003
Code
model_1_fit %>%
  transmute(
    N = nobs,
    `` = r.squared,
    `Adjusted R²` = adj.r.squared,
    `Model F` = statistic,
    `Model p-value` = p.value
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable()
N Adjusted R² Model F Model p-value
500 0.017 0.013 4.36 0.013

Age and sex explained only a small portion of the differences in trust in artificial intelligence, (R^2 = .017), adjusted (R^2 = .013), although the demographic model as a whole was statistically distinguishable from an intercept-only model, (F(2,497)=4.36), (p=.013).

Among women of approximately the sample’s average age, 45.7 years, predicted trust in AI was −0.66 on the scale from −3 to +3. Men reported trust scores 0.39 points higher than women, 95% CI [0.13, 0.66], (p=.003). Age contributed essentially no additional information: a ten-year increase in age was associated with a change of only −0.004 points, 95% CI [−0.09, 0.08], (p=.920). Thus, the demographic difference was primarily a difference between men and women, but age and sex together accounted for less than 2% of the observed variation in AI trust.

Overall, demographics provided some information: you can use Sex and Age to do better than just guess the mean for everyone.

8.1.1.2 Model 2: General personal dispositions

Individuals differ in how trusting they are and how much they prefer safety to risk. These are our next candidates for predictors: generalized trust and general willingness to take risks. I borrow existing survey items to measure each, which I have discussed more fully in Section 3.3.

Code
# Prepare variables for Model 2 using the same analysis sample
# used for Model 1.
model_2_data <- analysis_sample %>%
  transmute(
    trust_ai,

    age_decades_centered =
      (Age - mean(Age)) / 10,

    Sex = factor(
      Sex,
      levels = c("Female", "Male")
    ),

    generalized_trust = factor(
      generalized_trust,
      levels = c("Careful", "Trusting")
    ),

    # Rename the raw survey variable using the terminology
    # adopted in this chapter.
    risk_willingness = risk_self_report,

    # Center at the sample mean while retaining the original
    # one-point unit of measurement.
    risk_willingness_centered =
      risk_willingness - mean(risk_willingness)
  )


# Fit Model 2.
model_2_dispositions <- lm(
  trust_ai ~
    age_decades_centered +
    Sex +
    generalized_trust +
    risk_willingness_centered,
  data = model_2_data
)


# Extract Model 2 coefficients and confidence intervals.
model_2_coefficients <- broom::tidy(
  model_2_dispositions,
  conf.int = TRUE
)

model_2_fit <- broom::glance(
  model_2_dispositions
)


# Display the coefficients.
model_2_coefficients %>%
  mutate(
    term = recode(
      term,
      `(Intercept)` = paste(
        "Intercept: average-age, average-risk woman",
        "in the Careful group"
      ),
      age_decades_centered =
        "Age: 10-year increase",
      SexMale =
        "Men compared with women",
      generalized_trustTrusting =
        "Trusting compared with Careful",
      risk_willingness_centered =
        "Willingness to take risks: one-point increase"
    )
  ) %>%
  select(
    Predictor = term,
    Estimate = estimate,
    `Standard error` = std.error,
    `95% CI lower` = conf.low,
    `95% CI upper` = conf.high,
    `p-value` = p.value
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Model 2: Demographics, generalized trust, and",
      "willingness to take risks as predictors of trust",
      "in artificial intelligence."
    )
  )
Model 2: Demographics, generalized trust, and willingness to take risks as predictors of trust in artificial intelligence.
Predictor Estimate Standard error 95% CI lower 95% CI upper p-value
Intercept: average-age, average-risk woman in the Careful group -0.739 0.106 -0.948 -0.530 0.000
Age: 10-year increase -0.005 0.042 -0.087 0.077 0.908
Men compared with women 0.305 0.134 0.043 0.568 0.023
Trusting compared with Careful 0.285 0.135 0.019 0.550 0.036
Willingness to take risks: one-point increase 0.105 0.031 0.045 0.164 0.001
Code
# Compare the fit of Models 1 and 2.
model_fit_comparison <- tibble(
  Model = c(
    "Model 1: Demographics",
    "Model 2: General personal dispositions"
  ),
  N = c(
    model_1_fit$nobs,
    model_2_fit$nobs
  ),
  `` = c(
    model_1_fit$r.squared,
    model_2_fit$r.squared
  ),
  `Adjusted R²` = c(
    model_1_fit$adj.r.squared,
    model_2_fit$adj.r.squared
  ),
  `Change in R²` = c(
    NA_real_,
    model_2_fit$r.squared - model_1_fit$r.squared
  )
)

model_fit_comparison %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = "Model fit before and after adding general personal dispositions."
  )
Model fit before and after adding general personal dispositions.
Model N Adjusted R² Change in R²
Model 1: Demographics 500 0.017 0.013 NA
Model 2: General personal dispositions 500 0.048 0.040 0.031
Code
# Test whether generalized trust and willingness to take risks
# improve the model as a block.
model_2_block_test <- anova(
  model_1_demographics,
  model_2_dispositions
)

model_2_block_test %>%
  broom::tidy() %>%
  slice(2) %>%
  transmute(
    Comparison = "Model 1 versus Model 2",
    `Added parameters` = df,
    `Residual df` = df.residual,
    F = statistic,
    `p-value` = p.value
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Nested-model test for generalized trust and",
      "willingness to take risks."
    )
  )
Nested-model test for generalized trust and willingness to take risks.
Comparison Added parameters Residual df F p-value
Model 1 versus Model 2 2 495 7.96 0

Adding generalized trust and general willingness to take risks improved the model beyond age and sex, (F(2,495)=7.96), (p<.001). The proportion of variation accounted for increased from (R^2=.017) to (R^2=.048), a gain of 3.1 percentage points; the adjusted (R^2) for Model 2 was .040.

In the model the intercept describes an average-age woman with average willingness to take risks who said that one cannot be too careful in dealing with people. Her predicted score was −0.74 was on the scale. Respondents who instead said that most people can generally be trusted scored 0.28 points higher in AI trust, 95% CI [0.02, 0.55], (p=.036). Each one-point increase in willingness to take risks was associated with a 0.10-point increase in AI trust, 95% CI [0.04, 0.16], (p<.001). The estimated difference between men and women decreased from 0.39 to 0.31 points after adding the two dispositions, but remained statistically reliable, (p=.023); age remained unrelated to AI trust.

Generalized trust and willingness to take risks therefore provided additional information, although the model still left more than 95% of the individual variation in AI trust unaccounted for.

8.1.1.3 Model 3: Perceived understanding of AI

Imagine a person you are deeply familiar with. You may trust them a lot, because you know them well. But that does not necessarily follow. It is absolutely possible to distrust someone you know very well, because you know their ineptness, unreliability and other shortcomings.

Did American adults who knew AI well trust it more or less? We will use their reported understanding of AI related concepts as a proxy and examine that question next.

Code
# Prepare variables for Model 3 using the common analysis sample.
model_3_data <- analysis_sample %>%
  transmute(
    trust_ai,

    age_decades_centered =
      (Age - mean(Age)) / 10,

    Sex = factor(
      Sex,
      levels = c("Female", "Male")
    ),

    generalized_trust = factor(
      generalized_trust,
      levels = c("Careful", "Trusting")
    ),

    risk_willingness = risk_self_report,

    risk_willingness_centered =
      risk_willingness - mean(risk_willingness),

    understanding_ai,
    understanding_algorithmic_bias,
    understanding_large_language_models,
    understanding_convolutional_neural_networks
  )


# Fit Model 3 by adding self-reported understanding
# of AI-related concepts.
model_3_understanding <- lm(
  trust_ai ~
    age_decades_centered +
    Sex +
    generalized_trust +
    risk_willingness_centered +
    understanding_ai +
    understanding_algorithmic_bias +
    understanding_large_language_models +
    understanding_convolutional_neural_networks,
  data = model_3_data
)


# Extract Model 3 coefficients and confidence intervals.
model_3_coefficients <- broom::tidy(
  model_3_understanding,
  conf.int = TRUE
)

model_3_fit <- broom::glance(
  model_3_understanding
)


# Display the coefficients.
model_3_coefficients %>%
  mutate(
    term = recode(
      term,
      `(Intercept)` = paste(
        "Intercept: average-age, average-risk woman",
        "in the Careful group with neutral understanding responses"
      ),
      age_decades_centered =
        "Age: 10-year increase",
      SexMale =
        "Men compared with women",
      generalized_trustTrusting =
        "Trusting compared with Careful",
      risk_willingness_centered =
        "Willingness to take risks: one-point increase",
      understanding_ai =
        "Understanding artificial intelligence",
      understanding_algorithmic_bias =
        "Understanding algorithmic bias",
      understanding_large_language_models =
        "Understanding large language models",
      understanding_convolutional_neural_networks =
        "Understanding convolutional neural networks"
    )
  ) %>%
  select(
    Predictor = term,
    Estimate = estimate,
    `Standard error` = std.error,
    `95% CI lower` = conf.low,
    `95% CI upper` = conf.high,
    `p-value` = p.value
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Model 3: Demographics, general personal dispositions,",
      "and self-reported understanding as predictors of trust",
      "in artificial intelligence."
    )
  )
Model 3: Demographics, general personal dispositions, and self-reported understanding as predictors of trust in artificial intelligence.
Predictor Estimate Standard error 95% CI lower 95% CI upper p-value
Intercept: average-age, average-risk woman in the Careful group with neutral understanding responses -0.496 0.145 -0.782 -0.211 0.001
Age: 10-year increase 0.004 0.042 -0.078 0.086 0.928
Men compared with women 0.259 0.132 0.000 0.518 0.050
Trusting compared with Careful 0.347 0.132 0.087 0.607 0.009
Willingness to take risks: one-point increase 0.072 0.031 0.012 0.132 0.020
Understanding artificial intelligence 0.224 0.061 0.104 0.344 0.000
Understanding algorithmic bias -0.167 0.057 -0.279 -0.055 0.003
Understanding large language models 0.082 0.067 -0.050 0.213 0.223
Understanding convolutional neural networks 0.091 0.067 -0.041 0.222 0.176
Code
# Compare model fit across Models 1 through 3.
model_fit_comparison <- tibble(
  Model = c(
    "Model 1: Demographics",
    "Model 2: General personal dispositions",
    "Model 3: Self-reported understanding"
  ),
  N = c(
    model_1_fit$nobs,
    model_2_fit$nobs,
    model_3_fit$nobs
  ),
  `` = c(
    model_1_fit$r.squared,
    model_2_fit$r.squared,
    model_3_fit$r.squared
  ),
  `Adjusted R²` = c(
    model_1_fit$adj.r.squared,
    model_2_fit$adj.r.squared,
    model_3_fit$adj.r.squared
  ),
  `Change in R²` = c(
    NA_real_,
    model_2_fit$r.squared - model_1_fit$r.squared,
    model_3_fit$r.squared - model_2_fit$r.squared
  )
)

model_fit_comparison %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Model fit before and after adding",
      "self-reported understanding."
    )
  )
Model fit before and after adding self-reported understanding.
Model N Adjusted R² Change in R²
Model 1: Demographics 500 0.017 0.013 NA
Model 2: General personal dispositions 500 0.048 0.040 0.031
Model 3: Self-reported understanding 500 0.106 0.091 0.058
Code
# Test whether the four understanding items improve
# the model as a block.
model_3_block_test <- anova(
  model_2_dispositions,
  model_3_understanding
)

model_3_block_test %>%
  as.data.frame() %>%
  slice(2) %>%
  transmute(
    Comparison = "Model 2 versus Model 3",
    `Added parameters` = Df,
    `Residual df` = Res.Df,
    F = F,
    `p-value` = `Pr(>F)`
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Nested-model test for the block of",
      "self-reported understanding items."
    )
  )
Nested-model test for the block of self-reported understanding items.
Comparison Added parameters Residual df F p-value
2 Model 2 versus Model 3 4 491 7.913 0

Adding respondents’ self-reported understanding of four AI-related concepts substantially improved the model, (F(4,491)=7.91), (p<.001). The proportion of variation accounted for increased from (R^2=.048) in Model 2 to (R^2=.106) in Model 3, a gain of 5.8 percentage points; the adjusted (R^2) for the full model was .091.

Holding the other predictors constant, each one-point increase in reported understanding of artificial intelligence was associated with a 0.22-point increase in trust in AI, 95% CI [0.10, 0.34], (p<.001). In contrast, greater reported understanding of algorithmic bias was associated with 0.17 points less trust, 95% CI [−0.28, −0.06], (p=.003). Reported understanding of large language models and convolutional neural networks had positive but statistically unreliable coefficients. Generalized trust and*willingness to take risks remained associated with AI trust, while the estimated difference between men and women decreased to 0.26 points and was no longer clearly distinguishable from zero, (p=.050). Age again contributed essentially no information.

Overall, perceived understanding added meaningful predictive information. More familiarity with AI was associated with more trust, with the interesting exception of algorithmic bias.

8.1.1.4 Model 4: Wider trust profile

Individuals trusted AI more if they reported higher generalized trust. That implies that Americans who trust the average American should also trust AI more. Could that be true? Let’s find out if trust levels correlated, and thus each person’s profile of trust predicted their AI trust.

Code
# Prepare variables for Model 4 using the common analysis sample.
model_4_data <- analysis_sample %>%
  transmute(
    trust_ai,

    age_decades_centered =
      (Age - mean(Age)) / 10,

    Sex = factor(
      Sex,
      levels = c("Female", "Male")
    ),

    generalized_trust = factor(
      generalized_trust,
      levels = c("Careful", "Trusting")
    ),

    risk_willingness = risk_self_report,

    risk_willingness_centered =
      risk_willingness - mean(risk_willingness),

    understanding_ai,
    understanding_algorithmic_bias,
    understanding_large_language_models,
    understanding_convolutional_neural_networks,

    trust_congress,
    trust_us_president,
    trust_average_american,
    trust_best_friend
  )


# Fit Model 4 by adding respondents' trust in the other four targets.
model_4_wider_trust <- lm(
  trust_ai ~
    age_decades_centered +
    Sex +
    generalized_trust +
    risk_willingness_centered +
    understanding_ai +
    understanding_algorithmic_bias +
    understanding_large_language_models +
    understanding_convolutional_neural_networks +
    trust_congress +
    trust_us_president +
    trust_average_american +
    trust_best_friend,
  data = model_4_data
)


# Extract Model 4 coefficients and model-fit statistics.
model_4_coefficients <- broom::tidy(
  model_4_wider_trust,
  conf.int = TRUE
)

model_4_fit <- broom::glance(
  model_4_wider_trust
)


# Display the coefficients.
model_4_coefficients %>%
  mutate(
    term = recode(
      term,
      `(Intercept)` = paste(
        "Intercept: average-age, average-risk woman in the Careful",
        "group with neutral understanding and trust responses"
      ),
      age_decades_centered =
        "Age: 10-year increase",
      SexMale =
        "Men compared with women",
      generalized_trustTrusting =
        "Trusting compared with Careful",
      risk_willingness_centered =
        "Willingness to take risks: one-point increase",
      understanding_ai =
        "Understanding artificial intelligence",
      understanding_algorithmic_bias =
        "Understanding algorithmic bias",
      understanding_large_language_models =
        "Understanding large language models",
      understanding_convolutional_neural_networks =
        "Understanding convolutional neural networks",
      trust_congress =
        "Trust in Congress",
      trust_us_president =
        "Trust in the President",
      trust_average_american =
        "Trust in the average American",
      trust_best_friend =
        "Trust in my best friend"
    )
  ) %>%
  select(
    Predictor = term,
    Estimate = estimate,
    `Standard error` = std.error,
    `95% CI lower` = conf.low,
    `95% CI upper` = conf.high,
    `p-value` = p.value
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Model 4: Demographics, general personal dispositions,",
      "self-reported understanding, and trust in other targets",
      "as predictors of trust in artificial intelligence."
    )
  )
Model 4: Demographics, general personal dispositions, self-reported understanding, and trust in other targets as predictors of trust in artificial intelligence.
Predictor Estimate Standard error 95% CI lower 95% CI upper p-value
Intercept: average-age, average-risk woman in the Careful group with neutral understanding and trust responses -0.196 0.162 -0.515 0.122 0.227
Age: 10-year increase -0.072 0.038 -0.147 0.004 0.062
Men compared with women 0.300 0.117 0.070 0.531 0.011
Trusting compared with Careful -0.180 0.133 -0.441 0.081 0.175
Willingness to take risks: one-point increase 0.041 0.027 -0.013 0.095 0.134
Understanding artificial intelligence 0.172 0.054 0.065 0.279 0.002
Understanding algorithmic bias -0.136 0.051 -0.236 -0.035 0.008
Understanding large language models 0.064 0.059 -0.052 0.181 0.280
Understanding convolutional neural networks 0.025 0.061 -0.095 0.144 0.681
Trust in Congress 0.258 0.054 0.152 0.365 0.000
Trust in the President 0.162 0.044 0.074 0.249 0.000
Trust in the average American 0.150 0.053 0.045 0.254 0.005
Trust in my best friend 0.081 0.059 -0.035 0.198 0.171
Code
# Compare model fit across Models 1 through 4.
model_fit_comparison <- tibble(
  Model = c(
    "Model 1: Demographics",
    "Model 2: General personal dispositions",
    "Model 3: Self-reported understanding",
    "Model 4: Wider trust profile"
  ),
  N = c(
    model_1_fit$nobs,
    model_2_fit$nobs,
    model_3_fit$nobs,
    model_4_fit$nobs
  ),
  `` = c(
    model_1_fit$r.squared,
    model_2_fit$r.squared,
    model_3_fit$r.squared,
    model_4_fit$r.squared
  ),
  `Adjusted R²` = c(
    model_1_fit$adj.r.squared,
    model_2_fit$adj.r.squared,
    model_3_fit$adj.r.squared,
    model_4_fit$adj.r.squared
  ),
  `Change in R²` = c(
    NA_real_,
    model_2_fit$r.squared - model_1_fit$r.squared,
    model_3_fit$r.squared - model_2_fit$r.squared,
    model_4_fit$r.squared - model_3_fit$r.squared
  )
)

model_fit_comparison %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Model fit before and after adding respondents'",
      "wider trust profiles."
    )
  )
Model fit before and after adding respondents’ wider trust profiles.
Model N Adjusted R² Change in R²
Model 1: Demographics 500 0.017 0.013 NA
Model 2: General personal dispositions 500 0.048 0.040 0.031
Model 3: Self-reported understanding 500 0.106 0.091 0.058
Model 4: Wider trust profile 500 0.301 0.284 0.196
Code
# Test whether trust in the other four targets improves
# the model as a block.
model_4_block_test <- anova(
  model_3_understanding,
  model_4_wider_trust
)

model_4_block_test %>%
  as.data.frame() %>%
  slice(2) %>%
  transmute(
    Comparison = "Model 3 versus Model 4",
    `Added parameters` = Df,
    `Residual df` = Res.Df,
    F = F,
    `p-value` = `Pr(>F)`
  ) %>%
  mutate(
    across(
      where(is.numeric),
      \(x) round(x, 3)
    )
  ) %>%
  knitr::kable(
    caption = paste(
      "Nested-model test for trust in Congress, the President,",
      "the average American, and respondents' best friends."
    )
  )
Nested-model test for trust in Congress, the President, the average American, and respondents’ best friends.
Comparison Added parameters Residual df F p-value
2 Model 3 versus Model 4 4 487 34.109 0

Adding respondents’ trust in the four other targets produced the largest improvement in the nested-model sequence, (F(4,487)=34.11), (p<.001). The proportion of variation accounted for increased from (R^2=.106) in Model 3 to (R^2=.301) in Model 4, a gain of 19.6 percentage points; the adjusted (R^2) for the full model was .284.

Holding the other measured characteristics constant, each one-point increase in trust in Congress was associated with a 0.26-point increase in trust in artificial intelligence, 95% CI [0.15, 0.36], (p<.001). Trust in the President and trust in the average American were also independently associated with AI trust, with coefficients of 0.16 and 0.15, respectively. Trust in one’s best friend was positively associated with AI trust, but its estimate was smaller and statistically uncertain.

The addition of these closely matched trust items changed the earlier results in revealing ways. Generalized trust, previously a positive predictor, no longer contributed independent information and its coefficient reversed direction, (b=-0.18), (p=.175). Willingness to take risks also became smaller and statistically uncertain, (b=0.04), (p=.134). In contrast, self-reported understanding of artificial intelligence remained positively associated with AI trust, (b=0.17), (p=.002), while understanding of algorithmic bias remained negatively associated with it, (b=-0.14), (p=.008). Men reported approximately 0.30 points more trust in AI than women after adjustment, (p=.011).

Overall, trust in AI was strongly embedded in respondents’ wider trust profiles, but perceived understanding of AI and algorithmic bias continued to distinguish AI trust from a general tendency to trust other targets.

TODO a figure with the predictors as dot and whisker.

8.1.2 Opposition and Support for AI Development

TODO what about support? Pointer to later chapter. Quick analysis of full model 4 on support.

8.2 Survey Items, Respondents and Costs

8.2.1 Survey Items

The intent of these surveys was to contrast Americans’ trust in people and institutions to their trust in artificial intelligence.

Five items measured trust. On a seven-point scale, respondents were asked how much they agreed:

  1. I trust artificial intelligence algorithms to do the right thing.
  2. I trust Congress to do the right thing.
  3. I trust the average American to do the right thing.
  4. I trust the President to do the right thing.
  5. I trust my best friend to do the right thing.

The items were exactly the same except the target of trust. The order of targets was randomly permuted for each respondent. All respondents were asked about every target. Thus, the protocol was a within-subject survey experiment. With this design, we can draw strong inferences about differences in trust.

One item measured AI Support.

  • How much do you oppose or support the development of Artificial Intelligence?

Other items measured generalized trust and risk preference:

  • Generally speaking, would you say that most people can be trusted or that you can’t be too careful in dealing with people?
  • How do you see yourself: are you generally a person who is fully prepared to take risks or do you try to avoid taking risks? Please choose a number, where the value 0 means: ‘not at all willing to take risks’ and the value 10 means: ‘very willing to take risks’.

Included in the survey were TODO items intended to measure how familiar respondents were with computer technology generally and artificial intelligence specifically. Respondents were asked how much they agreed with each statement below. It was not expected that many (or any) respondents actually had a full understanding of any technology — the level of agreement was used as a proxy measure for their familiarity and experience.

  • I have a full understanding of algorithmic bias.
  • I have a full understanding of artificial intelligence.
  • I have a full understanding of large language models.
  • I have a full understanding of convolutional neural networks.
  • I have a full understanding of email.
  • I have a full understanding of phishing.
  • I have a full understanding of search engine optimization.
  • I have a full understanding of wireless routers.

8.2.2 Respondents

TODO

8.2.3 Costs

TODO

8.3 Open Data and Code

Data for every chapter in this book can be found at the Thinking Machines, Pondering Humans data repository. R code for analysis and visualization is embedded above (some formats) or available at TODO GITHUB/ZENODO.

8.4 Summary and What’s Next

TODO

What distinguishes Americans who trusted artificial intelligence from those who did not? Was AI trust associated with broad personal dispositions, with perceived understanding of AI, with demographic differences, or simply with a general tendency to trust other people and institutions?