Participants who did not have a strong opinion about legalizing recreational marijuana looked at a website that argued for legalization in Tennessee. An eye tracker recorded how long they focused on the arguments instead of other parts of the website. A month later, they were asked if they favored legalization. If the central route leads to an opinion that lasts, those who spent more time looking at the arguments should be more likely to favor legalization.
The time participants spent looking at high-quality arguments could be related to favoring the legalization of recreational marijuana in Tennessee.
Minutes is the continuous independent variable. Favor_1 is the dependent variable. Participants who favored legalization a month later were coded 1. Everyone else was coded 0. I used logistic regression because Favor_1 has two categories, while Minutes is continuous.
| 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 |
Looking at the curve, the chance of favoring legalization goes up as the number of minutes goes up. The odds ratio for Minutes is 1.167 and the p-value is below .001, supporting my hypothesis. The confidence interval of 1.116 to 1.227 also stays above 1. The Box-Tidwell p-value is about .69, so there was no problem with the linearity assumption. At about 15 minutes, the chance of favoring legalization reaches 50 percent. The eye tracker only shows how long participants looked at the arguments. It did not measure how long they looked at the other parts of the website. It also does not tell what they were thinking while looking at the arguments, so I can’t say the time caused their opinion.
# ------------------------------
# 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