12  Análisis de fiabilidad y factorial confirmatorio

Published

June 29, 2026

12.1 Introducción al análisis de fiabilidad de escalas

A lo largo de los capítulos anteriores se ha trabajado con variables muy diversas: esperanza de vida, percepciones sobre un smartphone, clase social. Algunas son directamente observables y fáciles de medir (la edad, el precio). Sin embargo, muchos de los conceptos más interesantes en marketing, psicología o sociología son abstractos e inobservables. No se puede medir directamente la “lealtad a la marca”, la “satisfacción del cliente” o la “calidad percibida del servicio”. A estos conceptos teóricos se les llama constructos latentes.

Para medir estos constructos se recurre a la creación de escalas de medida: un conjunto de ítems o preguntas (las variables observadas) diseñadas para capturar conjuntamente la esencia del constructo latente. Por ejemplo, para medir la “satisfacción” se podría preguntar por la satisfacción general, la probabilidad de recomendar y si la elección fue acertada.

¿Cómo se sabe si un instrumento de medida —una escala— es bueno? ¿Cómo asegurar que las preguntas diseñadas funcionan juntas de manera coherente para medir lo que se pretende medir? Antes de poder afirmar que una escala es válida (que mide realmente el constructo correcto), primero hay que asegurar que es fiable. El análisis de fiabilidad es el proceso estadístico que permite evaluar la calidad y consistencia de las escalas de medida.

TipUna nota para quien viene de SPSS

El análisis de fiabilidad sí tiene equivalente directo en SPSS: Analizar > Escala > Análisis de fiabilidad, donde se obtiene el Alfa de Cronbach y las estadísticas ítem-total que se desarrollan en este capítulo. El análisis factorial confirmatorio (AFC), por el contrario, no forma parte de SPSS base —es terreno de software especializado en ecuaciones estructurales como AMOS o Mplus—; en R se aborda con el paquete lavaan, que es el estándar de referencia académico para esta técnica.

12.2 Fundamentos teóricos: la teoría clásica de los tests

La base de todo análisis de fiabilidad reside en la teoría clásica de los tests (TCT). Su postulado fundamental es simple pero profundo: la puntuación observada para un individuo en un ítem o una escala (X) se compone de dos partes: su puntuación verdadera (T), el valor real e inobservable del constructo, y un error de medida (E) (Cronbach 1951).

\[X = T + E\]

El error de medida (E) es el “ruido” aleatorio que distorsiona la medición: puede deberse a la ambigüedad de una pregunta, al estado de ánimo del encuestado, a errores de transcripción, etc. El objetivo de un buen instrumento de medida es minimizar este error.

En este contexto, la fiabilidad se define como la proporción de la varianza total de la puntuación observada (X) debida a la varianza de la puntuación verdadera (T): una medida de cuánta “señal” (puntuación verdadera) se captura en relación con el “ruido” (error). Una escala perfectamente fiable sería aquella en la que todo lo medido es la puntuación verdadera, sin error alguno.

12.3 La consistencia interna: el pilar de la fiabilidad

Existen distintos tipos de fiabilidad (test-retest, formas paralelas…), pero en investigación social y de mercados la más utilizada con diferencia es la fiabilidad de consistencia interna, que evalúa hasta qué punto los ítems de una escala están interrelacionados y miden el mismo constructo subyacente. Si todas las preguntas de una escala están diseñadas para medir “satisfacción”, las respuestas de un individuo a esas preguntas deberían ser consistentes entre sí.

12.3.1 Alfa de Cronbach (α): el indicador clásico

El indicador más extendido para medir la consistencia interna es el alfa de Cronbach (α). Conceptualmente, puede entenderse como una medida del promedio de todas las posibles correlaciones entre los ítems que componen una escala, ajustado por su número. Su valor oscila entre 0 y 1.

La interpretación sigue unas reglas generales ampliamente aceptadas (Hair et al. 2019):

α Interpretación
> 0,90 Excelente
> 0,80 Bueno
> 0,70 Aceptable (el umbral más utilizado en investigación)
> 0,60 Cuestionable (aceptable en análisis exploratorios)
< 0,60 Pobre o inaceptable

Es importante entender lo que el alfa de Cronbach no es: no es una medida de unidimensionalidad. Un valor alto indica que los ítems son consistentes entre sí, pero no garantiza que estén midiendo un único constructo. Una escala que mida simultáneamente “satisfacción” y “lealtad” podría tener un alfa alto si ambos constructos están correlacionados. La cuestión de la unidimensionalidad es un problema de validez, que se aborda con el análisis factorial (exploratorio y confirmatorio).

12.3.2 Más allá del alfa: omega de McDonald (ω)

Aunque el alfa de Cronbach es omnipresente, se basa en un supuesto estricto conocido como “tau-equivalencia”: que todos los ítems miden el constructo con la misma precisión (cargas factoriales iguales). Cuando este supuesto se viola —algo muy habitual— el alfa puede subestimar la fiabilidad real de la escala.

Por eso la literatura metodológica moderna recomienda cada vez más el omega de McDonald (ω) como alternativa superior (Dunn et al. 2014). No requiere el supuesto de tau-equivalencia y se basa en las cargas factoriales de los ítems, proporcionando una estimación más realista de la fiabilidad. Su interpretación es similar a la del alfa, con los mismos umbrales de aceptabilidad.

12.4 Diagnóstico y mejora de la escala: las estadísticas ítem-total

El análisis de fiabilidad no solo aporta un valor global para la escala, sino diagnósticos para cada ítem individual, permitiendo identificar y eliminar los que no funcionan bien. Las dos estadísticas más importantes son:

  1. Correlación ítem-total corregida: mide la correlación de un ítem específico con la puntuación total de la escala, calculada a partir de todos los demás ítems. Indica qué tan bien “encaja” cada ítem en el conjunto. Los ítems con una correlación inferior a 0,30 suelen considerarse problemáticos y son candidatos a eliminarse (Field 2018).

  2. Alfa si se elimina el ítem: para cada ítem, se calcula cuál sería el alfa de la escala si ese ítem fuera eliminado.

    • Si al eliminar un ítem el alfa aumenta significativamente, es señal clara de que ese ítem es un “mal elemento” que reduce la consistencia interna de la escala, y debería considerarse seriamente su eliminación.
    • Si al eliminarlo el alfa disminuye, el ítem contribuye positivamente a la fiabilidad y debería mantenerse.

12.5 El puente hacia el análisis factorial confirmatorio

Realizar un análisis de fiabilidad es el primer paso obligatorio en la validación de una escala de medida: asegura que el instrumento es consistente y preciso. Si una escala no es fiable, no puede ser válida. Es como tener una báscula que da un peso diferente cada vez que alguien se sube: antes de preocuparse por si está bien calibrada (validez), hay que asegurarse de que al menos da siempre la misma lectura (fiabilidad).

Una vez depurada la escala y demostrada su alta consistencia interna (alfa u omega aceptable), se está listo para el siguiente paso: el análisis factorial confirmatorio (AFC). Con el AFC se pasa de la pregunta “¿miden mis ítems algo de manera consistente?” a “¿miden mis ítems el constructo único que se cree que están midiendo?”. La fiabilidad da confianza en el instrumento; el AFC dará confianza en la teoría.

12.6 Aplicación práctica: validación de una escala de satisfacción del cliente

Se desarrolla el caso de un investigador de mercados que ha diseñado una encuesta para medir la “satisfacción del cliente” con un nuevo servicio de streaming, y necesita validar si la escala propuesta es fiable.

12.6.1 Objetivo de la investigación

Objetivo: evaluar la fiabilidad de consistencia interna de una escala de 5 ítems diseñada para medir el constructo latente “satisfacción del cliente”. El proceso incluye el diagnóstico de ítems problemáticos, la purificación de la escala si fuera necesario, y el cálculo de los indicadores de fiabilidad finales.

12.6.2 Preparación de los datos

Se ha encuestado a 300 clientes con una escala inicial de 5 ítems en escala de 1 a 10. Cuatro ítems se diseñaron para medir directamente la satisfacción; un quinto ítem es una variable aleatoria incluida como “distractor” para poner a prueba el proceso de diagnóstico.

Los datos se simulan a partir de un constructo latente de “satisfacción” para asegurar una estructura realista y reproducible:

Code
set.seed(42)
n <- 300

# Underlying latent construct
latent_satisfaction <- rnorm(n, 0, 1)

# Observed items
satisfaction_data <- data.frame(
  sat1_overall      = 7 + 0.85 * latent_satisfaction + rnorm(n, 0, 0.5),
  sat2_expectations = 7 + 0.80 * latent_satisfaction + rnorm(n, 0, 0.6),
  sat3_ideal        = 7 + 0.90 * latent_satisfaction + rnorm(n, 0, 0.4),
  sat4_recommend    = 7 + 0.82 * latent_satisfaction + rnorm(n, 0, 0.5),
  # A pure noise item, unrelated to satisfaction
  random_noise      = 5 + rnorm(n, 0, 2.0)
)

