This article is intended for the purpose of fulfilling a class assignment.
The Marijuana Policy Project’s webpages are designed to present dense, information-heavy arguments for cannabis legalization. According to the Elaboration Likelihood Model (ELM), this kind of content is intended to engage the audience through the central route of persuasion. Central processing requires motivation and ability, but when it occurs, it is more likely to lead to enduring, stable attitude change than quick, peripheral cues. Measuring people’s attitudes not just immediately after exposure but six months later allows us to test whether those central-route effects actually last.
The more time participants spend reading the MPP’s information-dense webpages, the greater the likelihood they will support marijuana legalization six months later.
A logistic regression will model the probability of supporting legalization at six months as a function of minutes spent reading. The expectation is that more minutes engaged with the dense, persuasive content will significantly increase the odds of supporting legalization at follow-up, consistent with central-route processing predicted by ELM.
Dependent Variable (DV): Support for marijuana legalization six months later (binary: 0 = oppose, 1 = support).
Independent Variable (IV): Number of minutes (out of 30) spent reading dense, persuasive information on the MPP website.
The logistic regression showed a positive relationship between minutes spent reading the MPP webpage and support for marijuana legalization at six months. The effect of minutes was statistically significant (p < .05).
The Box–Tidwell test included the IV_log term (estimate = 0.6869), which was not significant, indicating that the assumption of linearity in the logit was met. The inflection point analysis showed that at 14.965 minutes spent on the site, the predicted probability of support reached 0.50.
These results support the hypothesis that more time spent engaging with dense, persuasive information increases the likelihood of supporting legalization over time. The non-significant IV_log term (.6869) confirmed that the logistic model was appropriate. The inflection point suggests a practical threshold: once participants engaged with the material for about 15 minutes, they became more likely to support legalization than to oppose it.
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 |
# ------------------------------
# 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