See below Appendices 1, 2. 3, 4, 5 and 6.
Appendix 1R script for statistical analyses
#DAG
Library(dagitty).
#data for creating the DAG plot.
g1 <—dagitty( "dag ")
#creating the plot.
plot(graphLayout(g1)).
#Sets for adjustment based on the DAG.
print( adjustmentSets( g1, "age", "negative_mental_feeling",effect = "direct")).
#.
print( adjustmentSets( g1, "reason_provided", "negative_mental_feeling",effect = "direct")).
#.
print( adjustmentSets( g1, "product_type", "negative_mental_feeling",effect = "direct")).
#.
print( adjustmentSets( g1, "dominance", "negative_mental_feeling",effect = "direct")).
#.
#Primary analysis, random effects logistic regression.
Primary_analysis29Nov22_test2$age_cat = as.factor(Primary_analysis29Nov22_test2$age_cat).
Primary_analysis29Nov22_test2$dominance = as.factor(Primary_analysis29Nov22_test2$dominance).
Primary_analysis29Nov22_test2$gender_simple = as.factor(Primary_analysis29Nov22_test2$gender_simple).
Primary_analysis29Nov22_test2$experience = as.factor(Primary_analysis29Nov22_test2$experience).
Primary_analysis29Nov22_test2$product_type = as.factor(Primary_analysis29Nov22_test2$product_type).
Primary_analysis29Nov22_test2$dominance = as.factor(Primary_analysis29Nov22_test2$dominance).
#Example of regression for age. Similar regressions were calculated to other variables.
m_outcome3 <—glmmTMB(outcome_1_exist ~ age_cat + gender_simple + experience + product_type + dominance + Pain_group + Mental_group + (1 | user), data = Primary_analysis29Nov22_test2, family = binomial).
summary(m_outcome3).
A3 <- confint(m_outcome3)
A3
exp(A3).
Anottry < -tidyr::tibble(exp(A3)).
write.csv(Anottry,file = "OR_all29Nov22.csv").
#Age:
p = ggplot(data = NewAge,
aes(x = Index,y = Estimate, ymin = LCI, ymax = UCI)) + geom_pointrange(aes(col = Index), show.legend = FALSE, fatten = 14) + xlab("Age") + ylab(("Odds ratios (95% Confidence Interval)")).
p + coord_flip() +
scale_y_log10(breaks = c(0.25, 0.5,1,2,4),position = "left",limits = c(0.12,8.5)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed",
color = "black", size = 0.5).
#Gender–- graph:
new_gender$Index <—factor(new_gender$Index, levels = c("males","females","other genders")).
p = ggplot(data = new_gender, aes(x = Index,y = Estimate, ymin = LCI, ymax = UCI)) + geom_pointrange(aes(col = Index), show.legend = FALSE, fatten = 14) + xlab("Gender") + ylab(("Odds ratios (95% Confidence Interval)")).
p + coord_flip() +
scale_y_log10(breaks = c(0.33, 1,3),position = "left",limits = c(0.25,4)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed",
color = "black", size = 0.5).
#Experience -graph:
New_experience$Index < -factor(New_experience$Index, levels = c("Experts","lot of experience","little experience","beginner")).
p = ggplot(data = New_experience,
aes(x = Index,y = Estimate, ymin = LCI, ymax = UCI)) + geom_pointrange(aes(col = Index), show.legend = FALSE, fatten = 14) + xlab("Experience in Cannabis use") + ylab(("Odds ratios (95% Confidence Interval)")).
p + coord_flip() +
scale_y_log10(breaks = c(0.6, 0.8, 1.25, 1.8),position = "left",limits = c(0.4,2.5)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed",
color = "black", size = 0.5).
#Reason provided–- graph.
New_indications$Index <—factor(New_indications$Index, levels = c("Other reasons","Pain","Mental")).
p = ggplot(data = New_indications,
aes(x = Index,y = Estimate, ymin = LCI, ymax = UCI)) + geom_pointrange(aes(col = Index), show.legend = FALSE, fatten = 14) + xlab("Reason provided") + ylab(("Odds ratios (95% Confidence Interval)")).
p + coord_flip() +
scale_y_log10(breaks = c(0.8, 1.25),position = "left",limits = c(0.6,1.8)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed",
color = "black", size = 0.5).
# composition–- graph:
p = ggplot(data = New_Composition,
aes(x = Index,y = Estimate, ymin = LCI, ymax = UCI)) + geom_pointrange(aes(col = Index), show.legend = FALSE, fatten = 14) + xlab("Product composition") + ylab(("Odds ratios (95% Confidence Interval)")).
p + coord_flip() +
scale_y_log10(breaks = c(0.6, 0.8, 1.25, 1.8),position = "left",limits = c(0.4,2.5)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed",
color = "black", size = 0.5).
# products.
new_products$Index <—factor(new_products$Index, levels = c("flowers","concentrates","tinctures","edible products","pills")).
p = ggplot(data = new_products,
aes(x = Index,y = Estimate, ymin = LCI, ymax = UCI)) + geom_pointrange(aes(col = Index), show.legend = FALSE, fatten = 14) + xlab("Type of product") + ylab(("Odds ratios (95% Confidence Interval)")).
p + coord_flip() +
scale_y_log10(breaks = c(0.6, 0.8, 1.25, 1.8),position = "left",limits = c(0.4,2.5)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed",
color = "black", size = 0.5).
p + coord_flip() +
scale_y_log10(breaks = c(0.6, 0.8, 1.25, 1.8),position = "left",limits = c(0.5,2)) +
guides(col = guide_legend(reverse = TRUE)) + theme(plot.title = element_text(size = 12,face = "bold"),
axis.text.y = element_text(size = 10, face = "bold", vjust = 0.3),
axis.ticks.y = element_blank(),
axis.text.x = element_text(face = "bold"),
axis.title = element_text(size = 14,face = "bold"),
strip.text.y = element_text(hjust = 0,vjust = 1,angle = 180,face = "bold")) + geom_hline(yintercept = 1, linetype = "dashed", color = "black", size = 0.5).
glm(symptom_difference ~ ~ age_cat +
gender_simple + gender_simple_other + experience_little +
experience_beginner + experience_lot +
product_type_concentrate + product_type_edible + product_type_pill +
product_type_tincture + dominance_T + dominance_C + Pain_group +
Mental_group + (1 | user), data = all_groupsNov)).
##interaction age-gender – only Females vs males since not enough power for anayalsis with nonbinary.
maleFemale <—subset(Primary_analysis29Nov22_test2, gender_simple ! = 2).
m_outcome3MF <—glmmTMB(outcome_1_exist ~ age_cat + gender_simple + experience + product_type + dominance + Pain_group + Mental_group + (1 | user) + gender_simple*age_cat, data = maleFemale, family = binomial).
summary(m_outcome3MF).
Appendix 2List of cannabis-related events and reasons provided in the app for cannabis use.
The list of cannabis-related events includes all experiences and emotions listed in the app, and comprises of the case group and control group as follows: List of negative mental emotions included in the study (“case” group): anxious, confused, distracted, irritable, paranoid, scattered, restless.
List of emotions included in the study (“control” group): Active, Chill, Clear, Clumsy, Comfy, Couchlocked, Coughing, Creative, Dizzy, Dreamy, Dry Mouth, Energetic, Focused, Foggy, Forgetful, Frisky, Grateful, Great, Happy, Headache, High, Hungry, Light, Nausea, Optimistic, Peaceful, Productive, Rapid Pulse, Red Eyes, Reflective, Relaxed, Silly, Sleepy, Talkative, Thinky, Thirsty, Tingly, Tuned, Unmotivated, Visuals.
Appendix 3Directed acyclic graph (DAG) describing the relationship between studied variables and potential confounders in the study.
Appendix 4The list of the reasons provided in the app for cannabis use comprise of mental reasons, pain reasons and other reasons.
Mental reasons: Mental reasons provided for cannabis use include the following: Anxiety, Depression, Stress, Wellness,Fatigue,Agitation / Irritability, Insomnia, Hard to Focus Thoughts,Mood Swings, Restlessness, Hyperactivity, Aggression, Disassociation, Impulse,Oppositional Behaviors,Self Injurious Behaviors,Self Stimulatory Repetitive Behaviors,Language Difficulty.
Types of pain include in the reason provided for cannabis use include the following: Pain—Back, Pain—Headache, Pain—Joint, Pain—Muscle, Pain – Gastrointestinal, Pain – Nerve, Pain – Arm or Leg, Pain – Migraine, Pain – Abdominal, Pain – Cramping, Pain – Menstrual, Pain—Other.
Others: Constipation, Convulsions, Dizziness, Excessive Appetite, Eye Pressure, Hot Flashes, Inflammation, Joint Stiffness, Loss of Appetite, Low Libido, Muscle Spasms, Nausea, Numbness / Tingling, Other, Tinnitus, Tremors, Withdrawal—Alcohol, Withdrawal—Benzo, Withdrawal—Nicotine, Withdrawal—Opiate, Withdrawal—Other.
Appendix 5Explanation about the differences between the differences between the primary and secondary flow charts The secondary analysis required ranking of the symptom relief which was not available for all sessions as some participants did not report the severity before and after the use of cannabis. This led to a smaller initial pool of sessions: 75,557 sessions in the primary analysis compared to 65,553 sessions in the secondary analysis with full data (about 13% difference). However, the terms for duplicates exclusion were more restrictive in the secondary analysis as we also added the covariate of reported symptom releaf to the analysis, leading to the requirement for identical values in the following variables for exclusion: user’s ID, date of use, reason for use, and reported symptom relief. In the primary analysis, the requirement for identical values included only the first three abovementioned variables, i.e. user’s ID, date of use, and reason for use, leading to more duplicates exclusion.
Appendix 6No interactions were found between age and gender for reporting negative mental emotions.
Categories for interaction
p-value
Age 30–40 years*gender
0.75297
Age 40–50 years*gender
0.68572
Age 50–60 years*gender
0.59642
Age 60–70 years*gender
0.4345
Age 70–90 years*gender
0.87712
Comments (0)