As per the question, I want to run a regression of variables where those variables are nested within each other and therefore highly correlated. Here is my specific example for context:
I study the effects of Extraversion
on various outcomes. Theoretically, Extraversion
(a personality trait) is itself made up of two lower-level 'personality aspects', being Assertiveness
and Enthusiasm
. Despite Extraversion
being made up of these two lower-level traits, it is still possible for Extraversion
to explain additional variance in an Outcome
over and above the individual effects of Assertiveness
and Enthusiasm
. 20 items (questions on a questionnnaire) are typically used to measured all three constructs (10 for Assertiveness
, 10 for Enthusiasm
, and the full 20 for Extraversion
). The variables are therefore highly correlated (usually > 0.70).
I would like to know how to correctly run a regression to best figure out what the contribution is of each of these three traits, given that they are necessarily highly correlated.
Some made-up data in the form of a correlation matrix to illustrate:
#Correlation matrix.
MyMatrix <- matrix(
c(1.0, 0.7, 0.8, 0.3,
0.7, 1.0, 0.6, 0.4,
0.8, 0.6, 1.0, 0.4,
0.3, 0.4, 0.4, 1.0),
nrow=4,
ncol=4)
rownames(MyMatrix) <- colnames(MyMatrix) <- c("Extraversion", "Assertiveness","Enthusiasm","Outcome")
#Assume means and standard deviations as follows:
MEAN.Extraversion <- 4.00
MEAN.Assertiveness <- 3.90
MEAN.Enthusiasm <- 4.10
MEAN.Outcome <- 5.00
SD.Extraversion <- 1.01
SD.Assertiveness <- 0.95
SD.Enthusiasm <- 0.99
SD.Outcome <- 2.20
s <- c(SD.Extraversion, SD.Assertiveness, SD.Enthusiasm, SD.Outcome)
m <- c(MEAN.Extraversion, MEAN.Assertiveness, MEAN.Enthusiasm, MEAN.Outcome)
#Convert to covariance matrix.
cov.mat <- diag(s) %*% MyMatrix %*% diag(s)
rownames(cov.mat) <- colnames(cov.mat) <- rownames(MyMatrix)
names(m) <- rownames(MyMatrix)
#Run model.
library(lavaan)
m1 <- 'Outcome ~ Extraversion + Assertiveness + Enthusiasm'
fit <- sem(m1,
sample.cov=cov.mat,
sample.nobs=300,
sample.mean=m,
meanstructure=TRUE)
summary(fit, standardize=TRUE)