satisfaction_data <- as.data.frame(lapply(satisfaction_data,
                                          function(x) round(pmin(10, pmax(1, x)))))

head(satisfaction_data)
  sat1_overall sat2_expectations sat3_ideal sat4_recommend random_noise
1            8                 8          9              8            4
2            7                 7          6              7            5
3            7                 8          7              7            3
4            8                 8          7              8            7
5            7                 7          8              8            3
6            7                 8          6              7            6

12.6.3 Ejecución y diagnóstico del análisis de fiabilidad

Se utiliza el paquete psych, el estándar de referencia en R para este tipo de análisis.

12.6.3.1 Paso 1: análisis de fiabilidad de la escala inicial (5 ítems)

Code
initial_alpha <- psych::alpha(satisfaction_data)
Warning in psych::alpha(satisfaction_data): Some items were negatively correlated with the first principal component and probably 
should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
Some items ( random_noise ) were negatively correlated with the first principal component and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
Code
print(initial_alpha, digits = 2)
$total
 raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
      0.61      0.76     0.8      0.39 3.2 0.041  6.6 0.8     0.61

$alpha.drop
                  raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r
sat1_overall           0.46      0.66    0.71      0.33 1.9    0.056 0.1494
sat2_expectations      0.47      0.67    0.72      0.34 2.0    0.056 0.1662
sat3_ideal             0.45      0.64    0.67      0.31 1.8    0.057 0.1241
sat4_recommend         0.48      0.66    0.70      0.33 1.9    0.055 0.1396
random_noise           0.89      0.89    0.86      0.67 8.1    0.010 0.0031
                  med.r
sat1_overall       0.32
sat2_expectations  0.33
sat3_ideal         0.31
sat4_recommend     0.31
random_noise       0.68

$item.stats
                    n raw.r std.r  r.cor r.drop mean   sd
sat1_overall      300  0.75  0.83  0.796  0.595  7.0 1.03
sat2_expectations 300  0.74  0.81  0.757  0.588  7.0 0.99
sat3_ideal        300  0.77  0.86  0.867  0.627  7.0 1.03
sat4_recommend    300  0.73  0.83  0.803  0.585  7.0 0.98
random_noise      300  0.49  0.26 -0.023 -0.023  5.1 2.03

$response.freq
                      1     2    3      4     5    6    7     8     9     10
sat1_overall      0.000 0.000 0.00 0.0100 0.043 0.26 0.40 0.217 0.063 0.0067
sat2_expectations 0.000 0.000 0.00 0.0067 0.053 0.26 0.37 0.273 0.037 0.0033
sat3_ideal        0.000 0.000 0.00 0.0067 0.060 0.25 0.40 0.207 0.077 0.0000
sat4_recommend    0.000 0.000 0.00 0.0067 0.033 0.26 0.39 0.250 0.053 0.0033
random_noise      0.033 0.053 0.16 0.1433 0.190 0.17 0.12 0.083 0.020 0.0233
                  miss
sat1_overall         0
sat2_expectations    0
sat3_ideal           0
sat4_recommend       0
random_noise         0

$keys
$keys[[1]]
[1] "sat1_overall"      "sat2_expectations" "sat3_ideal"       
[4] "sat4_recommend"    "random_noise"     


$scores
  [1] 7.4 6.4 6.4 7.6 6.6 6.8 7.6 6.4 8.2 5.4 7.2 8.8 6.0 6.8 6.6 7.0 6.8 4.2
 [19] 5.2 7.0 6.2 6.6 6.4 7.6 8.2 6.2 6.6 5.4 6.2 6.4 7.0 7.0 7.2 7.0 7.4 5.8
 [37] 6.0 6.2 5.0 6.4 6.6 6.2 6.0 5.6 5.4 7.2 5.6 8.0 6.2 6.4 7.4 6.0 7.8 6.6
 [55] 6.0 6.2 7.2 6.6 3.8 7.0 6.8 6.8 6.8 8.2 6.4 8.0 7.2 7.6 7.0 7.8 6.0 6.0
 [73] 7.4 6.8 6.2 7.6 7.2 7.6 5.4 6.0 7.4 5.8 7.0 7.4 5.4 6.4 6.2 6.4 7.8 7.4
 [91] 8.0 6.2 7.0 7.6 5.8 6.0 5.4 5.0 7.6 6.6 7.6 8.0 6.4 8.0 6.0 7.4 6.4 6.0
[109] 7.6 7.0 6.4 7.0 6.4 6.0 5.8 5.8 6.0 8.0 5.4 6.8 5.8 6.0 6.0 6.0 6.6 6.6
[127] 6.0 5.4 5.4 7.0 7.4 6.0 6.2 7.4 7.8 7.2 6.2 7.2 6.4 7.4 6.8 6.0 5.8 6.8
[145] 6.8 7.4 6.4 5.8 6.6 5.8 6.2 5.0 7.4 6.4 6.4 5.6 6.8 6.6 6.2 7.6 7.4 6.8
[163] 7.4 6.0 6.4 7.6 6.0 7.8 5.4 7.0 7.4 6.2 5.0 7.8 7.4 6.2 5.8 7.6 6.4 7.2
[181] 7.2 5.8 6.0 6.8 6.8 6.0 6.8 7.0 6.4 6.2 7.0 6.8 7.2 6.2 6.2 7.2 7.0 7.6
[199] 8.8 6.0 6.2 6.8 6.8 8.6 5.4 6.4 6.6 6.4 6.4 6.4 5.4 8.0 7.0 6.4 7.2 7.2
[217] 6.6 7.4 6.0 6.4 6.4 6.8 6.6 6.0 6.6 6.2 6.4 6.2 7.2 6.8 5.4 7.2 5.4 5.8
[235] 6.0 6.0 7.2 6.8 7.6 5.6 5.6 7.4 7.0 7.4 6.0 7.0 7.0 6.0 7.8 6.0 5.2 6.2
[253] 6.0 7.0 7.2 5.8 6.2 6.0 6.6 5.8 7.8 6.8 7.0 5.8 7.2 6.8 7.2 7.0 4.2 7.0
[271] 7.0 6.2 5.8 6.6 6.4 8.2 6.6 6.0 8.0 7.6 7.4 6.0 7.0 6.4 6.0 6.8 8.2 5.6
[289] 4.8 6.8 6.8 6.8 6.0 7.6 6.8 6.6 5.8 7.4 6.6 5.4

$nvar
[1] 5

$boot.ci
NULL

$boot
NULL

$feldt

   95% confidence boundaries (Feldt)
 lower alpha upper
  0.54  0.61  0.68

$Unidim
$Unidim$Unidim
[1] 0.6


$var.r
[1] 0.13

$Fit
$Fit$Fit.off
[1] 0.76


$call
psych::alpha(x = satisfaction_data)

$title
NULL

attr(,"class")
[1] "psych" "alpha"

Interpretación de los resultados iniciales:

  1. Fiabilidad global (raw_alpha): 0.61. Según los umbrales habituales, este valor es “Aceptable” pero no alcanza “Bueno” (0,80), lo que sugiere que la escala puede mejorarse.

  2. Estadísticas ítem-total: la tabla clave para el diagnóstico.

    • Correlación ítem-total corregida (r.cor): los primeros cuatro ítems tienen correlaciones muy altas y positivas con el resto de la escala, muy por encima de 0,30. El ítem random_noise tiene una correlación de -0.02, prácticamente cero: una señal inequívoca de que este ítem no mide lo mismo que los demás.
    • Alfa si se elimina el ítem (alpha.drop): eliminar cualquiera de los primeros cuatro ítems reduciría el alfa de la escala, confirmando que son elementos valiosos. Eliminar random_noise, en cambio, aumentaría el alfa drásticamente a 0.89, 0.89, 0.86, 0.67, 8.12, 0.01, 0, 0.68: evidencia definitiva de que es un ítem perjudicial para la fiabilidad de la medida.

12.6.3.2 Paso 2: purificación de la escala y reevaluación

Con base en el diagnóstico, la decisión es clara: eliminar random_noise y recalcular la fiabilidad de la escala purificada de 4 ítems.

Code
satisfaction_clean <- satisfaction_data[, c("sat1_overall", "sat2_expectations",
                                            "sat3_ideal", "sat4_recommend")]

final_alpha <- psych::alpha(satisfaction_clean)
print(final_alpha, digits = 2)
$total
 raw_alpha std.alpha G6(smc) average_r S/N  ase mean   sd median_r
      0.89      0.89    0.86      0.67 8.1 0.01    7 0.87     0.68

$alpha.drop
                  raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r
sat1_overall           0.86      0.86    0.81      0.68 6.3    0.014 0.0036
sat2_expectations      0.88      0.88    0.83      0.71 7.3    0.012 0.0011
sat3_ideal             0.83      0.83    0.77      0.63 5.0    0.017 0.0016
sat4_recommend         0.86      0.86    0.81      0.67 6.0    0.014 0.0042
                  med.r
sat1_overall       0.68
sat2_expectations  0.72
sat3_ideal         0.62
sat4_recommend     0.68

$item.stats
                    n raw.r std.r r.cor r.drop mean   sd
