Rationale

The Elaboration Likelihood Model (ELM) is all about how people process persuasive messages. It says there are two main ways this happens: through the central route or the peripheral route. The central route is when someone really focuses on the actual arguments such as the logic, the facts, the evidence, which tends to lead to longer-lasting attitude changes. The peripheral route is more about quick, surface-level stuff like who’s saying it, how it looks, or how it makes you feel, which usually fades faster.

In this study, eye-tracking tech gives us a way to see how much people actually pay attention to those central-route arguments. Basically, if someone spends more time reading the strong, “high quality” info on the site, the ELM would say they’re more likely to process it deeply, and that means their opinion might stick around longer.

Hypothesis

People who spend more time looking at the strong, fact-based info about legalizing recreational marijuana will be more likely to support legalization a month later.

Simply put: the more time they spend really engaging with the solid arguments, the more likely they are to change their mind in a lasting way.

Variables & method

Independent variable (IV): Minutes - how long someone spent looking at the “high quality” persuasive info. (Continuous)

Dependent variable (DV): Favor_1 - whether they said they favored (1) or opposed (0) legalizing recreational marijuana a month later. (binary)

Method:

I ran a logistic regression to see if the amount of time people spent looking at high-quality persuasive information predicted whether they later supported legalizing recreational marijuana. Since the outcome variable only has two options (favor or oppose), logistic regression made sense here.

Using a scatterplot with a curved regression line to show the pattern between viewing time and support. I also checked if the relationship between the predictor and the log odds was roughly linear. I also calculated the inflection point, which basically shows us the number of minutes where the model predicts a 50/50 chance of supporting legalization.

Results & discussion

The scatterplot showed a general upward trend, meaning that as people spent more time looking at high-quality persuasive info, they were more likely to support legalization later on.

The logistic regression confirmed this. The coefficient for Minutes was positive, and the p-value showed that the relationship probably wasn’t due to chance. In other words, the more time participants spent with the strong arguments, the higher their odds of favoring legalization a month later.

Results also suggested that the model fit fine there wasn’t any clear violation of the linearity assumption. The inflection point gave an idea of when participants were equally likely to favor or oppose legalization, showing the point where deeper engagement started to make a real difference.

Overall, the results supported my hypothesis and fit what the Elaboration Likelihood Model would predict: people who actually took time to process the stronger, logic-based arguments were more likely to hold onto that attitude change over time.

Logistic Regression Results
Odds Ratios with 95% Confidence Intervals
term Odds_Ratio CI_Lower CI_Upper P_Value
(Intercept) 0.099 0.044 0.205 0.0000
IV 1.167 1.116 1.227 0.0000
Linearity of the Logit Test (Box-Tidwell)
Interaction term indicates violation if significant
term Estimate Std_Error P_Value
(Intercept) −2.566 1.100 0.0196
IV 0.262 0.290 0.3657
IV_log −0.032 0.078 0.6869
Inflection Point of Logistic Curve
Value of IV where predicted probability = 0.50
Probability Inflection_Point
0.5 14.965

Code:

# ------------------------------
# Install and load required packages
# ------------------------------
if (!require("tidyverse")) install.packages("tidyverse")
if (!require("gt")) install.packages("gt")
if (!require("gtExtras")) install.packages("gtExtras")
if (!require("plotly")) install.packages("plotly")

library(ggplot2)
library(dplyr)
library(gt)
library(gtExtras)
library(plotly)


# ------------------------------
# Read the data
# ------------------------------
mydata <- read.csv("ELM.csv") # <-- EDIT filename

# ################################################
# # (Optional) Remove specific case(es)s by row number
# ################################################
# # Example: remove rows 10 and 25
# rows_to_remove <- c(10, 25) # Edit and uncomment this line
# mydata <- mydata[-rows_to_remove, ] # Uncomment this line

# Specify dependent (DV) and independent (IV) variables
mydata$DV <- mydata$Favor_1   # <-- EDIT DV column
mydata$IV <- mydata$Minutes   # <-- EDIT IV column

# Ensure DV is binary numeric (0/1)
mydata$DV <- as.numeric(as.character(mydata$DV))


# ------------------------------
# Logistic regression plot 
# ------------------------------
logit_plot <- ggplot(mydata, aes(x = IV, y = DV)) +
  geom_point(alpha = 0.5) +   # scatterplot of observed data
  geom_smooth(method = "glm",
              method.args = list(family = "binomial"),
              se = FALSE,
              color = "#1f78b4") +
  labs(title = "Logistic Regression Curve",
       x = "Independent Variable (IV)",
       y = "Dependent Variable (DV)")

logit_plotly <- ggplotly(logit_plot)


# ------------------------------
# Run logistic regression
# ------------------------------
options(scipen = 999)
log.ed <- glm(DV ~ IV, data = mydata, family = "binomial")

# Extract coefficients and odds ratios
results <- broom::tidy(log.ed, conf.int = TRUE, exponentiate = TRUE) %>%
  select(term, estimate, conf.low, conf.high, p.value) %>%
  rename(Odds_Ratio = estimate,
         CI_Lower = conf.low,
         CI_Upper = conf.high,
         P_Value = p.value)

# Display results as a nice gt table
results_table <- results %>%
  gt() %>%
  fmt_number(columns = c(Odds_Ratio, CI_Lower, CI_Upper), decimals = 3) %>%
  fmt_number(columns = P_Value, decimals = 4) %>%
  tab_header(
    title = "Logistic Regression Results",
    subtitle = "Odds Ratios with 95% Confidence Intervals"
  )


# ------------------------------
# Check linearity of the logit (Box-Tidwell test)
# ------------------------------
# (Assumes IV > 0; shift IV if needed)
mydata$IV_log <- mydata$IV * log(mydata$IV)
linearity_test <- glm(DV ~ IV + IV_log, data = mydata, family = "binomial")

linearity_results <- broom::tidy(linearity_test) %>%
  select(term, estimate, std.error, p.value) %>%
  rename(Estimate = estimate,
         Std_Error = std.error,
         P_Value = p.value)

linearity_table <- linearity_results %>%
  gt() %>%
  fmt_number(columns = c(Estimate, Std_Error), decimals = 3) %>%
  fmt_number(columns = P_Value, decimals = 4) %>%
  tab_header(
    title = "Linearity of the Logit Test (Box-Tidwell)",
    subtitle = "Interaction term indicates violation if significant"
  )


# ------------------------------
# Calculate the inflection point (p = .50)
# ------------------------------
p <- 0.50
Inflection_point <- (log(p/(1-p)) - coef(log.ed)[1]) / coef(log.ed)[2]

inflection_table <- tibble(
  Probability = 0.5,
  Inflection_Point = Inflection_point
) %>%
  gt() %>%
  fmt_number(columns = Inflection_Point, decimals = 3) %>%
  tab_header(
    title = "Inflection Point of Logistic Curve",
    subtitle = "Value of IV where predicted probability = 0.50"
  )


# ------------------------------
# Outputs
# ------------------------------
# Interactive plot
logit_plotly

# Tables
results_table
linearity_table
inflection_table