Nothing
params <-
list(EVAL = TRUE)
## ----setup, message=FALSE, warning=FALSE--------------------------------------
library(dplyr)
library(tidyr)
library(ggplot2)
library(purrr)
library(broom)
library(gganimate)
library(cowplot)
library(stringr)
library(multiverse)
## ----include=FALSE------------------------------------------------------------
M = multiverse()
## ----chunk-setup, include=FALSE-----------------------------------------------
knitr::opts_chunk$set(
echo = TRUE,
eval = if (isTRUE(exists("params"))) params$EVAL else FALSE,
fig.width = 6,
fig.height = 4
)
## ----data---------------------------------------------------------------------
data("durante")
data.raw.study2 <- durante |>
mutate(
Abortion = abs(7 - Abortion) + 1,
StemCell = abs(7 - StemCell) + 1,
Marijuana = abs(7 - Marijuana) + 1,
RichTax = abs(7 - RichTax) + 1,
StLiving = abs(7 - StLiving) + 1,
Profit = abs(7 - Profit) + 1,
FiscConsComp = FreeMarket + PrivSocialSec + RichTax + StLiving + Profit,
SocConsComp = Marriage + RestrictAbortion + Abortion + StemCell + Marijuana
)
## ----initialise-multiverse----------------------------------------------------
M = multiverse()
inside(M, {
df <- data.raw.study2 |>
mutate( ComputedCycleLength = StartDateofLastPeriod - StartDateofPeriodBeforeLast ) |>
dplyr::filter( branch(cycle_length,
"cl_option1" ~ TRUE,
"cl_option2" ~ ComputedCycleLength > 25 & ComputedCycleLength < 35,
"cl_option3" ~ ReportedCycleLength > 25 & ReportedCycleLength < 35
)) |>
dplyr::filter( branch(certainty,
"cer_option1" ~ TRUE,
"cer_option2" ~ Sure1 > 6 | Sure2 > 6
)) |>
mutate(NextMenstrualOnset = branch(menstrual_calculation,
"mc_option1" %when% (cycle_length != "cl_option3") ~ StartDateofLastPeriod + ComputedCycleLength,
"mc_option2" %when% (cycle_length != "cl_option2") ~ StartDateofLastPeriod + ReportedCycleLength,
"mc_option3" ~ StartDateNext)
) |>
mutate(
CycleDay = 28 - (NextMenstrualOnset - DateTesting),
CycleDay = ifelse(CycleDay > 1 & CycleDay < 28, CycleDay, ifelse(CycleDay < 1, 1, 28))
) |>
mutate( Fertility = branch( fertile,
"fer_option1" ~ factor( ifelse(CycleDay >= 7 & CycleDay <= 14, "high", ifelse(CycleDay >= 17 & CycleDay <= 25, "low", NA)) ),
"fer_option2" ~ factor( ifelse(CycleDay >= 6 & CycleDay <= 14, "high", ifelse(CycleDay >= 17 & CycleDay <= 27, "low", NA)) ),
"fer_option3" ~ factor( ifelse(CycleDay >= 9 & CycleDay <= 17, "high", ifelse(CycleDay >= 18 & CycleDay <= 25, "low", NA)) ),
"fer_option4" ~ factor( ifelse(CycleDay >= 8 & CycleDay <= 14, "high", "low") ),
"fer_option45" ~ factor( ifelse(CycleDay >= 8 & CycleDay <= 17, "high", "low") )
)) |>
mutate(RelationshipStatus = branch(relationship_status,
"rs_option1" ~ factor(ifelse(Relationship==1 | Relationship==2, 'Single', 'Relationship')),
"rs_option2" ~ factor(ifelse(Relationship==1, 'Single', 'Relationship')),
"rs_option3" ~ factor(ifelse(Relationship==1, 'Single', ifelse(Relationship==3 | Relationship==4, 'Relationship', NA))) )
)
df <- df |>
mutate( RelComp = round((Rel1 + Rel2 + Rel3)/3, 2))
})
## ----linear-models------------------------------------------------------------
inside(M, {
fit_RelComp <- lm( RelComp ~ Fertility * RelationshipStatus, data = df )
fit_FiscConsComp <- lm( FiscConsComp ~ Fertility * RelationshipStatus, data = df)
fit_SocConsComp <- lm( SocConsComp ~ Fertility * RelationshipStatus, data = df)
fit_Donate <- glm( Donate ~ Fertility * Relationship, data = df, family = binomial(link = "logit") )
fit_Vote <- glm( Vote ~ Fertility * Relationship, data = df, family = binomial(link = "logit") )
})
## ----model-summaries----------------------------------------------------------
inside(M, {
summary_RelComp <- fit_RelComp |>
broom::tidy( conf.int = TRUE )
summary_FiscConsComp <- fit_FiscConsComp |>
broom::tidy( conf.int = TRUE )
summary_SocConsComp <- fit_SocConsComp |>
broom::tidy( conf.int = TRUE )
summary_Donate <- fit_Donate |>
broom::tidy( conf.int = TRUE )
summary_Vote <- fit_Vote |>
broom::tidy( conf.int = TRUE )
})
## ----execute-multiverse-------------------------------------------------------
execute_multiverse(M)
## ----multiverse-results-------------------------------------------------------
expand(M) |>
mutate( summary = map(.results, "summary_RelComp") ) |>
unnest( summary )
## ----message = FALSE, fig.width = 6, fig.height = 4, eval = FALSE-------------
# p <- expand(M) |>
# mutate( summary_RelComp = map(.results, "summary_RelComp") ) |>
# unnest( cols = c(summary_RelComp) ) |>
# mutate( term = recode( term,
# "RelationshipStatusSingle" = "Single",
# "Fertilitylow:RelationshipStatusSingle" = "Single:Fertility_low"
# ) ) |>
# filter( term != "(Intercept)" ) |>
# ggplot() +
# geom_vline( xintercept = 0, colour = '#979797' ) +
# geom_point( aes(x = estimate, y = term)) +
# geom_errorbarh( aes(xmin = conf.low, xmax = conf.high, y = term), height = 0) +
# theme_minimal() +
# transition_manual( .universe )
#
# animate(p, nframes = 210, fps = 2)
## ----fig.width = 9, fig.height = 9--------------------------------------------
expand(M) |>
mutate(
summary_RelComp = map(.results, "summary_RelComp" ),
summary_FiscConsComp = map(.results, "summary_FiscConsComp" ),
summary_SocConsComp = map(.results, "summary_SocConsComp" ),
summary_Donate = map(.results, "summary_Donate" ),
summary_Vote = map(.results, "summary_Vote" )
) |>
select( summary_RelComp:summary_Vote ) |>
gather( "analysis", "result" ) |>
unnest(result) |>
filter( term == "Fertilitylow:RelationshipStatusSingle" | term == "Fertilitylow:Relationship") |>
ggplot() +
geom_histogram(aes(x = p.value), bins = 100, fill = "#ffffff", color = "#333333") +
geom_vline( xintercept = 0.05, color = "red", linetype = "dashed") +
facet_wrap(~ analysis, scales = "free", nrow = 3) +
theme_minimal()
## ----fig.width = 8, fig.height = 8, eval = FALSE------------------------------
# data.spec_curve <- expand(M) |>
# mutate( summary_RelComp = map(.results, "summary_RelComp") ) |>
# unnest( cols = c(summary_RelComp) ) |>
# filter( term == "Fertilitylow:RelationshipStatusSingle" ) |>
# select( .universe, !! names(parameters(M)), estimate, p.value ) |>
# arrange( estimate ) |>
# mutate( .universe = row_number())
#
# p1 <- data.spec_curve |>
# gather( "parameter_name", "parameter_option", !! names(parameters(M)) ) |>
# select( .universe, parameter_name, parameter_option) |>
# mutate(
# parameter_name = factor(str_replace(parameter_name, "_", "\n"))
# ) |>
# ggplot() +
# geom_point( aes(x = .universe, y = parameter_option, color = parameter_name), size = 0.5 ) +
# labs( x = "universe #", y = "option included in the analysis specification") +
# facet_grid(parameter_name ~ ., space="free_y", scales="free_y", switch="y") +
# theme(strip.placement = "outside",
# strip.background = element_rect(fill=NA,colour=NA),
# panel.spacing.x=unit(0.15,"cm"),
# strip.text.y = element_text(angle = 180, face="bold", size=10),
# panel.spacing = unit(0.25, "lines")
# ) +
# theme_minimal()
#
# p2 <- data.spec_curve |>
# ggplot() +
# geom_point( aes(.universe, estimate, color = (p.value < 0.05)), size = 0.25) +
# labs(x = "", y = "coefficient of\ninteraction term:\nfertility x relationship") +
# theme_minimal()
#
# cowplot::plot_grid(p2, p1, axis = "bltr", align = "v", ncol = 1, rel_heights = c(1, 3))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.