sat1_overall      300  0.86  0.86  0.79   0.75    7 1.03
sat2_expectations 300  0.83  0.83  0.74   0.70    7 0.99
sat3_ideal        300  0.91  0.90  0.87   0.82    7 1.03
sat4_recommend    300  0.87  0.87  0.81   0.76    7 0.98

$response.freq
                       4     5    6    7    8     9     10 miss
sat1_overall      0.0100 0.043 0.26 0.40 0.22 0.063 0.0067    0
sat2_expectations 0.0067 0.053 0.26 0.37 0.27 0.037 0.0033    0
sat3_ideal        0.0067 0.060 0.25 0.40 0.21 0.077 0.0000    0
sat4_recommend    0.0067 0.033 0.26 0.39 0.25 0.053 0.0033    0

$keys
$keys[[1]]
[1] "sat1_overall"      "sat2_expectations" "sat3_ideal"       
[4] "sat4_recommend"   


$scores
  [1] 8.2 6.8 7.2 7.8 7.5 7.0 7.8 7.2 8.5 6.5 7.8 9.0 6.0 6.8 7.2 7.2 6.8 4.8
 [19] 4.8 8.2 6.8 5.8 6.5 8.2 8.5 6.5 6.8 5.8 7.5 6.5 7.8 7.8 7.8 6.8 7.8 5.5
 [37] 6.0 6.5 4.8 6.8 7.5 6.2 7.2 6.2 5.5 7.8 6.0 8.2 7.0 7.8 7.5 6.2 8.5 7.2
 [55] 7.0 7.0 7.5 7.0 4.2 7.2 6.8 7.2 7.2 8.2 6.5 8.2 7.8 7.5 7.5 8.0 6.5 6.8
 [73] 7.5 6.0 6.8 7.5 7.8 7.8 6.0 6.0 8.5 6.8 7.2 7.2 6.0 7.2 7.0 7.0 8.2 7.8
 [91] 8.5 6.0 7.8 8.2 5.8 6.5 6.0 5.8 7.0 7.8 8.2 7.8 6.2 8.8 6.0 7.0 6.8 6.5
[109] 7.5 6.5 7.2 7.2 6.8 6.0 5.8 6.0 6.0 9.2 6.2 7.0 6.0 6.2 7.0 6.5 7.0 7.2
[127] 6.2 5.2 5.5 7.2 8.0 6.5 6.8 7.8 8.0 6.5 7.0 8.0 6.5 7.2 6.8 6.5 6.2 6.5
[145] 6.5 8.0 6.0 6.0 7.5 6.0 6.5 5.8 8.0 7.0 6.5 6.0 7.0 6.8 6.8 8.2 6.8 6.5
[163] 7.2 6.2 7.2 8.0 6.2 7.2 6.5 7.5 7.2 7.5 5.2 8.2 8.0 7.0 6.0 7.5 7.5 7.0
[181] 7.2 6.5 7.0 7.2 7.0 5.8 7.2 7.2 6.0 6.0 7.0 7.0 7.5 6.0 6.0 7.8 7.2 7.5
[199] 9.0 6.8 5.8 7.2 8.0 8.8 5.5 6.2 6.0 6.2 7.0 6.8 6.0 9.2 7.2 7.0 7.5 7.2
[217] 6.8 8.2 7.0 6.8 7.2 7.0 6.5 6.0 7.5 7.0 7.0 6.5 6.5 7.8 6.5 7.8 6.0 7.0
[235] 6.8 6.5 8.2 7.0 7.8 6.0 6.5 7.8 8.0 8.5 6.2 8.0 7.8 6.8 8.2 6.8 5.8 7.0
[253] 6.2 7.0 8.2 6.0 6.8 6.8 6.5 6.2 7.8 7.5 7.2 5.5 6.8 7.8 7.8 7.0 4.2 7.2
[271] 7.8 7.0 7.0 6.8 7.0 8.2 7.5 6.5 8.2 8.5 7.8 5.5 6.5 6.8 6.8 7.8 9.2 6.0
[289] 5.2 7.0 6.5 7.5 6.8 9.0 6.8 7.0 7.0 8.0 7.0 6.0

$nvar
[1] 4

$boot.ci
NULL

$boot
NULL

$feldt

   95% confidence boundaries (Feldt)
 lower alpha upper
  0.87  0.89  0.91

$Unidim
$Unidim$Unidim
[1] 0.95


$var.r
[1] 0.0031

$Fit
$Fit$Fit.off
[1] 0.98


$call
psych::alpha(x = satisfaction_clean)

$title
NULL

attr(,"class")
[1] "psych" "alpha"

Interpretación de los resultados finales:

  • Fiabilidad global: 0.89, “Excelente” — confianza total en la consistencia interna de la medida de satisfacción.
  • Estadísticas ítem-total: ahora todos los ítems tienen correlaciones r.cor muy altas y positivas, y el alpha.drop de cada uno es inferior al alfa global, indicando que los cuatro ítems contribuyen de forma sólida y coherente a la escala.

12.6.3.3 Paso 3: cálculo del omega de McDonald

Como alternativa más robusta, se calcula el omega de McDonald para la escala final de 4 ítems:

Code
final_omega <- psych::omega(satisfaction_clean)
Loading required namespace: GPArotation

Code
print(final_omega, digits = 2)
$omega_h
[1] 0.062

$omega.lim
[1] 0.67

$alpha
[1] -2.5

$omega.tot
[1] 0.092

$G6
[1] -0.2

$schmid
Schmid-Leiman analysis 
Call: schmid(model = m, nfactors = nfactors, fm = fm, digits = digits, 
    rotate = rotate, n.obs = n.obs, option = option, Phi = Phi, 
    covar = covar, two.ok = two.ok)

Schmid Leiman Factor loadings greater than  0.2 
                      g   F1*   F2*   F3*   h2   h2   u2   p2
sat1_overall-           -0.81             0.66 0.66 0.34 0.01
sat2_expectations        0.75             0.58 0.58 0.42 0.00
sat3_ideal               0.90             0.82 0.82 0.18 0.01
sat4_recommend-         -0.82             0.69 0.69 0.31 0.02

With eigenvalues of:
   g  F1*  F2*  F3*   h2 
0.02 2.71 0.02 0.00 1.92 

general/max  0.01   max/min =   33851.67
mean percent general =  0.01    with sd =  0.01 and cv of  0.82 

 The orthogonal loadings were 
Unstandardized loadings based upon covariance matrix
                    F1   F2    F3   h2   u2   H2   U2
sat1_overall      0.51 0.64  0.04 0.66 0.34 0.66 0.34
sat2_expectations 0.62 0.44 -0.02 0.58 0.42 0.58 0.42
sat3_ideal        0.69 0.58  0.07 0.82 0.18 0.82 0.18
sat4_recommend    0.55 0.63 -0.05 0.69 0.31 0.69 0.31

                 F1   F2   F3
SS loadings    1.42 1.32 0.01
Proportion Var 0.35 0.33 0.00
Cumulative Var 0.35 0.69 0.69

The degrees of freedom are -3  and the fit is  0 
The number of observations was  300  with Chi Square =  0  with prob <  NA
The root mean square of the residuals is  0 
The df corrected root mean square of the residuals is  NA
$key
     sat1_overall sat2_expectations        sat3_ideal    sat4_recommend 
               -1                 1                 1                -1 

$stats
Call: fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, 
    alpha = alpha, fm = fm, smooth = smooth, coarse = coarse, 
    dof = dof, Grice = Grice)

Test of the hypothesis that 4 factors are sufficient.

The degrees of freedom for the model is -4  and the fit was  0 
The number of observations was  300  with Chi Square =  0.01  with prob <  NA 

Measures of factor score adequacy             
 Correlation of scores with factors            0.28 0.95 0.21 0.02
Multiple R square of scores with factors       0.08 0.91 0.05 0
Minimum correlation of factor score estimates  -0.85 0.82 -0.91 -1 

$ECV
     g 
0.0087 

$gstats
Call: fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, 
    alpha = alpha, fm = fm, smooth = smooth, coarse = coarse, 
    dof = dof, Grice = Grice)

Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the model is 2  and the fit was  2.32 
The number of observations was  300  with Chi Square =  687.04  with prob <  6.5e-150 

Measures of factor score adequacy             
 Correlation of scores with factors            0.15
Multiple R square of scores with factors       0.02
Minimum correlation of factor score estimates  -0.95 

$call
omegah(m = m, nfactors = nfactors, fm = fm, key = key, flip = flip, 
    digits = digits, title = title, sl = sl, labels = labels, 
    plot = plot, n.obs = n.obs, rotate = rotate, Phi = Phi, option = option, 
    covar = covar)

$title
[1] "Omega"

$R
                  sat1_overall- sat2_expectations sat3_ideal sat4_recommend-
sat1_overall-              1.00             -0.59      -0.72            0.67
sat2_expectations         -0.59              1.00       0.68           -0.62
sat3_ideal                -0.72              0.68       1.00           -0.73
sat4_recommend-            0.67             -0.62      -0.73            1.00

