2
$\begingroup$

Assume we have the following linear path model:

Structural (inner) model:

$Y_{1} = \beta_{1}Y_{2}+\theta_{1}\delta$

Measurement (outer) model:

$X_{1} = \lambda_{1}*Y_{1}+\epsilon_{1}\delta$

$X_{2} = \lambda_{2}*Y_{1}+\epsilon_{2}\delta$

$X_{3} = \lambda_{3}*Y_{1}+\epsilon_{3}\delta$

$X_{4} = \lambda_{4}*Y_{2}+\epsilon_{4}\delta$

$X_{5} = \lambda_{5}*Y_{2}+\epsilon_{5}\delta$

$X_{6} = \lambda_{6}*Y_{2}+\epsilon_{6}\delta$

with: $X_{i}$ = manifest variables (indicators),

$Y_{i}$ = latent variables (constructs),

$\lambda_{i} = 0.8$,

$\beta_{1} = 0.8$,

$\epsilon_{i}$ = i.i.d.,

$\delta$ = some constant, which determines the strength of the error. Here delta is set to 0.6, because all correlations are 0.8 and a delta of 0.6 gives almost exact correlations of 0.8. So the purpose of delta is to get emprical correlations or at least pseudo empircal. I don't know if thats how its done, but it worked for this example.

The visual model looks as follows:

Path model

So I wrote some messy R Code to get the covariance matrix of the $X_{i}$:

library("MASS")

# set up covariance matrix of independent errors
sig <- matrix(0, 8, 8)
rownames(sig) <- c("y2", "e1", "e2", "e3", "e4", "e5", "e6", "d1")
colnames(sig) <- rownames(sig)
diag(sig) <- 1

# simulate random uncorrelated variables
rndm.vars <- mvrnorm(100, Sigma = sig, mu = c(0, 0, 0, 0, 0, 0, 0, 0), empirical = TRUE)

# split the simulated variables to the names in the equation for better readability
y2 <- rndm.vars[,1]
e1 <- rndm.vars[,2]
e2 <- rndm.vars[,3]
e3 <- rndm.vars[,4]
e4 <- rndm.vars[,5]
e5 <- rndm.vars[,6]
e6 <- rndm.vars[,7]
d1 <- rndm.vars[,8]

# set global delta
delta <- 0.6

# set path coefficients of the structural (inner) model
beta_1 <- 0.8

# linear equation of the inner model
y1 <- beta_1*y2+d1*delta

# set outer loadings (coefficients) of the measurement (outer) model
lam_i <- 0.8

## linear equations of the measurement (outer) model
# measurement model of y1
x1 <- y1*lam_i+e1*delta
x2 <- y1*lam_i+e2*delta
x3 <- y1*lam_i+e3*delta

# measurement model of y2
x4 <- y2*lam_i+e4*delta
x5 <- y2*lam_i+e5*delta
x6 <- y2*lam_i+e6*delta

# form a dataset from the manifest variables (indicators)
X <- cbind(x1, x2, x3, x4, x5, x6)
sim.data <- as.data.frame(X)

# get the covariance matrix of X
cor(X)

      x1    x2    x3    x4    x5    x6
x1 1.000 0.640 0.640 0.512 0.512 0.512
x2 0.640 1.000 0.640 0.512 0.512 0.512
x3 0.640 0.640 1.000 0.512 0.512 0.512
x4 0.512 0.512 0.512 1.000 0.640 0.640
x5 0.512 0.512 0.512 0.640 1.000 0.640
x6 0.512 0.512 0.512 0.640 0.640 1.000

So now lets do partial least squares structural equation modeling!

# Lets try sempls!!
library("semPLS")

# specify dataset
dataset <- as.data.frame(X)

## specify models
# measurement (outer) model
mm <- cbind(c("y1", "y1", "y1", "y2", "y2", "y2"),
                c("x1", "x2", "x3", "x4", "x5", "x6"))

# structural (inner) model
sm <- cbind(c("y2"), c("y1"))


# create plsm object
model <- plsm(dataset, sm, mm)

# estimate the model with the pls algorithm
estim.model <- sempls(model, dataset)

# show the results
estim.model

             Path Estimate
lam_1_1  y2 -> x4     0.87
lam_1_2  y2 -> x5     0.87
lam_1_3  y2 -> x6     0.87
lam_2_1  y1 -> x1     0.87
lam_2_2  y1 -> x2     0.87
lam_2_3  y1 -> x3     0.87
beta_1_2 y2 -> y1     0.67

So our results as visual model: enter image description here

So I read in several papers that pls sem underestimates the inner model parameters and overestimates the outer model parameters. Those papers always cite

Schneeweiss, Hans. Consistency at large in models with latent variables. Amsterdam: Elsevier, 1993.

Unfortunately I could not find this paper anywhere until now and I don't know if I ever will get access to it.

In the previous example however I observed the same with the inner parameter going from 0.8 to 0.67 and the outer parameters from 0.8 to 0.87.

So is this really the cause of my observation? And if so, isn't that a really big difference for such a small model?

Or is there something conceptually wrong with my approach?

$\endgroup$
0
$\begingroup$

As I found out, there was indeed something wrong with my conceptual approach. Namely: I ignored the fact that the latent variables are not random, but linear combinations of their manifest variables. If you define

$y_{1} = x_{1}+x_{2}+x_{3}$

$y_{2} = x_{4}+x_{5}+x_{6}$

The results of PLS and manually computing the correlations are equal! Of course this will only work if the PLS algorithm has only 1 Iteration, which means that the weights are equal and therefore the equations above work fine. The above model has 1 Iteration because the cross correlations are set equally to .512

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.