From b3f7a76d0cce5799b193495ce7ac5d431498c756 Mon Sep 17 00:00:00 2001 From: mattansb <35330040+mattansb@users.noreply.github.com> Date: Sun, 21 Feb 2021 09:26:30 +0200 Subject: [PATCH] Add tidySEM to lesson 1 --- .../Appendix - advanced plotting.R | 129 ++++++++++++ 01 path analysis/Exercise 1 - solution.R | 74 ------- 01 path analysis/advanced plotting.R | 184 ------------------ 01 path analysis/path analysis.R | 117 +++++++---- 01 path analysis/plot1.png | Bin 12717 -> 12332 bytes 01 path analysis/plot2.png | Bin 14337 -> 14148 bytes 6 files changed, 213 insertions(+), 291 deletions(-) create mode 100644 01 path analysis/Appendix - advanced plotting.R delete mode 100644 01 path analysis/Exercise 1 - solution.R delete mode 100644 01 path analysis/advanced plotting.R diff --git a/01 path analysis/Appendix - advanced plotting.R b/01 path analysis/Appendix - advanced plotting.R new file mode 100644 index 0000000..f0dacff --- /dev/null +++ b/01 path analysis/Appendix - advanced plotting.R @@ -0,0 +1,129 @@ +library(lavaan) +library(tidySEM) +library(dplyr) + +income_psych <- read.csv("income_psych.csv") + +mediation_model <- ' + mood_neg ~ anxiety + income ~ anxiety + mood_neg +' +fit <- sem(mediation_model, data = income_psych) + +## See below for how "plot1.png" and "plot2.png" were made. + + + +# Changing Nodes (Vars) --------------------------------------------------- + +(nods <- get_nodes(fit)) + +nods <- nods %>% + mutate(label = c("Negative\nMood", "Income", "Anxiety")) # \n is a break line + +graph_sem(fit, + nodes = nods) + + +# Changing Layout --------------------------------------------------------- + +lay <- get_layout( + NA, "mood_neg", NA, + "anxiety", NA, "income", + rows = 2 +) + +graph_sem(fit, + nodes = nods, + layout = lay, angle = 90) + + + +# Changing Edges (Paths) -------------------------------------------------- + + +(edgs <- get_edges(fit, + columns = c("est_std", "confint_std", "pval_std"), + digits = 3)) + +edgs <- edgs %>% + mutate( + label = paste0(est_std, "\n", confint_std), + color = "black", + color = replace(color, as.numeric(est_std) > 0 & to!=from, "green"), + color = replace(color, as.numeric(est_std) < 0, "red"), + linetype = "solid", + linetype = replace(linetype, as.numeric(pval_std) > 0.05, "dashed") + ) + +graph_sem(fit, + nodes = nods, + layout = lay, angle = 90, + edges = edgs) + + +# Making "plot1" ---------------------------------------------------------- + +mediation_model <- ' + mood_neg ~ anxiety + income ~ anxiety + mood_neg +' + +fit <- sem(mediation_model, data = income_psych) + + + + +nods <- get_nodes(fit) %>% + mutate(label = c("Negative\nMood", "Income", "Anxiety")) # \n is a break line + +lay <- get_layout( + NA, "mood_neg", NA, + "anxiety", NA, "income", + rows = 2 +) + +edgs <- get_edges(fit) %>% + filter(to != from) %>% + mutate(label = "") + +graph_sem(fit, + nodes = nods, edges = edgs, + layout = lay, angle = 90) + +ggplot2::ggsave("plot1.png", height = 3, width = 6) + + + + + +# Making "plot2" ---------------------------------------------------------- + + +mediation_model <- ' + mood_neg ~ a * anxiety + anxiety ~ b * shyness + income ~ c * anxiety + d * mood_neg + e * shyness +' + +fit <- sem(mediation_model, data = income_psych) + +nods <- get_nodes(fit) %>% + mutate(label = c("Negative\nMood", "Anxiety", "Income", "Shyness")) # \n is a break line + +lay <- get_layout( + NA, NA, "mood_neg", NA, + NA, "anxiety", NA, "income", + "shyness", NA, NA, NA, + rows = 3 +) + +edgs <- get_edges(fit) %>% + filter(to != from) %>% + mutate(label = "") + +graph_sem(fit, + nodes = nods, edges = edgs, + layout = lay, angle = 90) + +ggplot2::ggsave("plot2.png", height = 3, width = 6) diff --git a/01 path analysis/Exercise 1 - solution.R b/01 path analysis/Exercise 1 - solution.R deleted file mode 100644 index 88c6680..0000000 --- a/01 path analysis/Exercise 1 - solution.R +++ /dev/null @@ -1,74 +0,0 @@ -# Exercise ---------------------------------------------------------------- - -income_psych <- read.csv("income_psych.csv") -library(lavaan) - -## 1. Look at the plot in "plot2.png". Fit this model with `lavaan`. - -model <- " -# We need to build a regression equation for each endogenous variable: - anxiety ~ shyness -mood_neg ~ anxiety - income ~ anxiety + mood_neg + shyness -" - -fit <- sem(model, data = income_psych) -summary(fit, standardize = TRUE) - - -library(semPlot) -semPaths(fit) -# See `advanced plotting` for making "plot2.png" - - - - - - -## 2. Compute all the paths in this model from *anxiety* to *income*, and -## the total of these paths. -model <- " - anxiety ~ a * shyness -mood_neg ~ b * anxiety - income ~ c * anxiety + d * mood_neg + e * shyness - - # Define paths: - direct := c - ind_shyness := a * e - ind_mood := b * d - total := direct + ind_shyness + ind_mood -" - -fit <- sem(model, data = income_psych) -summary(fit, standardize = TRUE) -# Seems like the total path is not significant. -# Looks like a case of supression... Some paths are +, some are -... -# They LOOK like they cancel each other out! - -# However... -# The total is significant in the standerdized solution!! * -standardizedsolution(fit, output = "text") - -## - Why is the std total not equal exactly to the real correlation? -cor(income_psych$anxiety, income_psych$income) -# Theres a diff of (-0.001). Because the model isn't *just-identified*. -# We are missing the arrow from `shyness` to `mood_neg`. - - -## - is it very different? -# The diff is of (-0.001). Is this a lot? Is it significant? -# We will see next time how to answer these questions! - - -# * ----------------------------------------------------------------------- - -# Why does this happen? -# In SEM, standard errors (SE) are NOT invariant - that is, data -# transformation do not affect SEs the same way they do estimates (the -# parameters). -# However, Chis-square atatistics ARE invariant - so this is not an issue -# in model comparison (which we will learn next week). -# -# You can read more (mathy), here: -# https://doi.org/10.1007/BF01065882 -# (Thanks to Michael Neale for his explanation) \ No newline at end of file diff --git a/01 path analysis/advanced plotting.R b/01 path analysis/advanced plotting.R deleted file mode 100644 index 3fa540f..0000000 --- a/01 path analysis/advanced plotting.R +++ /dev/null @@ -1,184 +0,0 @@ -library(lavaan) -library(tidySEM) -library(dplyr) - -income_psych <- read.csv("income_psych.csv") - -mediation_model <- ' - income ~ anxiety + mood_neg - mood_neg ~ anxiety -' -fit <- sem(mediation_model, data = income_psych) - -## See below for how "plot1.png" and "plot2.png" were made. - -## Based on: -## https://cjvanlissa.github.io/tidySEM/articles/Plotting_graphs.html - - -# Changing the layout ----------------------------------------------------- - -lay <- get_layout(NA, "mood_neg", NA, - NA, NA, NA, - "anxiety", NA, "income", - rows = 3) - - - - -graph_data <- prepare_graph(fit, layout = lay, label = "est_std") - -plot(graph_data) - - - - -# Adding var labels ------------------------------------------------------- - -# We can add labels to our variables (our "nodes") by chaging the "label" column -# in the "nodes" part of the plot: - -(N <- nodes(graph_data)) - -nodes(graph_data) <- N %>% - mutate(label = c("Anxiety", "Income", "Negative Mood")) - -plot(graph_data) - - - -# Adding / changing arrow labels ------------------------------------------ - - -(tab <- table_results(fit, columns = c("label", "est_std", "confint_std", "pval"), digits = 2)) - -(E <- edges(graph_data)) - -edges(graph_data) <- E %>% - mutate(est_std = tab$est_std, - label = paste0(round(est_std, 2), " ",tab$confint)) - -plot(graph_data) - - - - - -# Even more --------------------------------------------------------------- - -E <- edges(graph_data) - -edges(graph_data) <- E %>% - mutate( - # color lines by sign: - colour = case_when( - arrow == "both" ~ "black", - est_std < 0 ~ "red", - est_std > 0 ~ "green" - ), - # mark which is sig - linetype = c("dashed","dashed","solid", "dashed", "solid", "solid") - ) - - -N <- nodes(graph_data) - -nodes(graph_data) <- N %>% - mutate(size = c(1,3,1)) - -plot(graph_data) - - - - - -# Making "plot1" ---------------------------------------------------------- - -mediation_model <- ' - income ~ anxiety + mood_neg - mood_neg ~ anxiety -' - -fit <- sem(mediation_model, data = income_psych) - - - -lay <- get_layout(NA, "mood_neg", NA, - "anxiety", NA, "income", - rows = 2) - -graph_data <- prepare_graph(fit, layout = lay) - -E <- edges(graph_data) -E$label <- "" -E$connect_from[3] <- "top" -E$connect_to[3] <- "left" -E$connect_from[2] <- "right" -E <- E[1:3,] -edges(graph_data) <- E - - - -(N <- nodes(graph_data)) -N$label <- c("Anxiety", "Income", "Negative Mood") -nodes(graph_data) <- N - - - - - -(p1 <- plot(graph_data)) - -# because the result it a ggplot, we will use ggsave to save it -ggplot2::ggsave(p1, filename = "plot1.png", width = 6, height = 3) - - - - - -# Making "plot2" ---------------------------------------------------------- - - -mediation_model <- ' - income ~ anxiety + mood_neg + shyness - mood_neg ~ anxiety - anxiety ~ shyness -' - -fit <- sem(mediation_model, data = income_psych) - - - - - - -lay <- get_layout(NA, NA, "mood_neg", NA, - NA, "anxiety", NA, "income", - "shyness", NA, NA, NA, - rows = 3) - -graph_data <- prepare_graph(fit, layout = lay) - -E <- edges(graph_data) -E$label <- "" -E$connect_from[5] <- "top" -E$connect_to[5] <- "left" -E$connect_from[4] <- "top" -E$connect_to[4] <- "left" -E$connect_to[3] <- "bottom" -E <- E[1:5,] -edges(graph_data) <- E - -plot(graph_data) - -(N <- nodes(graph_data)) -N$label <- c("Anxiety", "Income", "Negative Mood", "Shyness") -N$node_xmin[3] <- N$node_xmin[3]-0.5 -N$node_xmax[3] <- N$node_xmax[3]+0.5 -nodes(graph_data) <- N - - -(p2 <- plot(graph_data)) - -# because the result it a ggplot, we will use ggsave to save it -ggplot2::ggsave(p2, filename = "plot2.png", width = 6, height = 3) diff --git a/01 path analysis/path analysis.R b/01 path analysis/path analysis.R index 87f02fa..3476ed7 100644 --- a/01 path analysis/path analysis.R +++ b/01 path analysis/path analysis.R @@ -1,29 +1,40 @@ +# We will be using a simple mediation model to demonstrate the principals of +# path analysis. + income_psych <- read.csv("income_psych.csv") head(income_psych) -# Testing mediation: +# Our question: # Does negative mood mediate the relationship between anxiety and income? # Graphically, it looks like "plot1.png" + + + + # Manual path analysis ---------------------------------------------------- m1 <- lm(income ~ anxiety + mood_neg, income_psych) m2 <- lm(mood_neg ~ anxiety, income_psych) +# We can "build" the paths by multiplying the correct coefficiants: (coef1 <- coef(m1)) (coef2 <- coef(m2)) -direct <- unname(coef1[2]) -indirect <- unname(coef1[3] * coef2[2]) +direct <- unname(coef1['anxiety']) +indirect <- unname(coef1['mood_neg'] * coef2['anxiety']) + +(mediation_by_hand <- c(direct = direct, + indirect = indirect, + total = direct + indirect)) + +# Is the total correct? +lm(income ~ anxiety, data = income_psych) + -mediation_by_hand <- c(direct = direct, - indirect = indirect, - total = direct + indirect) -summary(lm(income ~ anxiety, income_psych)) -mediation_by_hand # With lavaan ------------------------------------------------------------- @@ -32,27 +43,50 @@ mediation_by_hand library(lavaan) -# modelss are written as a multi-line charachter object: +# model specification are written as a multi-line character: mediation_model <- ' - income ~ anxiety + mood_neg mood_neg ~ anxiety + income ~ anxiety + mood_neg ' # fit the model to the data: fit <- sem(mediation_model, data = income_psych) -summary(fit) # (why is the Test Statistic 0?) + +## Model summary +summary(fit) # get estimates + tests statistics +# Note that by DEFAULT, lavaan estimates all residual errors. +# (why is the Test Statistic 0?) summary(fit, standardize = TRUE) # look at Std.all for beta summary(fit, rsquare = TRUE) # See regression R2 -# Note that by DEFAULT, lavaan estimates all residual errors. -# Modifiers! -------------------------------------------------------------- -# how to compute the paths? With *modifiers*! -# - We can mark parameters with a "stand-ins" followed by "*" -# - We can have lavaan compute effects with ":=" +## Confidence intervals: +parameterestimates(fit, ci = TRUE, output = "text") # ci for the raw estimates +standardizedSolution(fit, ci = TRUE, output = "text") # ci for the std estimates +# Note that the tests from these 2 functions CAN BE DIFFERENT. Why? + + +## Bootstrap +fit_with_boot <- sem(mediation_model, data = income_psych, + se = "bootstrap", bootstrap = 200) +summary(fit_with_boot, standardize = TRUE) + + + + + + +## Modifiers! ------------ + +# - We can mark parameters with a "stand-ins" followed by "*" - these stand-ins +# are called *modifiers*. +# - We can have lavaan compute different estimates with ":=" +# +# This allows up to estimate paths in lavaan: + mediation_model <- ' # regressions mood_neg ~ a * anxiety @@ -66,23 +100,22 @@ mediation_model <- ' ' fit <- sem(mediation_model, data = income_psych) + summary(fit, standardize = TRUE) # look at "Defined Parameters" mediation_by_hand cor(income_psych$anxiety, income_psych$income) -## Confidence intervals: -summary(fit, standardize = TRUE, ci = TRUE) # ci for the raw estimates -standardizedSolution(fit, ci = TRUE, output = "text") # ci for the std estimates -## Bootstrap -fit_with_boot <- sem(mediation_model, data = income_psych, - se = "bootstrap", bootstrap = 200) -summary(fit_with_boot, standardize = TRUE) -# Compare paths ----------------------------------------------------------- -# We can also compare paths directly: + +## Compare paths -------- + +# With the ":=" operator, we can estimate many things! +# E.g., we can compare paths: + + mediation_model <- ' # regressions mood_neg ~ a * anxiety @@ -96,39 +129,57 @@ mediation_model <- ' path_diff := direct - indirect ' + fit <- sem(mediation_model, data = income_psych) # look at "Defined Parameters" parameterEstimates(fit, output = "text") # summary gives these test values standardizedSolution(fit, output = "text") -# Note that the tests from these 2 functions CAN BE DIFFERENT. Why? + + + fit <- sem(mediation_model, data = income_psych, likelihood = "wishart") # likelihood = "wishart" used an unbiased cov-matrix, and gives # similar results to AMOS (SPSS). -# In large samples this heardly has any effects... -# Read more about the varouls likelihoods and estimators: +# In large samples this hardly has any effects... +# Read more about the various likelihoods and estimators: # http://lavaan.ugent.be/tutorial/est.html -# Plotting ---------------------------------------------------------------- + + + + + + + + +## Plotting -------- library(tidySEM) graph_sem(fit) - +graph_sem(fit, label = "est") graph_sem(fit, label = "est_std") # See also advanced plotting.R + + + # Exercise ---------------------------------------------------------------- -# 1. Look at the plot in "plot2.png". Fit this model with `lavaan`. +# 1. Look at the plot in "plot2.png". +# - Explain the causal relationship in this model (in words). +# - Fit this model with `lavaan`. # 2. Compute all the paths in this model from *anxiety* to *income*, and # the total of these paths. -# - Why is the std total not equal exactly to the real correlation? -# - is it very different? +# 3. Why is the std total not *equal* exactly to the real correlation? +# - Is it very different? What does this mean? +# 4. Compute the difference between the two indirect paths. +# - How big is it? Is it significant? diff --git a/01 path analysis/plot1.png b/01 path analysis/plot1.png index 15802451e6de7673dd8b85930d5b62082bc9c7de..decc58df05278ae8aac3f4782ac62d7f0cfdce72 100644 GIT binary patch literal 12332 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 J`levv{~r_mh5-No diff --git a/01 path analysis/plot2.png b/01 path analysis/plot2.png index d1f0dd3452f0cbe153714630e3ef5a089bfaab82..3e2e4de4f805f117f209f30477073812d24c6c6e 100644 GIT binary patch literal 14148 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 literal 14337 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