$model
$model$sem
      Path                                    Parameter             
 [1,] "g->sat1_overall"                       "sat1_overall-"       
 [2,] "g->sat2_expectations"                  "sat2_expectations"   
 [3,] "g->sat3_ideal"                         "sat3_ideal"          
 [4,] "g->sat4_recommend"                     "sat4_recommend-"     
 [5,] "F1*->sat1_overall"                     "F1*sat1_overall-"    
 [6,] "F1*->sat2_expectations"                "F1*sat2_expectations"
 [7,] "F1*->sat3_ideal"                       "F1*sat3_ideal"       
 [8,] "F1*->sat4_recommend"                   "F1*sat4_recommend-"  
 [9,] "sat1_overall<->sat1_overall"           "e1"                  
[10,] "sat2_expectations<->sat2_expectations" "e2"                  
[11,] "sat3_ideal<->sat3_ideal"               "e3"                  
[12,] "sat4_recommend<->sat4_recommend"       "e4"                  
[13,] "F1*<->F1*"                             NA                    
[14,] "F2*<->F2*"                             NA                    
[15,] "F3*<->F3*"                             NA                    
[16,] "g <->g"                                NA                    
      Initial Value
 [1,] NA           
 [2,] NA           
 [3,] NA           
 [4,] NA           
 [5,] NA           
 [6,] NA           
 [7,] NA           
 [8,] NA           
 [9,] NA           
[10,] NA           
[11,] NA           
[12,] NA           
[13,] "1"          
[14,] "1"          
[15,] "1"          
[16,] "1"          

$model$lavaan
[1] g =~ +sat1_overall+sat2_expectations+sat3_ideal+sat4_recommend        
[2] F1=~  + sat1_overall + sat2_expectations + sat3_ideal + sat4_recommend
[3] F2=~                                                                  
[4] F3=~                                                                  


$omega.group
    total general   group
g   0.092   0.062 0.00043
F1* 0.062   0.062 0.00043
F2*    NA      NA      NA
F3*    NA      NA      NA

$scores
             g      F1*     F2*      F3*
  [1,]  1.3000  0.60510 -0.5417  0.07820
  [2,] -0.3407 -0.42505  0.0238 -0.02354
  [3,]  0.1049  0.17999 -0.2346  0.00214
  [4,]  0.6022 -0.28110 -0.4750  0.03037
  [5,]  0.6811  0.21632 -0.0367  0.04646
  [6,] -0.2440 -0.26311 -0.2013 -0.02177
  [7,]  0.7037  0.02863 -0.5356  0.03641
  [8,]  0.3322 -0.22678 -0.0034  0.02255
  [9,]  1.6240  0.36027 -0.5356  0.10037
 [10,] -0.4374 -0.58699  0.2490 -0.02530
 [11,]  0.8544  0.00006 -0.2832  0.05252
 [12,]  1.8940  0.30594 -1.0072  0.10819
 [13,] -1.0112  0.25231  0.5107 -0.05783
 [14,] -0.1651  0.23431  0.2370 -0.00569
 [15,]  0.1049  0.17999 -0.2346  0.00214
 [16,]  0.1049  0.17999 -0.2346  0.00214
 [17,]  0.0622 -0.17246  0.4682  0.01473
 [18,] -2.2015 -0.02501  0.9823 -0.12961
 [19,] -2.0508 -0.05358  1.2348 -0.11350
 [20,]  1.1244 -0.05426 -0.7548  0.06034
 [21,] -0.1651  0.23431  0.2370 -0.00569
 [22,] -1.2836 -0.56900  0.5227 -0.07744
 [23,] -0.4374 -0.58699  0.2490 -0.02530
 [24,]  1.2751 -0.08284 -0.5023  0.07646
 [25,]  1.3226  0.41741 -1.0406  0.06814
 [26,] -0.4890  0.47915  0.2309 -0.02786
 [27,] -0.3407 -0.42505  0.0238 -0.02354
 [28,] -1.2836 -0.56900  0.5227 -0.07744
 [29,]  0.4289 -0.06484 -0.2286  0.02431
 [30,] -0.2618  0.07238  0.4622 -0.00745
 [31,]  0.6272  0.40683 -0.5144  0.03211
 [32,]  0.7778  0.37826 -0.2619  0.04822
 [33,]  0.7778  0.37826 -0.2619  0.04822
 [34,] -0.3407 -0.42505  0.0238 -0.02354
 [35,]  0.6272  0.40683 -0.5144  0.03211
 [36,] -1.3803 -0.73094  0.7479 -0.07921
 [37,] -0.9347 -0.12589  0.4894 -0.05353
 [38,] -0.4890  0.47915  0.2309 -0.02786
 [39,] -2.2265 -0.71294  1.0216 -0.13135
 [40,] -0.3407 -0.42505  0.0238 -0.02354
 [41,]  0.4289 -0.06484 -0.2286  0.02431
 [42,] -0.7614 -0.34216  0.2430 -0.04747
 [43,]  0.5844  0.05438  0.1885  0.04470
 [44,] -0.8379  0.03604  0.2642 -0.05177
 [45,] -1.3803 -0.73094  0.7479 -0.07921
 [46,]  0.8544  0.00006 -0.2832  0.05252
 [47,] -0.8831 -1.19203  0.5075 -0.05097
 [48,]  1.1985  0.29536 -0.4811  0.07216
 [49,]  0.0082  0.01805 -0.0095  0.00038
 [50,]  0.6022 -0.28110 -0.4750  0.03037
 [51,]  0.3032  0.65167 -0.5204  0.00994
 [52,] -0.5857  0.31721  0.4561 -0.02962
 [53,]  1.4483 -0.29910 -0.7488  0.08252
 [54,]  0.1049  0.17999 -0.2346  0.00214
 [55,] -0.2190  0.42483 -0.2407 -0.02004
 [56,]  0.0848 -0.36015 -0.0307  0.00467
 [57,]  0.6811  0.21632 -0.0367  0.04646
 [58,]  0.0332  0.70599 -0.0488  0.00211
 [59,] -2.4715  0.02932  1.4539 -0.13744
 [60,]  0.2806  0.83936 -0.0215  0.01999
 [61,]  0.0622 -0.17246  0.4682  0.01473
 [62,]  0.1049  0.17999 -0.2346  0.00214
 [63,]  0.3322 -0.22678 -0.0034  0.02255
 [64,]  1.0478  0.32394 -0.7335  0.05605
 [65,] -0.4890  0.47915  0.2309 -0.02786
 [66,]  1.3000  0.60510 -0.5417  0.07820
 [67,]  0.6272  0.40683 -0.5144  0.03211
 [68,]  0.4289 -0.06484 -0.2286  0.02431
 [69,]  0.5054 -0.44304 -0.2499  0.02861
 [70,]  0.9511  0.16200 -0.5084  0.05428
 [71,] -0.6647 -0.18022  0.0178 -0.04571
 [72,] -0.3407 -0.42505  0.0238 -0.02354
 [73,]  0.5304  0.24489 -0.2892  0.03035
 [74,] -0.7590  0.53347  0.7026 -0.03568
 [75,] -0.3157  0.26289 -0.0155 -0.02180
 [76,]  0.6811  0.21632 -0.0367  0.04646
 [77,]  0.8544  0.00006 -0.2832  0.05252
 [78,]  0.7778  0.37826 -0.2619  0.04822
 [79,] -0.9347 -0.12589  0.4894 -0.05353
 [80,] -1.1103 -0.78526  0.2763 -0.07138
 [81,]  1.4733  0.38884 -0.7881  0.08426
 [82,] -0.0885 -0.14389  0.2157 -0.00139
 [83,]  0.1049  0.17999 -0.2346  0.00214
 [84,]  0.1815 -0.19821 -0.2559  0.00644
 [85,] -1.1869 -0.40706  0.2976 -0.07568
 [86,]  0.3571  0.46116 -0.0428  0.02429
 [87,]  0.2354 -0.38872  0.2218  0.02079
 [88,]  0.0332  0.70599 -0.0488  0.00211
 [89,]  1.2751 -0.08284 -0.5023  0.07646
 [90,]  0.8544  0.00006 -0.2832  0.05252
 [91,]  1.6240  0.36027 -0.5356  0.10037
 [92,] -0.9347 -0.12589  0.4894 -0.05353
 [93,]  0.6022 -0.28110 -0.4750  0.03037
 [94,]  1.3000  0.60510 -0.5417  0.07820
 [95,] -1.0314 -0.28783  0.7146 -0.05529
 [96,] -0.4374 -0.58699  0.2490 -0.02530
 [97,] -0.9347 -0.12589  0.4894 -0.05353
 [98,] -1.0314 -0.28783  0.7146 -0.05529
 [99,]  0.0082  0.01805 -0.0095  0.00038
