40 La struttura delle medie
- utilizzare l’informazione delle medie nei modelli CFA.
- Leggere il capitolo Factor Analysis and Principal Component Analysis (Petersen, 2024).
40.1 Introduzione
L’Analisi Fattoriale Confermativa (CFA) condivide con l’analisi fattoriale tradizionale l’obiettivo di esaminare le relazioni di covarianza tra le variabili. Tuttavia, una caratteristica distintiva della CFA è la possibilità di includere nel modello anche le medie, sia delle variabili osservate che di quelle latenti. Questo approccio si rivela particolarmente utile in contesti come l’analisi fattoriale confermativa longitudinale, dove le ipotesi non si limitano alle covarianze, ma riguardano anche i cambiamenti nelle medie dei costrutti analizzati nel tempo.
40.2 Interpretazione delle Intercette nei Modelli CFA
Nei modelli CFA o nei Modelli di Equazioni Strutturali (SEM), l’intercetta di una variabile indicatore, denotata con \(\tau\), rappresenta la media stimata dell’indicatore quando il fattore latente a cui è associato assume il valore zero. Questo consente di integrare nel modello informazioni sia sulle relazioni tra variabili (covarianze) sia sulle loro medie.
La relazione generale per un indicatore \(y\) in un modello CFS (o SEM) è espressa dalla seguente equazione:
\[ y = \tau + \lambda \cdot \text{fattore latente} + \varepsilon, \]
dove:
- \(y\): è il punteggio osservato dell’indicatore.
- \(\tau\): è l’intercetta, che rappresenta la media stimata dell’indicatore quando il fattore latente è zero.
- \(\lambda\): è il carico fattoriale, che misura la relazione tra il fattore latente e l’indicatore, ovvero quanto l’indicatore è influenzato dal fattore latente.
- \(\varepsilon\): è l’errore di misura, che cattura la varianza dell’indicatore non spiegata dal fattore latente.
40.2.1 Struttura delle Medie nel Modello CFA
La struttura delle medie in un modello CFA può essere espressa attraverso la seguente formula:
\[ \text{media(variabile osservata)} = \Lambda \mu_{\text{lat}} + \tau, \]
dove:
- \(\Lambda\): è la matrice dei carichi fattoriali, che collega i fattori latenti agli indicatori.
- \(\mu_{\text{lat}}\): è il vettore delle medie dei fattori latenti.
- \(\tau\): è il vettore delle intercette degli indicatori, che rappresenta le medie degli indicatori indipendentemente dai fattori latenti.
40.2.2 Interpretazione
Cosa rappresenta \(\tau\) concretamente?
L’intercetta \(\tau\) rappresenta il valore atteso di un indicatore quando il fattore latente associato ha un valore pari a zero. Per esempio, immagina un indicatore che misura la performance in un test. Se il fattore latente (ad esempio, “abilità generale”) è zero, \(\tau\) indica la media attesa della performance in quella condizione specifica.Perché \(\tau\) è importante?
\(\tau\) è fondamentale per interpretare il livello base dell’indicatore, consentendo di separare la varianza spiegata dai fattori latenti da quella attribuibile ad altre cause, come il livello medio dell’indicatore stesso. Questo è particolarmente utile per comprendere i punti di partenza dei partecipanti o i livelli medi degli indicatori in un contesto specifico.
40.2.2.1 Esempio Intuitivo
Supponiamo di analizzare i risultati di un test di matematica. Se il fattore latente rappresenta “abilità matematica” e il carico fattoriale \(\lambda\) è elevato, ciò significa che i punteggi del test sono fortemente influenzati dall’abilità matematica. Tuttavia, \(\tau\) fornisce un’informazione aggiuntiva: indica il punteggio medio nel test per chi ha un’abilità matematica pari a zero.
Se i dati sono stati centrati, l’intercetta \(\tau\) rappresenta la performance media prevista per i partecipanti con un’abilità matematica media rispetto al gruppo di riferimento.
40.2.2.2 Importanza di \(\tau\) nei Modelli SEM
L’intercetta \(\tau\) assume particolare rilievo nei modelli SEM applicati a:
- Studi longitudinali: Le variazioni di \(\tau\) nel tempo possono indicare cambiamenti nei livelli medi degli indicatori, come miglioramenti o peggioramenti in una competenza specifica.
- Confronti tra gruppi: Differenze significative nelle intercette tra gruppi possono evidenziare disuguaglianze nei livelli medi di un indicatore, fornendo informazioni utili per analisi comparative.
In sintesi, l’intercetta \(\tau\) è uno strumento chiave per comprendere e interpretare il comportamento degli indicatori nei modelli SEM, offrendo una visione chiara delle loro relazioni con i fattori latenti e delle differenze a livello di gruppo o temporale.
40.2.3 Utilizzo delle Medie nel Software lavaan
Nel software lavaan
, utilizzato per l’analisi SEM, è possibile stimare le intercette inserendo l’opzione meanstructure = TRUE
nella sintassi del modello. Questo comando permette di includere automaticamente una costante “1” in tutte le equazioni del modello, facilitando così il calcolo delle intercette per le variabili endogene. È necessario fornire i dati originali o una matrice di covarianza, insieme alle medie di tutte le variabili interessate.
40.3 Un Esempio Pratico
Utilizziamo il dataset HolzingerSwineford1939
per costruire un modello di misurazione basato su tre costrutti latenti:
-
Visual (visual): rappresenta abilità visive, misurate dagli indicatori
x1
,x2
ex3
. -
Textual (textual): rappresenta abilità testuali, misurate dagli indicatori
x4
,x5
ex6
. -
Speed (speed): rappresenta velocità di elaborazione, misurata dagli indicatori
x7
,x8
ex9
.
Visualizziamo una panoramica del dataset:
data(HolzingerSwineford1939)
glimpse(HolzingerSwineford1939)
#> Rows: 301
#> Columns: 15
#> $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, …
#> $ sex <int> 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 2,…
#> $ ageyr <int> 13, 13, 13, 13, 12, 14, 12, 12, 13, 12, 12, 12, 12, 12, 12,…
#> $ agemo <int> 1, 7, 1, 2, 2, 1, 1, 2, 0, 5, 2, 11, 7, 8, 6, 1, 11, 5, 8, …
#> $ school <fct> Pasteur, Pasteur, Pasteur, Pasteur, Pasteur, Pasteur, Paste…
#> $ grade <int> 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,…
#> $ x1 <dbl> 3.33, 5.33, 4.50, 5.33, 4.83, 5.33, 2.83, 5.67, 4.50, 3.50,…
#> $ x2 <dbl> 7.75, 5.25, 5.25, 7.75, 4.75, 5.00, 6.00, 6.25, 5.75, 5.25,…
#> $ x3 <dbl> 0.375, 2.125, 1.875, 3.000, 0.875, 2.250, 1.000, 1.875, 1.5…
#> $ x4 <dbl> 2.33, 1.67, 1.00, 2.67, 2.67, 1.00, 3.33, 3.67, 2.67, 2.67,…
#> $ x5 <dbl> 5.75, 3.00, 1.75, 4.50, 4.00, 3.00, 6.00, 4.25, 5.75, 5.00,…
#> $ x6 <dbl> 1.286, 1.286, 0.429, 2.429, 2.571, 0.857, 2.857, 1.286, 2.7…
#> $ x7 <dbl> 3.39, 3.78, 3.26, 3.00, 3.70, 4.35, 4.70, 3.39, 4.52, 4.13,…
#> $ x8 <dbl> 5.75, 6.25, 3.90, 5.30, 6.30, 6.65, 6.20, 5.15, 4.65, 4.55,…
#> $ x9 <dbl> 6.36, 7.92, 4.42, 4.86, 5.92, 7.50, 4.86, 3.67, 7.36, 4.36,…
40.3.1 Specifica del Modello
Ogni costrutto è definito in relazione ai propri indicatori. Le varianze dei costrutti latenti sono fissate a 1 per garantirne la scalatura, mentre le loro medie sono fissate a 0.
Ecco il modello specificato:
hs_model <- "
visual =~ NA*x1 + x2 + x3
textual =~ NA*x4 + x5 + x6
speed =~ NA*x7 + x8 + x9
visual ~~ 1*visual
textual ~~ 1*textual
speed ~~ 1*speed
"
40.3.2 Stima del Modello
Richiediamo la stima delle intercette degli indicatori impostando meanstructure = TRUE
. Le intercette (\(\tau\)) rappresentano il valore medio atteso per ciascun indicatore quando il rispettivo fattore latente è pari a zero. Adattiamo il modello ai dati:
fit <- cfa(hs_model,
data = HolzingerSwineford1939,
meanstructure = TRUE
)
Esaminiamo un riepilogo dei risultati, inclusi i carichi fattoriali standardizzati:
summary(fit, standardized = TRUE)
#> lavaan 0.6-19 ended normally after 20 iterations
#>
#> Estimator ML
#> Optimization method NLMINB
#> Number of model parameters 30
#>
#> Number of observations 301
#>
#> Model Test User Model:
#>
#> Test statistic 85.306
#> Degrees of freedom 24
#> P-value (Chi-square) 0.000
#>
#> Parameter Estimates:
#>
#> Standard errors Standard
#> Information Expected
#> Information saturated (h1) model Structured
#>
#> Latent Variables:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> visual =~
#> x1 0.900 0.081 11.128 0.000 0.900 0.772
#> x2 0.498 0.077 6.429 0.000 0.498 0.424
#> x3 0.656 0.074 8.817 0.000 0.656 0.581
#> textual =~
#> x4 0.990 0.057 17.474 0.000 0.990 0.852
#> x5 1.102 0.063 17.576 0.000 1.102 0.855
#> x6 0.917 0.054 17.082 0.000 0.917 0.838
#> speed =~
#> x7 0.619 0.070 8.903 0.000 0.619 0.570
#> x8 0.731 0.066 11.090 0.000 0.731 0.723
#> x9 0.670 0.065 10.305 0.000 0.670 0.665
#>
#> Covariances:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> visual ~~
#> textual 0.459 0.064 7.189 0.000 0.459 0.459
#> speed 0.471 0.073 6.461 0.000 0.471 0.471
#> textual ~~
#> speed 0.283 0.069 4.117 0.000 0.283 0.283
#>
#> Intercepts:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> .x1 4.936 0.067 73.473 0.000 4.936 4.235
#> .x2 6.088 0.068 89.855 0.000 6.088 5.179
#> .x3 2.250 0.065 34.579 0.000 2.250 1.993
#> .x4 3.061 0.067 45.694 0.000 3.061 2.634
#> .x5 4.341 0.074 58.452 0.000 4.341 3.369
#> .x6 2.186 0.063 34.667 0.000 2.186 1.998
#> .x7 4.186 0.063 66.766 0.000 4.186 3.848
#> .x8 5.527 0.058 94.854 0.000 5.527 5.467
#> .x9 5.374 0.058 92.546 0.000 5.374 5.334
#>
#> Variances:
#> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
#> visual 1.000 1.000 1.000
#> textual 1.000 1.000 1.000
#> speed 1.000 1.000 1.000
#> .x1 0.549 0.114 4.833 0.000 0.549 0.404
#> .x2 1.134 0.102 11.146 0.000 1.134 0.821
#> .x3 0.844 0.091 9.317 0.000 0.844 0.662
#> .x4 0.371 0.048 7.779 0.000 0.371 0.275
#> .x5 0.446 0.058 7.642 0.000 0.446 0.269
#> .x6 0.356 0.043 8.277 0.000 0.356 0.298
#> .x7 0.799 0.081 9.823 0.000 0.799 0.676
#> .x8 0.488 0.074 6.573 0.000 0.488 0.477
#> .x9 0.566 0.071 8.003 0.000 0.566 0.558
40.3.3 Interpretazione dei Risultati
Carichi Fattoriali (\(\lambda\))
I carichi fattoriali indicano quanto fortemente un indicatore è associato al costrutto latente. Ad esempio, per visual
, il carico fattoriale di x1
è 0.90, indicando una forte relazione tra il costrutto “Visual” e l’indicatore x1
.
Intercette (\(\tau\))
Le intercette rappresentano la media predetta degli indicatori quando il fattore latente associato è zero. Nel nostro modello, le medie dei costrutti latenti sono fissate a zero, quindi le intercette corrispondono alle medie predette degli indicatori.
40.3.4 Calcolo delle Medie Osservate e Predette
Per comprendere meglio il ruolo delle intercette, calcoliamo le medie osservate e predette per gli indicatori x1
, x2
e x3
.
Estraiamo le intercette stimate dal modello:
params <- parameterEstimates(fit)
intercepts <- params$est[params$op == "~1"]
intercepts
#> [1] 4.94 6.09 2.25 3.06 4.34 2.19 4.19 5.53 5.37 0.00 0.00 0.00
40.3.5 Calcolo della Media Predetta
La media predetta di ciascun indicatore in un modello CFA è fornita direttamente dalle intercette stimate (\(\tau\)). Per gli indicatori x1
, x2
, x3
, estraiamo le intercette dal modello:
mean_predicted_scores <- mean(intercepts[1:3]) # Intercette predette per x1, x2, x3
mean_predicted_scores
#> [1] 4.42
40.3.6 Calcolo della Media Osservata
La media osservata per gli stessi indicatori si ottiene calcolando la media aritmetica dei loro punteggi effettivi, come segue:
mean_observed_scores <- mean(
(HolzingerSwineford1939$x1 + HolzingerSwineford1939$x2 + HolzingerSwineford1939$x3) / 3
)
mean_observed_scores
#> [1] 4.42
Se il modello si adatta bene ai dati, le due medie dovrebbero essere molto vicine. Questo riflette l’adeguatezza del modello nel rappresentare i dati. In questo caso, i due valori coincidono o differiscono solo leggermente, confermando che il modello rappresenta fedelmente i dati osservati.
In sommario, questo esempio illustra come i carichi fattoriali e le intercette nel modello CFA siano utilizzati per stimare le medie predette degli indicatori. L’allineamento tra medie osservate e predette riflette l’adeguatezza del modello nella rappresentazione dei dati.
40.4 Medie di Costrutti Latenti Non Zero
Quando le medie dei costrutti latenti (\(\mu_{\text{latente}}\)) non sono fissate a zero, la media predetta di ciascun indicatore dipende sia dalle intercette (\(\tau\)) che dai carichi fattoriali (\(\lambda\)). In questo caso, l’equazione per la media predetta di un indicatore, ad esempio x1
, è:
\[ \text{media predetta}(x1) = \mu_{\text{latente}} \cdot \lambda_{x1} + \tau_{x1}, \]
dove:
- \(\mu_{\text{latente}}\): è la media stimata del costrutto latente associato.
-
\(\lambda_{x1}\): è il carico fattoriale dell’indicatore
x1
, che misura quanto fortemente il costrutto latente influenza l’indicatore. -
\(\tau_{x1}\): è l’intercetta stimata dell’indicatore
x1
.
Questa relazione evidenzia che, quando \(\mu_{\text{latente}} \neq 0\), la media degli indicatori riflette non solo la loro intercetta, ma anche il contributo del costrutto latente, modulato dai carichi fattoriali.
40.5 Modello con Medie dei Costrutti Latenti Non Zero
Per esplorare questa configurazione, costruiamo un modello SEM in cui le medie dei costrutti latenti sono stimate liberamente. Per garantire l’identificabilità del modello, introduciamo due vincoli fondamentali:
-
Intercette degli indicatori marker fissate a zero: Le variabili osservate
x1
,x4
ex7
, che sono gli indicatori marker per ciascun fattore, avranno intercette impostate a zero. -
Una media latente fissata a zero: La media del costrutto latente
visual
è fissata a zero come riferimento, mentre le medie ditextual
espeed
sono stimate liberamente.
40.5.1 Specificazione del Modello
Il modello viene specificatocome segue:
hs_model <- "
# Definizione dei fattori latenti
visual =~ NA*x1 + x2 + x3
textual =~ NA*x4 + x5 + x6
speed =~ NA*x7 + x8 + x9
# Standardizzazione delle varianze latenti
visual ~~ 1*visual
textual ~~ 1*textual
speed ~~ 1*speed
# Vincoli sulle intercette degli indicatori marker
x1 ~ 0*1 # Intercetta di x1 fissata a zero
x4 ~ 0*1 # Intercetta di x4 fissata a zero
x7 ~ 0*1 # Intercetta di x7 fissata a zero
# Vincoli sulle medie latenti
visual ~ 0*1 # Media di visual fissata a zero
textual ~ 1 # Media di textual stimata liberamente
speed ~ 1 # Media di speed stimata liberamente
"
40.5.2 Interpretazione delle Medie Predette
La caratteristica chiave di questo modello è che le medie predette degli indicatori sono una funzione di tre componenti:
- La media del costrutto latente (\(\mu_{\text{latente}}\))
- Il carico fattoriale dell’indicatore (\(\lambda\))
- L’intercetta dell’indicatore (\(\tau\))
Questa relazione è espressa dalla formula:
\[ \text{media predetta(indicatore)} = \mu_{\text{latente}} \cdot \lambda + \tau \]
Per esempio:
Per l’indicatore marker
x1
(fattore visual): \[ \text{media predetta}(x1) = \mu_{\text{visual}} \cdot \lambda_{x1} + \tau_{x1} = 0 \cdot \lambda_{x1} + 0 = 0 \]Per l’indicatore marker
x4
(fattore textual): \[ \text{media predetta}(x4) = \mu_{\text{textual}} \cdot \lambda_{x4} + \tau_{x4} \] dove \(\mu_{\text{textual}}\) è stimato liberamente e \(\tau_{x4} = 0\)-
Per gli altri indicatori (es. x2, x3, x5, x6, x8, x9):
- Le intercette sono stimate liberamente
- Le medie predette includono sia il contributo della media latente che dell’intercetta
Questa struttura delle medie ci permette di:
- confrontare le medie dei costrutti latenti tra gruppi diversi;
- valutare i cambiamenti longitudinali nei costrutti latenti;
- interpretare le differenze nelle medie degli indicatori in termini dei loro componenti strutturali.
40.5.3 Adattamento del Modello
Applichiamo il modello ai dati e esaminiamo i risultati:
fit <- cfa(hs_model, data = HolzingerSwineford1939, meanstructure = TRUE)
params <- parameterEstimates(fit)
params
#> lhs op rhs est se z pvalue ci.lower ci.upper
#> 1 visual =~ x1 4.983 0.212 23.54 0.000 4.568 5.398
#> 2 visual =~ x2 1.702 0.093 18.25 0.000 1.519 1.885
#> 3 visual =~ x3 2.243 0.106 21.10 0.000 2.035 2.451
#> 4 textual =~ x4 1.783 0.081 21.95 0.000 1.624 1.942
#> 5 textual =~ x5 1.985 0.090 22.01 0.000 1.808 2.162
#> 6 textual =~ x6 1.652 0.076 21.70 0.000 1.502 1.801
#> 7 speed =~ x7 1.136 0.072 15.88 0.000 0.996 1.277
#> 8 speed =~ x8 1.341 0.070 19.13 0.000 1.204 1.478
#> 9 speed =~ x9 1.229 0.068 17.98 0.000 1.095 1.363
#> 10 visual ~~ visual 1.000 0.000 NA NA 1.000 1.000
#> 11 textual ~~ textual 1.000 0.000 NA NA 1.000 1.000
#> 12 speed ~~ speed 1.000 0.000 NA NA 1.000 1.000
#> 13 x1 ~1 0.000 0.000 NA NA 0.000 0.000
#> 14 x4 ~1 0.000 0.000 NA NA 0.000 0.000
#> 15 x7 ~1 0.000 0.000 NA NA 0.000 0.000
#> 16 visual ~1 0.000 0.000 NA NA 0.000 0.000
#> 17 textual ~1 0.885 0.054 16.41 0.000 0.779 0.990
#> 18 speed ~1 2.845 0.187 15.21 0.000 2.478 3.211
#> 19 x1 ~~ x1 0.890 0.257 3.46 0.001 0.385 1.394
#> 20 x2 ~~ x2 1.134 0.100 11.37 0.000 0.938 1.329
#> 21 x3 ~~ x3 0.844 0.087 9.72 0.000 0.674 1.015
#> 22 x4 ~~ x4 0.371 0.045 8.24 0.000 0.283 0.459
#> 23 x5 ~~ x5 0.446 0.055 8.12 0.000 0.338 0.554
#> 24 x6 ~~ x6 0.356 0.041 8.68 0.000 0.276 0.437
#> 25 x7 ~~ x7 0.799 0.077 10.41 0.000 0.649 0.950
#> 26 x8 ~~ x8 0.488 0.062 7.92 0.000 0.367 0.608
#> 27 x9 ~~ x9 0.566 0.062 9.13 0.000 0.445 0.688
#> 28 visual ~~ textual 0.870 0.016 53.41 0.000 0.838 0.902
#> 29 visual ~~ speed 0.877 0.019 47.02 0.000 0.840 0.913
#> 30 textual ~~ speed 0.783 0.027 28.49 0.000 0.729 0.837
#> 31 x2 ~1 4.460 0.064 69.66 0.000 4.335 4.586
#> 32 x3 ~1 0.106 0.058 1.81 0.070 -0.008 0.220
#> 33 x5 ~1 0.934 0.075 12.48 0.000 0.787 1.080
#> 34 x6 ~1 -0.649 0.064 -10.09 0.000 -0.775 -0.523
#> 35 x8 ~1 0.588 0.236 2.50 0.013 0.126 1.050
#> 36 x9 ~1 0.847 0.226 3.74 0.000 0.403 1.291
40.5.4 Interpretazione dei Risultati
Medie Latenti (\(\mu_{\text{latente}}\))
Le medie stimate per i costruttitextual
espeed
riflettono il loro contributo alle medie predette degli indicatori associati. Pervisual
, la media latente è fissata a zero per identificare il modello.Media Predetta degli Indicatori
Per ciascun indicatore, la media predetta include sia l’intercetta (fissata a zero in questo esempio) sia il contributo del costrutto latente moltiplicato per il carico fattoriale.
Ad esempio, per x1
:
\[ \text{media predetta}(x1) = \mu_{\text{visual}} \cdot \lambda_{x1} + \tau_{x1} = 0 \cdot \lambda_{x1} + 0 = 0 \]
Mentre per un indicatore di textual
(ad esempio x4
), la media predetta sarà:
\[ \text{media predetta}(x4) = \mu_{\text{textual}} \cdot \lambda_{x4} + \tau_{x4}. \]
40.5.5 Calcolo delle Medie Predette
Per calcolare le medie predette:
# Funzione per calcolare le medie predette
calc_predicted_means <- function(params) {
# Estrai i carichi fattoriali (lambda)
lambdas <- params[params$op == "=~", c("lhs", "rhs", "est")]
# Estrai le medie latenti (mu)
means <- params[params$op == "~1" & params$lhs %in% c("visual", "textual", "speed"),
c("lhs", "est")]
# Estrai le intercette (tau)
intercepts <- params[params$op == "~1" & params$lhs %in% paste0("x", 1:9),
c("lhs", "est")]
# Calcola le medie predette
predicted_means <- data.frame(
indicator = character(),
predicted_mean = numeric(),
formula = character(),
stringsAsFactors = FALSE
)
# Per ogni indicatore
for(i in 1:9) {
indicator <- paste0("x", i)
# Trova il fattore latente associato
factor <- lambdas$lhs[lambdas$rhs == indicator]
lambda <- lambdas$est[lambdas$rhs == indicator]
mu <- means$est[means$lhs == factor]
tau <- intercepts$est[intercepts$lhs == indicator]
# Se l'intercetta non è presente nei risultati, assume 0
if(length(tau) == 0) tau <- 0
# Calcola la media predetta
pred_mean <- mu * lambda + tau
# Crea la formula come stringa
formula <- sprintf("%.3f * %.3f + %.3f = %.3f",
mu, lambda, tau, pred_mean)
# Aggiungi alla tabella dei risultati
predicted_means <- rbind(predicted_means,
data.frame(
indicator = indicator,
predicted_mean = pred_mean,
formula = formula,
stringsAsFactors = FALSE
))
}
return(predicted_means)
}
# Calcola e mostra le medie predette
results <- calc_predicted_means(params)
print(results)
#> indicator predicted_mean formula
#> 1 x1 0.000 0.000 * 4.983 + 0.000 = 0.000
#> 2 x2 4.460 0.000 * 1.702 + 4.460 = 4.460
#> 3 x3 0.106 0.000 * 2.243 + 0.106 = 0.106
#> 4 x4 1.578 0.885 * 1.783 + 0.000 = 1.578
#> 5 x5 2.689 0.885 * 1.985 + 0.934 = 2.689
#> 6 x6 0.812 0.885 * 1.652 + -0.649 = 0.812
#> 7 x7 3.233 2.845 * 1.136 + 0.000 = 3.233
#> 8 x8 4.403 2.845 * 1.341 + 0.588 = 4.403
#> 9 x9 4.344 2.845 * 1.229 + 0.847 = 4.344
Le medie latenti riflettono il contributo di ciascun costrutto alla media predetta dei rispettivi indicatori. La formula \(\hat{Y} = \mu \cdot \lambda + \tau\) ci consente di distinguere i diversi contributi strutturali alle medie osservate.
In sintesi, quando le medie dei costrutti latenti sono diverse da zero, il calcolo delle medie predette degli indicatori diventa più complesso, poiché include il contributo sia delle intercette sia dei carichi fattoriali ponderati dalle medie latenti. Questo approccio è particolarmente utile in contesti in cui è necessario confrontare medie tra gruppi o valutare cambiamenti longitudinali nei costrutti latenti.
40.6 Riflessioni Conclusive
In questo capitolo abbiamo approfondito come l’inclusione delle medie nei modelli CFA consenta di ampliare la comprensione delle relazioni tra variabili, andando oltre le covarianze. Abbiamo evidenziato il ruolo cruciale delle intercette, che rappresentano il valore medio atteso degli indicatori quando i fattori latenti assumono valore zero, e come esse contribuiscano alla struttura delle medie predette degli indicatori. Infine, abbiamo esplorato l’utilità dei modelli con medie dei costrutti latenti non zero, che permettono di analizzare differenze tra gruppi e cambiamenti longitudinali, fornendo un quadro interpretativo più ricco e completo. Questo approccio è particolarmente rilevante per indagini che mirano a comprendere i livelli medi dei costrutti in relazione ai loro indicatori, sia in contesti trasversali che longitudinali.
40.7 Session Info
sessionInfo()
#> R version 4.4.2 (2024-10-31)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sequoia 15.3.1
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
#>
#> locale:
#> [1] C/UTF-8/C/C/C/C
#>
#> time zone: Europe/Rome
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] ggokabeito_0.1.0 see_0.10.0 MASS_7.3-65 viridis_0.6.5
#> [5] viridisLite_0.4.2 ggpubr_0.6.0 ggExtra_0.10.1 gridExtra_2.3
#> [9] patchwork_1.3.0 bayesplot_1.11.1 semTools_0.5-6 semPlot_1.1.6
#> [13] lavaan_0.6-19 psych_2.4.12 scales_1.3.0 markdown_1.13
#> [17] knitr_1.49 lubridate_1.9.4 forcats_1.0.0 stringr_1.5.1
#> [21] dplyr_1.1.4 purrr_1.0.4 readr_2.1.5 tidyr_1.3.1
#> [25] tibble_3.2.1 ggplot2_3.5.1 tidyverse_2.0.0 here_1.0.1
#>
#> loaded via a namespace (and not attached):
#> [1] rstudioapi_0.17.1 jsonlite_1.9.0 magrittr_2.0.3
#> [4] TH.data_1.1-3 estimability_1.5.1 farver_2.1.2
#> [7] nloptr_2.1.1 rmarkdown_2.29 vctrs_0.6.5
#> [10] minqa_1.2.8 base64enc_0.1-3 rstatix_0.7.2
#> [13] htmltools_0.5.8.1 broom_1.0.7 Formula_1.2-5
#> [16] htmlwidgets_1.6.4 plyr_1.8.9 sandwich_3.1-1
#> [19] emmeans_1.10.7 zoo_1.8-13 igraph_2.1.4
#> [22] mime_0.12 lifecycle_1.0.4 pkgconfig_2.0.3
#> [25] Matrix_1.7-2 R6_2.6.1 fastmap_1.2.0
#> [28] rbibutils_2.3 shiny_1.10.0 digest_0.6.37
#> [31] OpenMx_2.21.13 fdrtool_1.2.18 colorspace_2.1-1
#> [34] rprojroot_2.0.4 Hmisc_5.2-2 timechange_0.3.0
#> [37] abind_1.4-8 compiler_4.4.2 withr_3.0.2
#> [40] glasso_1.11 htmlTable_2.4.3 backports_1.5.0
#> [43] carData_3.0-5 ggsignif_0.6.4 corpcor_1.6.10
#> [46] gtools_3.9.5 tools_4.4.2 pbivnorm_0.6.0
#> [49] foreign_0.8-88 zip_2.3.2 httpuv_1.6.15
#> [52] nnet_7.3-20 glue_1.8.0 quadprog_1.5-8
#> [55] nlme_3.1-167 promises_1.3.2 lisrelToR_0.3
#> [58] grid_4.4.2 checkmate_2.3.2 cluster_2.1.8
#> [61] reshape2_1.4.4 generics_0.1.3 gtable_0.3.6
#> [64] tzdb_0.4.0 data.table_1.17.0 hms_1.1.3
#> [67] car_3.1-3 sem_3.1-16 pillar_1.10.1
#> [70] rockchalk_1.8.157 later_1.4.1 splines_4.4.2
#> [73] lattice_0.22-6 survival_3.8-3 kutils_1.73
#> [76] tidyselect_1.2.1 miniUI_0.1.1.1 pbapply_1.7-2
#> [79] reformulas_0.4.0 stats4_4.4.2 xfun_0.51
#> [82] qgraph_1.9.8 arm_1.14-4 stringi_1.8.4
#> [85] yaml_2.3.10 pacman_0.5.1 boot_1.3-31
#> [88] evaluate_1.0.3 codetools_0.2-20 mi_1.1
#> [91] cli_3.6.4 RcppParallel_5.1.10 rpart_4.1.24
#> [94] xtable_1.8-4 Rdpack_2.6.2 munsell_0.5.1
#> [97] Rcpp_1.0.14 coda_0.19-4.1 png_0.1-8
#> [100] XML_3.99-0.18 parallel_4.4.2 jpeg_0.1-10
#> [103] lme4_1.1-36 mvtnorm_1.3-3 openxlsx_4.2.8
#> [106] rlang_1.1.5 multcomp_1.4-28 mnormt_2.1.1