Rationale

The Elaboration Likelihood Model (ELM) states that persuasive messages can influence people’s attitudes in two ways. The first is the central route, requiring more involvement from viewers due to its difficult-to-process nature. The second is the peripheral route, requiring less involvement from viewers and relying more on celebrity endorsements and images. Opinions formed through careful processing of information create an attitude change that endures time and is resistant to alteration. This analysis examines whether the amount of time participants spent viewing high-quality information supporting the legalization of recreational marijuana in Tennessee is associated with whether they personally favored legalization of the drug one month later.

Hypothesis

Minutes spent looking at high-quality persuasive information is associated with the likelihood of favoring the legalization of recreational marijuana for medical purposes in Tennessee.

Variables & method

A total of 200 participants who first reported no strong opinions for or against legalizing recreational marijuana in Tennessee participated in the study. Participants spent 30 minutes looking at a website while an eye tracker recorded their eye behaviors. One month later, participants were asked whether they favored or opposed legalization.

The independent variable was “Minutes”, which measured the amount of time the person spent viewing high-quality persuasive information in favor of legalization. The dependent variable was
“Favor_1”, showing whether participants favored legalization (1) or did not favor legalization (0).

A logistic regression was done to see whether time spent viewing high-quality persuasive information was associated with the likelihood of favoring legalization. Logistic regression was appropriate because the dependent variable was either reported as “1” or “0”.

Results & discussion

The logistic regression curve shows a positive association between the amount of time participants spent viewing high-quality persuasive information and the predicted likelihood of favoring the legalization of recreational marijuana in Tennessee. The logistic regression results indicated that “Minutes” was related to the likelihood of favoring legalization.

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

The results support the hypothesis. People who spent more time watching high-quality persuasive information usually had a higher odds of favoring legalization one month later. This finding is consistent with the Elaboration Likelihood Model (ELM), which states that carefully processing persuasive information may be associated with attitudes that continue over time.

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

Note: The code below will download the data used in the analysis.

# Read the data from the web
FetchedData <- read.csv("https://github.com/drkblake/Data/raw/refs/heads/main/ELM.csv")
# Save the data on your computer
write.csv(FetchedData, "ELM.csv", row.names=FALSE)
# remove the data from the environment
rm (FetchedData)