[100,]  0.6022 -0.28110 -0.4750  0.03037
[101,]  1.1494  0.63367 -0.7941  0.06208
[102,]  0.7778  0.37826 -0.2619  0.04822
[103,] -0.6107 -0.37073  0.4955 -0.03136
[104,]  1.7973  0.14401 -0.7821  0.10643
[105,] -0.9347 -0.12589  0.4894 -0.05353
[106,]  0.0082  0.01805 -0.0095  0.00038
[107,] -0.0885 -0.14389  0.2157 -0.00139
[108,] -0.4374 -0.58699  0.2490 -0.02530
[109,]  0.2782 -0.03627 -0.4811  0.00820
[110,] -0.4890  0.47915  0.2309 -0.02786
[111,]  0.3322 -0.22678 -0.0034  0.02255
[112,]  0.1049  0.17999 -0.2346  0.00214
[113,] -0.1651  0.23431  0.2370 -0.00569
[114,] -0.9347 -0.12589  0.4894 -0.05353
[115,] -1.1079  0.09037  0.7359 -0.05959
[116,] -0.9347 -0.12589  0.4894 -0.05353
[117,] -1.0112  0.25231  0.5107 -0.05783
[118,]  2.2179  0.06111 -1.0012  0.13036
[119,] -0.6107 -0.37073  0.4955 -0.03136
[120,]  0.0848 -0.36015 -0.0307  0.00467
[121,] -0.9347 -0.12589  0.4894 -0.05353
[122,] -0.6873  0.00747  0.5167 -0.03566
[123,]  0.0332  0.70599 -0.0488  0.00211
[124,] -0.2618  0.07238  0.4622 -0.00745
[125,]  0.0082  0.01805 -0.0095  0.00038
[126,]  0.1049  0.17999 -0.2346  0.00214
[127,] -0.8379  0.03604  0.2642 -0.05177
[128,] -1.5536 -0.51467  0.9944 -0.08527
[129,] -1.6075 -0.32416  0.5167 -0.09962
[130,]  0.3322 -0.22678 -0.0034  0.02255
[131,]  0.9511  0.16200 -0.5084  0.05428
[132,] -0.4890  0.47915  0.2309 -0.02786
[133,] -0.3157  0.26289 -0.0155 -0.02180
[134,]  0.7778  0.37826 -0.2619  0.04822
[135,]  0.9511  0.16200 -0.5084  0.05428
[136,] -0.6647 -0.18022  0.0178 -0.04571
[137,]  0.1839  0.67742  0.2037  0.01823
[138,]  0.9511  0.16200 -0.5084  0.05428
[139,] -0.5140 -0.20879  0.2703 -0.02960
[140,]  0.1815 -0.19821 -0.2559  0.00644
[141,] -0.2642 -0.80325  0.0026 -0.01924
[142,] -0.5140 -0.20879  0.2703 -0.02960
[143,] -0.7614 -0.34216  0.2430 -0.04747
[144,] -0.4374 -0.58699  0.2490 -0.02530
[145,] -0.1852 -0.30583  0.4409 -0.00315
[146,]  0.9511  0.16200 -0.5084  0.05428
[147,] -1.0853 -0.09732  0.2370 -0.06964
[148,] -0.9347 -0.12589  0.4894 -0.05353
[149,]  0.4289 -0.06484 -0.2286  0.02431
[150,] -0.9347 -0.12589  0.4894 -0.05353
[151,] -0.2618  0.07238  0.4622 -0.00745
[152,] -1.0314 -0.28783  0.7146 -0.05529
[153,]  0.9511  0.16200 -0.5084  0.05428
[154,]  0.0082  0.01805 -0.0095  0.00038
[155,] -0.1852 -0.30583  0.4409 -0.00315
[156,] -0.9347 -0.12589  0.4894 -0.05353
[157,] -0.1425  0.04662 -0.2619 -0.01574
[158,] -0.3157  0.26289 -0.0155 -0.02180
[159,] -0.4914 -0.39648 -0.2286 -0.03965
[160,]  1.3000  0.60510 -0.5417  0.07820
[161,] -0.3157  0.26289 -0.0155 -0.02180
[162,] -0.4374 -0.58699  0.2490 -0.02530
[163,]  0.3322 -0.22678 -0.0034  0.02255
[164,] -0.8379  0.03604  0.2642 -0.05177
[165,]  0.1049  0.17999 -0.2346  0.00214
[166,]  0.9511  0.16200 -0.5084  0.05428
[167,] -0.7614 -0.34216  0.2430 -0.04747
[168,]  0.1815 -0.19821 -0.2559  0.00644
[169,] -0.2618  0.07238  0.4622 -0.00745
[170,]  0.4539  0.62309 -0.2680  0.02605
[171,]  0.1049  0.17999 -0.2346  0.00214
[172,]  0.6811  0.21632 -0.0367  0.04646
[173,] -1.7043 -0.48610  0.7419 -0.10138
[174,]  1.4507  0.57653 -0.2892  0.09431
[175,]  0.9511  0.16200 -0.5084  0.05428
[176,]  0.0082  0.01805 -0.0095  0.00038
[177,] -0.9347 -0.12589  0.4894 -0.05353
[178,]  0.4289 -0.06484 -0.2286  0.02431
[179,]  0.5054 -0.44304 -0.2499  0.02861
[180,]  0.0082  0.01805 -0.0095  0.00038
[181,]  0.3322 -0.22678 -0.0034  0.02255
[182,] -0.5140 -0.20879  0.2703 -0.02960
[183,]  0.0082  0.01805 -0.0095  0.00038
[184,]  0.3322 -0.22678 -0.0034  0.02255
[185,]  0.0082  0.01805 -0.0095  0.00038
[186,] -1.2836 -0.56900  0.5227 -0.07744
[187,]  0.1815 -0.19821 -0.2559  0.00644
[188,]  0.1049  0.17999 -0.2346  0.00214
[189,] -0.9347 -0.12589  0.4894 -0.05353
[190,] -1.1619  0.28088  0.2582 -0.07394
[191,]  0.0082  0.01805 -0.0095  0.00038
[192,]  0.0082  0.01805 -0.0095  0.00038
[193,]  0.4289 -0.06484 -0.2286  0.02431
[194,] -1.1103 -0.78526  0.2763 -0.07138
[195,] -0.9347 -0.12589  0.4894 -0.05353
[196,]  0.8544  0.00006 -0.2832  0.05252
[197,]  0.4337  0.08296 -0.0640  0.02859
[198,]  0.6811  0.21632 -0.0367  0.04646
[199,]  1.8940  0.30594 -1.0072  0.10819
[200,] -0.0635  0.54405  0.1764  0.00035
[201,] -1.2836 -0.56900  0.5227 -0.07744
[202,] -0.0457  0.20856 -0.4871 -0.01397
[203,]  0.9511  0.16200 -0.5084  0.05428
[204,]  1.5700  0.55078 -1.0133  0.08602
[205,] -1.2047 -0.07157  0.9611 -0.06136
[206,] -0.6107 -0.37073  0.4955 -0.03136
[207,] -0.9347 -0.12589  0.4894 -0.05353
[208,] -0.8379  0.03604  0.2642 -0.05177
[209,]  0.1589 -0.01052  0.2430  0.01649
[210,] -0.3157  0.26289 -0.0155 -0.02180
[211,] -0.8581 -0.50409  0.4682 -0.04923
[212,]  1.9907  0.46788 -1.2324  0.10995
[213,]  0.1049  0.17999 -0.2346  0.00214
[214,]  0.0082  0.01805 -0.0095  0.00038
[215,]  0.6070 -0.13331 -0.3104  0.03465
[216,]  0.4087 -0.60498 -0.0247  0.02685
[217,] -0.1651  0.23431  0.2370 -0.00569
[218,]  1.0478  0.32394 -0.7335  0.05605
[219,]  0.0848 -0.36015 -0.0307  0.00467
[220,] -0.3923  0.64109  0.0058 -0.02610
[221,]  0.4087 -0.60498 -0.0247  0.02685
[222,]  0.0082  0.01805 -0.0095  0.00038
[223,] -0.4125  0.10095  0.2097 -0.02356
[224,] -0.9347 -0.12589  0.4894 -0.05353
[225,]  0.3548 -0.41447 -0.5023  0.01250
[226,]  0.0082  0.01805 -0.0095  0.00038
[227,]  0.0082  0.01805 -0.0095  0.00038
[228,] -0.2618  0.07238  0.4622 -0.00745
[229,] -0.6647 -0.18022  0.0178 -0.04571
[230,]  0.7778  0.37826 -0.2619  0.04822
[231,] -0.4890  0.47915  0.2309 -0.02786
[232,]  0.7778  0.37826 -0.2619  0.04822
[233,] -0.9347 -0.12589  0.4894 -0.05353
[234,]  0.0082  0.01805 -0.0095  0.00038
[235,] -0.0885 -0.14389  0.2157 -0.00139
[236,] -0.4374 -0.58699  0.2490 -0.02530
[237,]  1.3000  0.60510 -0.5417  0.07820
[238,]  0.0082  0.01805 -0.0095  0.00038
[239,]  0.6022 -0.28110 -0.4750  0.03037
[240,] -0.9347 -0.12589  0.4894 -0.05353
[241,] -0.5140 -0.20879  0.2703 -0.02960
[242,]  0.8544  0.00006 -0.2832  0.05252
[243,]  1.1783 -0.24477 -0.2771  0.07469
[244,]  1.4733  0.38884 -0.7881  0.08426
[245,] -0.6107 -0.37073  0.4955 -0.03136
[246,]  0.8004  0.19057 -0.7608  0.03817
[247,]  0.8544  0.00006 -0.2832  0.05252
[248,] -0.0885 -0.14389  0.2157 -0.00139
[249,]  1.3000  0.60510 -0.5417  0.07820
[250,] -0.3407 -0.42505  0.0238 -0.02354
[251,] -1.1079  0.09037  0.7359 -0.05959
[252,]  0.0082  0.01805 -0.0095  0.00038
[253,] -0.6107 -0.37073  0.4955 -0.03136
[254,]  0.0848 -0.36015 -0.0307  0.00467
[255,]  1.3000  0.60510 -0.5417  0.07820
[256,] -0.9347 -0.12589  0.4894 -0.05353
[257,] -0.3157  0.26289 -0.0155 -0.02180
[258,] -0.1651  0.23431  0.2370 -0.00569
[259,] -0.6647 -0.18022  0.0178 -0.04571
[260,] -0.6107 -0.37073  0.4955 -0.03136
[261,]  0.6272  0.40683 -0.5144  0.03211
[262,]  0.2782 -0.03627 -0.4811  0.00820
[263,]  0.1815 -0.19821 -0.2559  0.00644
[264,] -1.4319  0.33520  0.7298 -0.08177
[265,] -0.1651  0.23431  0.2370 -0.00569
[266,]  0.7778  0.37826 -0.2619  0.04822
[267,]  0.6022 -0.28110 -0.4750  0.03037
[268,]  0.0082  0.01805 -0.0095  0.00038
[269,] -2.4965 -0.65862  1.4933 -0.13917
[270,]  0.1049  0.17999 -0.2346  0.00214
[271,]  0.7778  0.37826 -0.2619  0.04822
[272,]  0.0082  0.01805 -0.0095  0.00038
[273,]  0.0082  0.01805 -0.0095  0.00038
[274,] -0.1651  0.23431  0.2370 -0.00569
[275,]  0.0082  0.01805 -0.0095  0.00038
[276,]  1.3516 -0.46104 -0.5236  0.08076
[277,]  0.5304  0.24489 -0.2892  0.03035
[278,] -0.4890  0.47915  0.2309 -0.02786
[279,]  1.0478  0.32394 -0.7335  0.05605
[280,]  1.7005 -0.01793 -0.5569  0.10467
[281,]  0.8544  0.00006 -0.2832  0.05252
[282,] -1.6841  0.05404  0.5380 -0.10392
[283,] -0.7412  0.19798  0.0391 -0.05001
[284,] -0.3157  0.26289 -0.0155 -0.02180
[285,] -0.0885 -0.14389  0.2157 -0.00139
[286,]  0.5256  0.09710 -0.4538  0.02607
[287,]  2.0673  0.08968 -1.2537  0.11425
[288,] -0.9347 -0.12589  0.4894 -0.05353
[289,] -1.5536 -0.51467  0.9944 -0.08527
[290,] -0.2440 -0.26311 -0.2013 -0.02177
[291,] -0.2618  0.07238  0.4622 -0.00745
[292,]  0.4539  0.62309 -0.2680  0.02605
[293,] -0.0885 -0.14389  0.2157 -0.00139
[294,]  1.8940  0.30594 -1.0072  0.10819
[295,] -0.0885 -0.14389  0.2157 -0.00139
[296,]  0.0082  0.01805 -0.0095  0.00038
[297,] -0.2440 -0.26311 -0.2013 -0.02177
[298,]  0.7755 -0.49737 -0.7215  0.03643
[299,] -0.0683  0.39625  0.0118 -0.00392
[300,] -1.1619  0.28088  0.2582 -0.07394

