The Elaboration Likelihood Model of Persuasion is a theory that explains how people’s attitudes toward certain topics can potentially change based on how attentive they are to that topic. That change stems from one of two cognitive processes: the central route, which focuses on high quality arguments and enduring attitude change, and the peripheral route, which focuses on cue-based thinking and short-term attitude change.
The theory argues that if a person wants to and is able to understand a persuasive message given to them, they are more willing to change their long-term attitude on a certain topic. Specifically, if an individual consumes a certain amount of time of “high-quality” persuasive information on legalizing marijuana usage, they may experience a long-term change in their attitude towards legalizing marijuana.
An individual’s time spent looking at “high-quality” persuasive information on legalizing marijuana use is associated with a positive attitude change.
200 research participants volunteered to spend 30 minutes browsing a website for a fictional organization advocating to legalize marijuana use in Tennessee. All participants indicated in a prior questionnaire that they had no strong opinions for or against marijuana use. The eye tracker recorded how much time each participant spent on viewing “high-quality” persuasive information in favor of legalizing recreational marijuana, such as medical studies and statistics, rather than peripheral cues, like celebrity endorsements and images. A month after the experiment, all participants were asked whether they favored or opposed legalizing recreational marijuana use for medicinal purposes.
The dependent variable is a categorical measure of whether the participants either favored (1) or opposed (0) legalizing marijuana use. Participants who declined to answer or were undecided were also labeled as 0. The independent variable is a continuous measure of the number of minutes participants spent viewing “high-quality” persuasive information on the website.
A logistic regression was used to test the probability of participants favoring legalizing marijuana use based on the number of minutes they viewed “high-quality” persuasive information and whether that relationship is statistically significant. A Box-Tidwell test was used to ensure the data met a key assumption for the regression.
Below is a graph that shows the results of the experiment. The logistic regression results table shows that the relationship is statistically significant and the odds ratio. The Box-Tidwell test shows that there is no violation of the assumption.
| 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 |
The results support the hypothesis. The odds of favoring legalizing marijuana use multiplied by 1.167 for every minute a participant viewed “high-quality” persuasive information. This ratio indicates a positive relationship between the two variables. Particularly, participants who viewed “high-quality” persuasive information for at least 15 minutes were more likely to support the legalization of marijuana in Tennessee.
Below is the code used to conduct the analysis.
# ------------------------------
# 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