probe2wayMC guidance

139 views
Skip to first unread message

Ben Evans

unread,
Dec 8, 2022, 4:34:20 PM12/8/22
to lavaan

Hi all,

I’m relatively new to SEM and interactions within SEM, so was wondering if someone with a little more expertise could check that I am doing (and interpreting) this correctly.

My model has an IV (age, observed v), DV (performance, latent v), and moderator (climate, latent v). I wish to probe interactions to understand whether the relationship between age and performance changes at different levels of climate. I used indProd to make products of indicators using mean-centering. Because my age variable is observed, I’ve loaded it as a single indicator onto a latent factor.

###############################################################

### SUBJECTIVE AGE, SENSE OF COMMUNITY, TEAM PROFICIENCY ###

###############################################################

# The effect of subjective age on team proficiency increases when sense of community decreases, and vice versa

 

MODERATION3 <- '

TP =~ TP1 + TP2 + TP3

SOC =~ SOC1 + SOC2 + SOC3 + SOC4

SA =~ SAI

 

SA.SOC =~ SAI.SOC1 + SAI.SOC2 + SAI.SOC3 + SAI.SOC4

SA.SOC ~~ SA + SOC

 

TP ~ SA + SOC + SA.SOC


TP1 ~ 0*1

TP ~ 1’

 

 

A few notes about the syntax: I wanted to reflect that, if an intercept is the value of y when x=0, then both the means of the IV and mod should be fixed to 0 while the latent mean of the DV should be freely estimated (by fixing the first indicator of DV to 0). I think this was mainly for interpretation purposes more than anything else, but is this OK to do? I used +/-1 square root of the mod estimated variance in the valProbe argument.

 

probe1 <- probe2WayMC(fit3, c("SA", "SOC", "SA.SOC"), "TP", "SOC",

                     c(-sqrt(1.046),0, sqrt(1.046)))

 

$SimpleIntcept

     SOC   est      se        z      pvalue

1 -1.023 3.584 0.066 54.596      0

2  0.000 3.824 0.047 80.998      0

3  1.023 4.064 0.066 61.912      0

 

$SimpleSlope

     SOC   est      se       z     pvalue

1 -1.023 0.324 0.098 3.318  0.001

2  0.000 0.167 0.069 2.408  0.016

3  1.023 0.010 0.095 0.100  0.920

 

I then plotted it using the min (1) and max (5) observed of IV.

 

plotProbe(probe1, xlim = c(1,5), xlab = "SA", ylab = "TP")

 

 RplotSA1.png


Any feedback is very much appreciated.

 

Thanks in advance,

Ben

Terrence Jorgensen

unread,
Dec 12, 2022, 7:09:50 AM12/12/22
to lavaan

I wanted to reflect that, if an intercept is the value of y when x=0, then both the means of the IV and mod should be fixed to 0

That has nothing to do with X=0.  But you did mean-center your predictors, so their means are zero, so it won't hurt anything.

I used +/-1 square root of the mod estimated variance in the valProbe argument

That works.

Terrence D. Jorgensen    (he, him, his)
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam
http://www.uva.nl/profile/t.d.jorgensen

 

Ben Evans

unread,
Dec 13, 2022, 8:40:10 AM12/13/22
to lavaan
Thanks Terrence.

Ben Evans

unread,
Jan 25, 2023, 12:39:05 PM1/25/23
to lavaan
Follow up to this question: if the xlim values are supposed to represent the min and max of the IV, and the intercept of the IV is 0, then should the xlim values be both +/-? For instance, min/max of IV is 1-7, so should xlim values be -3,3? Or am I overthinking this?

Many thanks in advance,
Ben

On Monday, December 12, 2022 at 12:09:50 PM UTC Terrence Jorgensen wrote:

Terrence Jorgensen

unread,
Feb 3, 2023, 6:46:53 AM2/3/23
to lavaan
if the xlim values are supposed to represent the min and max of the IV

They aren't.  If the IV is normal (like latent variables are assumed to be), the upper/lower bounds are +/- infinity.  These are just limits on the graph, and it is reasonable to display where most of the data occur.  Use your IV's model M and SD as guidance:

lavInspect(fit, "mean.lv")
lavInspect(fit, "cov.ov") # SD = sqrt(diag(lavInspect(fit, "cov.ov")))

Terrence D. Jorgensen
Reply all
Reply to author
Forward
0 new messages