$Call
psych::omega(m = satisfaction_clean)

attr(,"class")
[1] "psych" "omega"

El omega total es 0.09, confirmando el valor obtenido con el alfa de Cronbach y reforzando la conclusión de que la escala de 4 ítems posee una excelente fiabilidad.

12.6.4 Creación de la puntuación final de la escala

Validada y purificada la escala, se procede a crear una única variable que resuma la “satisfacción del cliente” para cada individuo:

Code
satisfaction_data$satisfaction_score <- rowMeans(satisfaction_clean)

head(satisfaction_data)
  sat1_overall sat2_expectations sat3_ideal sat4_recommend random_noise
1            8                 8          9              8            4
2            7                 7          6              7            5
3            7                 8          7              7            3
4            8                 8          7              8            7
5            7                 7          8              8            3
6            7                 8          6              7            6
  satisfaction_score
1               8.25
2               6.75
3               7.25
4               7.75
5               7.50
6               7.00

La nueva variable satisfaction_score es una medida fiable del constructo latente que se quería medir, lista para utilizarse en análisis posteriores.

12.6.5 Conclusiones y puente hacia el análisis factorial confirmatorio

El análisis de fiabilidad parte de una escala de 5 ítems con fiabilidad aceptable (α = 0.61). A través de un diagnóstico riguroso, se identificó y eliminó un ítem (random_noise) inconsistente con el resto de la escala, resultando en una escala final de 4 ítems con fiabilidad excelente (α = 0.89, ω = 0.09).

Se ha demostrado que la escala es fiable: sus ítems son internamente consistentes. Sin embargo, la fiabilidad no dice nada sobre la validez. ¿Miden realmente estos cuatro ítems un único constructo latente de “satisfacción”? El análisis de fiabilidad asume la unidimensionalidad, pero no la prueba.

Para contrastar formalmente la hipótesis de que estos cuatro ítems son indicadores de un único factor subyacente, hace falta una herramienta más potente que permita probar la estructura del modelo de medida: el análisis factorial confirmatorio (AFC).

12.7 Análisis factorial confirmatorio: la validación del modelo de medida

El análisis de fiabilidad demostró, a través del alfa de Cronbach y el omega de McDonald, que los cuatro ítems de la escala eran internamente consistentes: medían algo de manera fiable y precisa. Sin embargo, la fiabilidad por sí sola deja una pregunta fundamental sin responder: ¿miden realmente estos cuatro ítems un único constructo subyacente de “satisfacción”?

Un alfa alto indica que los ítems están correlacionados, pero no garantiza que sean unidimensionales. Podría existir una escala con dos subdimensiones muy correlacionadas que, juntas, produzcan un alfa alto. Para probar formalmente la estructura de la escala y evaluar si se ajusta a la teoría, hace falta una herramienta más específica: pasar de un enfoque exploratorio a uno confirmatorio. Este es el dominio del análisis factorial confirmatorio (AFC).

El AFC es una técnica de la familia de los modelos de ecuaciones estructurales (SEM) centrada exclusivamente en el modelo de medida. Su objetivo es contrastar estadísticamente si un conjunto de variables observadas (ítems) son indicadores válidos de un número predefinido de constructos latentes (Kline 2016).

12.8 AFC frente a ACP/AFE: explorar frente a confirmar

Conviene entender la diferencia filosófica entre el AFC y las técnicas vistas anteriormente, como el ACP o el análisis factorial exploratorio (AFE):

  • ACP/AFE (exploratorio): no se impone ninguna estructura a los datos. Se le pregunta al algoritmo: “dados estos 12 ítems, ¿cuál es la mejor estructura subyacente que puedes encontrar? ¿Cuántos factores emergen y qué ítems se agrupan en cada uno?”. El investigador deja que los datos guíen el análisis.

  • AFC (confirmatorio): el investigador llega con una teoría o hipótesis fuerte y predefinida. Se le indica al modelo: “se teoriza que los ítems SAT1, SAT2, SAT3 y SAT4 miden un único constructo de ‘satisfacción’; indica si esta teoría es compatible con los datos observados”. El investigador somete su teoría a un contraste estadístico.

En el AFC, el investigador debe especificar exactamente qué ítems miden qué constructo latente, y cuáles no. No se permite que los ítems carguen en factores no teorizados.

12.9 El lenguaje del AFC: la especificación del modelo

Para realizar un AFC hace falta “traducir” la teoría a un lenguaje que el software pueda interpretar, definiendo los componentes del modelo de medida:

  • Variables latentes (constructos): los círculos u óvalos en los diagramas de SEM; representan los constructos inobservables que se quieren medir (por ejemplo, “satisfacción”).
  • Variables observadas (indicadores): los rectángulos; representan los ítems reales del cuestionario (SAT1, SAT2, SAT3, SAT4).
  • Cargas factoriales (λ): las flechas que van de la variable latente a las observadas, representando la fuerza de la relación entre el constructo y cada indicador. Son análogas a los coeficientes de una regresión.
  • Errores de medida (ε): las flechas que apuntan a cada variable observada; representan la varianza de cada ítem no explicada por el constructo latente, el “ruido” o especificidad de cada ítem.

