Advertisement
Guest User

Untitled

a guest
May 25th, 2025
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 3.22 KB | None | 0 0
  1. ```{r}
  2. # install.packages(c('lavaan', 'psych', 'semPlot'))
  3. library(lavaan)
  4. library(psych)
  5. library(semPlot)
  6. ```
  7.  
  8. ```{r}
  9. n <- 11914
  10.  
  11. # 1. Specify correlation matrix
  12. cor.mat <- matrix(
  13.   c(
  14.     1, .722, .801, .689, .524, .452, .637, .695, .695, .760, .800,
  15.     .722, 1, .708, .672, .627, .515, .533, .827, .684, .658, .727,
  16.     .801, .708, 1, .803, .617, .550, .529, .670, .593, .684, .981,
  17.     .689, .672, .803, 1, .608, .561, .423, .637, .521, .573, .901,
  18.     .524, .627, .617, .608, 1, .701, .306, .617, .408, .421, .643,
  19.     .452, .515, .550, .561, .701, 1, .225, .520, .336, .342, .578,
  20.     .637, .533, .529, .423, .306, .225, 1, .415, .741, .745, .519,
  21.     .695, .827, .670, .637, .617, .520, .415, 1, .600, .585, .688,
  22.     .695, .684, .593, .521, .408, .336, .741, .600, 1, .743, .596,
  23.     .760, .658, .684, .573, .421, .342, .745, .585, .743, 1, .679,
  24.     .800, .727, .981, .901, .643, .578, .519, .688, .596, .679, 1
  25.     ),
  26.   nrow=11,
  27.   byrow=T
  28. )
  29. colnames(cor.mat) <- rownames(cor.mat) <- c('GS', 'AR', 'WK', 'PC', 'NO', 'CS', 'AS', 'MK', 'MC', 'EI', 'VE')
  30.  
  31. # Subtests that compose the ASVAB and AFQT. VE (verbal expression) is just a composite of WK and PC), so it should not be included.
  32. asvab <- c('GS', 'AR', 'WK', 'PC', 'NO', 'CS', 'AS', 'MK', 'MC', 'EI')
  33. afqt <- c('AR', 'WK', 'PC', 'MK')
  34. ```
  35.  
  36. ```{r}
  37. fa.parallel(x=cor.mat[asvab, asvab], n.obs=n, fm='ml', n.iter=200)
  38. ```
  39.  
  40. ```{r}
  41. hier_model <- '
  42.  # first‐order factors
  43.    math   =~ AR + MK
  44.    verbal =~ WK + PC
  45.    tech   =~ AS + MC + EI + GS
  46.    speed  =~ NO + CS
  47.  
  48.  # second‐order g
  49.    g =~ math + verbal + tech + speed
  50. '
  51.  
  52. fit <- cfa(
  53.   hier_model,
  54.   sample.cov  = cor.mat[asvab, asvab],
  55.   sample.nobs = n,
  56.   estimator = "ML"
  57. )
  58.  
  59. summary(fit, standardized=T, rsquare=T)
  60. stdf <- inspect(fit, "std")$lambda
  61. print(stdf)
  62. lavInspect(fit, 'cor.lv')
  63. ```
  64.  
  65. ```{r}
  66. semPaths(fit, what="std", edge.color="black", edge.label.cex=.9, esize=1, nDigits=2, sizeLat=7)
  67. ```
  68. ```{r}
  69. g_efa <- omega(
  70.   cor.mat[asvab, asvab],
  71.   n.iter = 1,
  72.   nfactors = 4,
  73.   digits   = 3,
  74.   n.obs    = n,
  75.   sl       = T
  76. ) # sl=TRUE returns Schmid‐Leiman
  77.  
  78. print(g_efa, digits=3)
  79. ```
  80.  
  81. ```{r}
  82. hier_model <- '
  83.  g =~ AR + MK + WK + PC + AS + MC + EI + NO + CS + GS
  84.  math =~ AR + MK
  85.  verbal =~ WK + PC
  86.  tech =~ AS + MC + EI + GS
  87.  speed =~ NO + CS
  88. '
  89.  
  90. fit <- cfa(
  91.   hier_model,
  92.   sample.cov  = cor.mat[asvab, asvab],
  93.   sample.nobs = n,
  94.   estimator = 'ML',
  95.   orthogonal=T,
  96.   std.lv=T
  97. )
  98.  
  99. g_cfa <- omegaFromSem(fit)
  100. print(g_cfa, digits=3)
  101. ```
  102.  
  103. ```{r}
  104. fa.parallel(x=cor.mat[afqt, afqt], n.obs=n, fm='ml', n.iter=200)
  105. ```
  106. ```{r}
  107. g_efa <- omega(
  108.   cor.mat[afqt, afqt],
  109.   nfactors  = 2,
  110.   digits    = 3,
  111.   n.obs     = n,
  112.   sl        = T,
  113.   estimator = 'ML'
  114. )
  115.  
  116. print(g_cfa, digits=3)
  117. ```
  118.  
  119. ```{r}
  120. hier_model <- '
  121.  # first‐order factors
  122.    math   =~ AR + MK
  123.    verbal =~ WK + PC
  124.  # second‐order g
  125.    g =~ a*math + a*verbal
  126. '
  127.  
  128. fit <- cfa(
  129.   hier_model,
  130.   sample.cov  = cor.mat[afqt, afqt],
  131.   sample.nobs = n,
  132.   estimator = 'ML'
  133. )
  134.  
  135. summary(fit, standardized=T, rsquare=T)
  136.  
  137. stdf <- inspect(fit, 'std')$lambda
  138. print(stdf)
  139. ```
  140.  
  141. ```{r}
  142. semPaths(fit, what='std', edge.color='black', edge.label.cex=1, esize=1, nDigits=3, sizeLat=7)
  143. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement