## Loading required package: tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Loading required package: gt
##
## Loading required package: gtExtras
##
## Loading required package: plotly
##
##
## Attaching package: 'plotly'
##
##
## The following object is masked from 'package:ggplot2':
##
## last_plot
##
##
## The following object is masked from 'package:stats':
##
## filter
##
##
## The following object is masked from 'package:graphics':
##
## layout
##
##
## `geom_smooth()` using formula = 'y ~ x'
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 |
We just went over the elaboration likelihood model, which talks about persuasion and information. This model discusses the central and peripheral routes to thinking among the public. We learned that the central route tends to be more enduring than peripheral.
At least 200 research participants were asked to spend 30 minutes looking at a website, advocating legalizing recreational marijuana for medical use in Tennessee. The participants looked at the website — with celebrity information and research papers.
The Tennessee legislature has fought for years over whether to legalize medical marijuana, much less recreational marijuana. Medical marijuana has failed every time it has come up in the legislature.
The study participants were asked to look for up to half an hour. None of the participants had a strong opinion either way before participating in the study.
Then later, all 200 research participants were contacted and asked whether they favored or opposed legalizing recreational marijuana use for medical purposes.
In saying that, I hypothesize that the more minutes looking at legitimate information versus surface-level the more likely they are to want to see marijuana legalized in Tennessee for medical use.
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 |
In conclusion, the logistic regression line showed that the more someone looked at this website for the study, the more likely they were to believe medical marijuana should be legal in Tennessee.
Here is the code if you’re wanting to run your own table:
# ------------------------------
# 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