Para el ejemplo de este capítulo, el modelo a probar se especifica así: “existe un factor latente llamado ‘Satisfacción’ medido por cuatro indicadores: SAT1, SAT2, SAT3 y SAT4”.

12.10 La pregunta clave: ¿se ajusta el modelo a los datos?

Una vez especificado el modelo, el software de SEM estima los parámetros (cargas factoriales, varianzas de los errores…) que mejor reproducen la matriz de covarianzas observada en los datos. La pregunta central del AFC es: ¿cuánto se parece la matriz de covarianzas implicada por el modelo teórico a la matriz de covarianzas realmente observada?

Para responder no se utiliza un único indicador, sino un conjunto de índices de bondad de ajuste. No existe un único “mejor” índice; la práctica recomendada es reportar varios de distintas familias para obtener una visión completa del ajuste del modelo (Byrne 2016).

12.10.1 Familia 1: índices de ajuste absoluto

Evalúan cuán bien el modelo reproduce los datos observados, sin compararlo con otro modelo.

  • Test chi-cuadrado (χ²): la prueba de ajuste original. Contrasta H₀: el modelo se ajusta perfectamente a los datos. De forma contraintuitiva, se busca un resultado no significativo (p > 0,05). El test χ² es extremadamente sensible al tamaño muestral (casi siempre significativo con muestras grandes) y a la violación de la normalidad multivariante, por lo que nunca se usa como único criterio (Jöreskog 1969).
  • SRMR (Standardized Root Mean Square Residual): la diferencia promedio entre las correlaciones observadas y las predichas por el modelo. Un valor SRMR < 0,08 se considera indicativo de buen ajuste.

12.10.2 Familia 2: índices de ajuste incremental

Comparan el ajuste del modelo teórico con el de un modelo de línea base o “nulo” (que asume ausencia de correlación entre variables).

  • CFI (Comparative Fit Index) y TLI (Tucker-Lewis Index): los más populares de esta familia, miden la mejora proporcional del modelo respecto al modelo nulo. Valores de CFI/TLI > 0,90 indican ajuste aceptable; > 0,95, ajuste excelente (Hu and Bentler 1999).

12.10.3 Familia 3: índices de ajuste de parsimonia

Evalúan el ajuste teniendo en cuenta la complejidad del modelo (número de parámetros estimados), premiando los modelos que logran buen ajuste con menos parámetros.

  • RMSEA (Root Mean Square Error of Approximation): el índice más importante de esta familia, mide el error de aproximación por grado de libertad. RMSEA < 0,08 indica ajuste aceptable; < 0,06, buen ajuste. Suele reportarse junto a su intervalo de confianza del 90%; un buen modelo tiene el límite superior de ese intervalo por debajo de 0,08.

12.11 Evaluación de los parámetros del modelo

Un buen ajuste global no es suficiente: también hay que inspeccionar los “engranajes” internos del modelo.

  • Cargas factoriales: deben ser estadísticamente significativas (p < 0,05) y sustantivas en magnitud. Las cargas estandarizadas deberían ser > 0,50, idealmente > 0,70, para indicar que el ítem es un buen indicador del constructo (Hair et al. 2019).
  • Varianzas de los errores: deben ser todas positivas. Una varianza de error negativa (un “caso Heywood”) señala que el modelo está gravemente mal especificado.

12.12 El AFC como puerta de entrada a los SEM

El AFC es el primer y más importante paso en cualquier análisis de ecuaciones estructurales: constituye la validación del modelo de medida. Antes de poder probar hipótesis complejas sobre las relaciones entre distintos constructos latentes (¿la “satisfacción” influye en la “lealtad”?), primero hay que demostrar, mediante el AFC, que cada constructo se ha medido de forma válida y fiable por separado.

Una vez validados los modelos de medida con el AFC, pueden unirse en un modelo estructural completo (SEM) para probar las relaciones causales teorizadas entre ellos. Dominar el AFC es, por tanto, la condición indispensable para adentrarse en el modelado de ecuaciones estructurales.

12.13 Aplicación práctica: validando la estructura de la escala de satisfacción

El análisis de fiabilidad partió de una escala de 5 ítems y, tras un proceso de diagnóstico y purificación, llegó a una escala final de 4 ítems con fiabilidad excelente (α = 0,92, ω = 0,92). Se ha demostrado que los ítems son consistentes, pero ahora hace falta responder a una pregunta más profunda: ¿son estos 4 ítems indicadores válidos de un único constructo latente de “satisfacción del cliente”?

12.13.1 Objetivo de la investigación

Objetivo: probar formalmente la hipótesis de que un modelo de un solo factor (“Satisfacción”) se ajusta adecuadamente a los datos observados de los 4 ítems de la escala purificada, evaluando tanto el ajuste global del modelo como la significación y magnitud de las cargas factoriales de cada ítem.

12.13.2 Preparación de los datos

El punto de partida es el conjunto de datos purificado de la sección anterior, con las respuestas de los 300 clientes a los 4 ítems de satisfacción validados:

Code
# Recreate exactly the same purified dataset, to ensure consistency
set.seed(42)
n <- 300

latent_satisfaction <- rnorm(n, 0, 1)

satisfaction_clean <- data.frame(
  sat1_overall      = 7 + 0.85 * latent_satisfaction + rnorm(n, 0, 0.5),
  sat2_expectations = 7 + 0.80 * latent_satisfaction + rnorm(n, 0, 0.6),
  sat3_ideal        = 7 + 0.90 * latent_satisfaction + rnorm(n, 0, 0.4),
  sat4_recommend    = 7 + 0.82 * latent_satisfaction + rnorm(n, 0, 0.5)
)

satisfaction_clean <- as.data.frame(lapply(satisfaction_clean,
                                           function(x) round(pmin(10, pmax(1, x)))))

head(satisfaction_clean)
  sat1_overall sat2_expectations sat3_ideal sat4_recommend
1            8                 8          9              8
2            7                 7          6              7
3            7                 8          7              7
4            8                 8          7              8
5            7                 7          8              8
6            7                 8          6              7

12.13.3 Ejecución del análisis factorial confirmatorio

El proceso en lavaan consta de tres pasos: especificar el modelo, ajustarlo a los datos y examinar los resultados.

12.13.3.1 Paso 1: especificación del modelo

Se traduce la teoría a la sintaxis de lavaan: un factor latente (Satisfaccion) es medido (=~) por los cuatro ítems.

Code
cfa_model <- '
  Satisfaccion =~ sat1_overall + sat2_expectations + sat3_ideal + sat4_recommend
'

12.13.3.2 Paso 2: estimación del modelo

Code
cfa_fit <- lavaan::cfa(cfa_model, data = satisfaction_clean)

12.13.3.3 Paso 3: examen de los resultados

Code
summary(cfa_fit, fit.measures = TRUE, standardized = TRUE)
Length  Class   Mode 
     1 lavaan     S4 

12.13.4 Interpretación de los resultados

La evaluación se realiza en dos niveles: el ajuste global del modelo y el ajuste local de los parámetros individuales.

12.13.4.1 Evaluación del ajuste global

  • Test chi-cuadrado: χ² = 0.75 con 2 grados de libertad, p = 0.686. Como p > 0,05, no se rechaza H₀ de que el modelo se ajusta perfectamente a los datos.

  • Índices de ajuste incremental: CFI = 1, TLI = 1.005. Ambos muy por encima del umbral de 0,95: ajuste excelente.

  • Índices de ajuste absoluto y parsimonia: RMSEA = 0 (intervalo de confianza del 90%: 0 a 0.086), muy por debajo de 0,06. SRMR = 0.005, muy por debajo de 0,08.

Conclusión del ajuste global: todos los índices convergen en la misma conclusión: el modelo de un solo factor se ajusta a los datos de manera excepcional. La teoría de que los cuatro ítems miden un único constructo de “satisfacción” está fuertemente respaldada por la evidencia empírica.

12.13.4.2 Evaluación de los parámetros del modelo (ajuste local)

Code
lavaan::standardizedSolution(cfa_fit)
                lhs op               rhs est.std    se      z pvalue ci.lower
1      Satisfaccion =~      sat1_overall   0.804 0.025 32.516      0    0.755
2      Satisfaccion =~ sat2_expectations   0.753 0.029 26.121      0    0.696
3      Satisfaccion =~        sat3_ideal   0.898 0.018 49.860      0    0.863
4      Satisfaccion =~    sat4_recommend   0.822 0.023 35.323      0    0.777
5      sat1_overall ~~      sat1_overall   0.354 0.040  8.897      0    0.276
6 sat2_expectations ~~ sat2_expectations   0.433 0.043  9.973      0    0.348
7        sat3_ideal ~~        sat3_ideal   0.194 0.032  5.988      0    0.130
8    sat4_recommend ~~    sat4_recommend   0.324 0.038  8.453      0    0.249
9      Satisfaccion ~~      Satisfaccion   1.000 0.000     NA     NA    1.000
  ci.upper
1    0.852
2    0.810
3    0.933
4    0.868
5    0.432
6    0.518
7    0.257
8    0.399
9    1.000

