Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Add Title To SEM Plot in R

Tags:

r

sem

semplot

This is what I have for the plot:

semPaths(twofac7items_b,"std","est", rotation = 2,
         style = "lisrel",nCharNodes = 0,nodeNames=nodeNames,layout = "tree2",
         filetype = "pdf", width = 8, height = 6, filename = "Two Factor",
         residScale = 20)

Looks like this:

No Title SEM Path Diagram

What I want is this:

Path Diagram With Title

This is the dput(head). Everything I have is relabeled as Anxiety and Depression, so not sure how useful this will be:

structure(list(q01 = c(2, 1, 2, 3, 2, 2), q02 = c(1, 1, 3, 1, 
1, 1), q03 = c(4, 4, 2, 1, 3, 3), q04 = c(2, 3, 2, 4, 2, 2), 
    q05 = c(2, 2, 4, 3, 2, 4), q06 = c(2, 2, 1, 3, 3, 4), q07 = c(3, 
    2, 2, 4, 3, 4), q08 = c(1, 2, 2, 2, 2, 2), q09 = c(1, 5, 
    2, 2, 4, 4), q10 = c(2, 2, 2, 4, 2, 3), q11 = c(1, 2, 3, 
    2, 2, 2), q12 = c(2, 3, 3, 2, 3, 4), q13 = c(2, 1, 2, 2, 
    3, 3), q14 = c(2, 3, 4, 3, 2, 3), q15 = c(2, 4, 2, 3, 2, 
    5), q16 = c(3, 3, 3, 3, 2, 2), q17 = c(1, 2, 2, 2, 2, 3), 
    q18 = c(2, 2, 3, 4, 3, 5), q19 = c(3, 3, 1, 2, 3, 1), q20 = c(2, 
    4, 4, 4, 4, 5), q21 = c(2, 4, 3, 4, 2, 3), q22 = c(2, 4, 
    2, 4, 4, 1), q23 = c(5, 2, 2, 3, 4, 4)), variable.labels = c(q01 = "Statistics makes me cry", 
q02 = "My friends will think I'm stupid for not being able to cope with SPSS", 
q03 = "Standard deviations excite me", q04 = "I dream that Pearson is attacking me with correlation coefficients", 
q05 = "I don't understand statistics", q06 = "I have little experience of computers", 
q07 = "All computers hate me", q08 = "I have never been good at mathematics", 
q09 = "My friends are better at statistics than me", q10 = "Computers are useful only for playing games ", 
q11 = "I did badly at mathematics at school", q12 = "People try to tell you that SPSS makes statistics easier to understand but it doesn't", 
q13 = "I worry that I will cause irreparable damage because of my incompetenece with computers", 
q14 = "Computers have minds of their own and deliberately go wrong whenever I use them", 
q15 = "Computers are out to get me", q16 = "I weep openly at the mention of central tendency", 
q17 = "I slip into a coma whenever I see an equation", q18 = "SPSS always crashes when I try to use it", 
q19 = "Everybody looks at me when I use SPSS", q20 = "I can't sleep for thoughts of eigen vectors", 
q21 = "I wake up under my duvet thinking that I am trapped under a normal distribtion", 
q22 = "My friends are better at SPSS than I am", q23 = "If I'm good at statistics my friends will think I'm a nerd"
), codepage = 65001L, row.names = c(NA, 6L), class = "data.frame")

This is the SEM Model if its necessary:

m4b <- 'Depression =~ q01+ q03 + q04 + q05 + q08
        Anxiety =~ q06 + q07' 
twofac7items_b <- cfa(m4b, data=dat,std.lv=TRUE) 
summary(twofac7items_b,fit.measures=TRUE,standardized=TRUE)
like image 808
Shawn Hemelstrand Avatar asked Sep 07 '25 04:09

Shawn Hemelstrand


1 Answers

Background

Finally, I put this to the side for some time when I got more R savvy. Instead of trying to overcomplicate things, I decided to make a really simple SEM path plot, then apply what was said in the comments here earlier to solve the issue.

Solution

So the major issue I kept having was getting the title to map on. For some reason I couldn't understand what was causing the issue...until I figured out the order of operations for printing out the plot. So here is basically what I did. First I used a well-oiled data frame and wrote a model based off the old lavaan manual:

# Write model:
model <- '
ind60 =~ x1 + x2 + x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8

dem60 ~ ind60
dem65 ~ ind60 + dem60

y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8
'
# Fit model:
fit <- sem(model,
           data = PoliticalDemocracy)
# Summarize model:
summary(fit,
        standardized = T)

semPaths(fit,
         "std",
         "est",
         style = "lisrel",
         theme = "colorblind",
         rotation = 2,
         legend.cex = .5,
         layout = "tree2")

Now this is the main part...first, I just printed out the plot as it was from there:

No title plot

It was then that I put the title command directly after running the plot in the R plot viewer:

# Manually add title to generated plot
title("Democracy")

Title Plot

From there, I just printed the plot with this dropdown:

enter image description here

I was so new to R that I kept screwing this up by trying to output the file first. And by changing the order in my script, I got my pdf of my plot! I'm so happy that I was finally able to get this accomplished. Thank you to Rawr and User20650 for attempting to work with me on this.

like image 102
Shawn Hemelstrand Avatar answered Sep 10 '25 00:09

Shawn Hemelstrand