Interpretación de las cargas factoriales: todos los p-valores son < 0,001 (cargas altamente significativas). Las cargas estandarizadas son 0.8 (SAT1), 0.75 (SAT2), 0.9 (SAT3) y 0.82 (SAT4): todas muy superiores al umbral de 0,70, indicando que cada ítem es un excelente indicador del constructo latente “Satisfacción”.

12.13.5 Visualización del modelo de medida

Code
semPlot::semPaths(cfa_fit,
                  what          = "std",
                  layout        = "tree",
                  edge.label.cex = 0.9,
                  residuals     = TRUE,
                  intercepts    = FALSE,
                  rotation      = 2)
Figure 12.1: Diagrama de ruta del modelo de medida de un factor

El diagrama muestra el constructo latente “Satisfaccion” (círculo) y cómo influye en los cuatro ítems observados (rectángulos). Los números en las flechas son las cargas factoriales estandarizadas; los números en las flechas pequeñas que apuntan a los rectángulos son las varianzas de los errores (la parte de cada ítem no explicada por el factor).

12.13.6 Conclusiones

El AFC ha completado el proceso de validación de la escala: no solo se ha demostrado que la escala de 4 ítems es fiable (consistente internamente), sino también que es estructuralmente válida: los datos confirman que los cuatro ítems son excelentes indicadores de un único constructo subyacente de “satisfacción del cliente”.

Se ha validado el modelo de medida, el paso previo indispensable antes de utilizar este constructo en análisis más complejos. Con la confianza de haber medido bien la “satisfacción”, se puede proceder a una etapa más avanzada: los modelos de ecuaciones estructurales (SEM), donde probar cómo este constructo se relaciona con otros, como la “lealtad” o la “calidad percibida”.

12.14 Aplicación práctica: validando un modelo de medida con dos factores

La aplicación anterior validó un modelo de un solo factor para el constructo “satisfacción del cliente”. En la investigación real, sin embargo, rara vez interesa un único constructo aislado: lo habitual es entender las relaciones entre distintos constructos.

Supóngase que la teoría de marketing postula que la “satisfacción” es un precursor de la “lealtad del cliente”. Antes de probar esta relación causal en un modelo estructural completo, primero hay que validar el modelo de medida para ambos constructos simultáneamente.

12.14.1 Objetivo de la investigación

Objetivo: probar formalmente la validez de un modelo de medida de dos factores correlacionados (“Satisfacción” y “Lealtad”). Esto implica confirmar que los ítems de cada constructo cargan correctamente en su factor (validez convergente) y demostrar que los dos constructos son estadísticamente distintos (validez discriminante).

12.14.2 Preparación de los datos

Se añaden a la encuesta 3 nuevos ítems diseñados para medir el constructo latente “lealtad del cliente”. Los datos se simulan para 300 clientes, asegurando que los dos constructos latentes estén correlacionados, como cabría esperar en la realidad:

Code
set.seed(42)
n <- 300

# Two correlated latent constructs (Satisfaction-Loyalty correlation = 0.6)
cor_matrix    <- matrix(c(1, 0.6, 0.6, 1), nrow = 2)
latent_traits <- MASS::mvrnorm(n, mu = c(0, 0), Sigma = cor_matrix, empirical = TRUE)

latent_satisfaction <- latent_traits[, 1]
latent_loyalty       <- latent_traits[, 2]

two_factor_data <- data.frame(
  # Satisfaction items (same as validated above)
  sat1_overall      = 7 + 0.85 * latent_satisfaction + rnorm(n, 0, 0.5),
  sat2_expectations = 7 + 0.80 * latent_satisfaction + rnorm(n, 0, 0.6),
  sat3_ideal        = 7 + 0.90 * latent_satisfaction + rnorm(n, 0, 0.4),
  sat4_recommend    = 7 + 0.82 * latent_satisfaction + rnorm(n, 0, 0.5),
  # Loyalty items
  loy1_repurchase  = 6 + 0.88 * latent_loyalty + rnorm(n, 0, 0.5),
  loy2_exclusivity = 6 + 0.82 * latent_loyalty + rnorm(n, 0, 0.6),
  loy3_future      = 6 + 0.91 * latent_loyalty + rnorm(n, 0, 0.4)
)

two_factor_data <- as.data.frame(lapply(two_factor_data,
                                        function(x) round(pmin(10, pmax(1, x)))))

head(two_factor_data)
  sat1_overall sat2_expectations sat3_ideal sat4_recommend loy1_repurchase
1            6                 7          6              6               5
2            7                 7          7              7               5
3            7                 7          7              6               5
4            7                 6          6              7               5
5            6                 8          7              6               5
6            8                 5          7              7               6
  loy2_exclusivity loy3_future
1                5           6
2                6           5
3                6           6
4                5           5
5                6           6
6                6           6

12.14.3 Ejecución del análisis factorial confirmatorio

12.14.3.1 Paso 1: especificación del modelo de dos factores

Se especifica que existen dos factores latentes y qué ítems mide cada uno; lavaan estima automáticamente la covarianza (y correlación) entre ambos factores:

Code
cfa_model_2factors <- '
  # Factor 1: Satisfaction
  Satisfaccion =~ sat1_overall + sat2_expectations + sat3_ideal + sat4_recommend

  # Factor 2: Loyalty
  Lealtad =~ loy1_repurchase + loy2_exclusivity + loy3_future
'

12.14.3.2 Paso 2: estimación y examen del modelo

Code
cfa_fit_2factors <- lavaan::cfa(cfa_model_2factors, data = two_factor_data)

summary(cfa_fit_2factors, fit.measures = TRUE, standardized = TRUE)
Length  Class   Mode 
     1 lavaan     S4 

12.14.4 Interpretación de los resultados

12.14.4.1 Evaluación del ajuste global del modelo

  • Test chi-cuadrado: χ² = 13.29 con 13 grados de libertad, p = 0.425. Un p-valor no significativo indica, de nuevo, un excelente ajuste entre el modelo teórico y los datos.
  • CFI = 1 y TLI = 1: ambos por encima de 0,95, ajuste excelente.
  • RMSEA = 0.009: por debajo de 0,06, ajuste excelente.
  • SRMR = 0.022: por debajo de 0,08, ajuste excelente.

Conclusión del ajuste global: el modelo de dos factores correlacionados se ajusta a los datos de manera excepcional. La estructura teorizada es altamente compatible con la evidencia empírica.

12.14.4.2 Evaluación de los parámetros del modelo

Se evalúa ahora la validez convergente y discriminante.

1. Validez convergente (cargas factoriales): inspeccionando las cargas estandarizadas (est.std) de la sección Latent Variables, todas las cargas del factor Satisfacción y del factor Lealtad son altas y significativas (p < 0,001). Se cumple la validez convergente para ambos constructos: los ítems convergen bien en sus respectivos factores latentes.

2. Validez discriminante (correlación entre factores): el paso nuevo y crucial. Se examina la relación entre los dos constructos:

Code
lavaan::standardizedSolution(cfa_fit_2factors) |>
  dplyr::filter(op == "~~" & lhs != rhs)
           lhs op     rhs est.std    se      z pvalue ci.lower ci.upper
1 Satisfaccion ~~ Lealtad   0.628 0.043 14.547      0    0.544    0.713

La correlación estimada entre los constructos latentes “Satisfacción” y “Lealtad” es de 0.63. Es un valor significativo y moderadamente alto, con sentido teórico (la satisfacción debería relacionarse con la lealtad). Es importante, no obstante, que este valor no sea excesivamente alto (generalmente se considera problemático por encima de 0,85-0,90), ya que sugeriría que ambos constructos son, en realidad, el mismo. El valor obtenido está muy por debajo de ese umbral.

Conclusión de validez discriminante: se cumple. Se ha demostrado estadísticamente que, aunque “Satisfacción” y “Lealtad” están relacionadas, son constructos distintos y separables.

12.14.5 Visualización del modelo de medida de dos factores

Code
semPlot::semPaths(cfa_fit_2factors,
                  what          = "std",
                  layout        = "tree2",
                  edge.label.cex = 0.9,
                  residuals     = TRUE,
                  intercepts    = FALSE,
                  rotation      = 2)
Figure 12.2: Diagrama de ruta del modelo de medida de dos factores

El diagrama visualiza el modelo validado: dos factores distintos, cada uno medido por sus propios indicadores, y una flecha curva entre ellos que representa su correlación de 0.63.

12.14.6 Conclusiones

Este análisis extiende la validación de una única escala a la de un modelo de medida multifactorial. El AFC ha confirmado que:

  1. La estructura teórica de dos factores se ajusta excelentemente a los datos.
  2. Ambas escalas (Satisfacción y Lealtad) poseen validez convergente.
  3. Los dos constructos poseen validez discriminante, siendo entidades relacionadas pero estadísticamente distinguibles.

Con este modelo de medida robusto y validado, el escenario queda preparado para un paso adicional: unir estos constructos en un modelo de ecuaciones estructurales (SEM) completo, donde probar formalmente la hipótesis direccional de que la “satisfacción” es un predictor de la “lealtad”.