Excelente video. También sugiero a los interesados en el tema revisar la función measurementInvariance() del paquete semTools que automatiza gran parte del poceso.
Hola muchas gracias, yo la verdad no recomiedo esa función. Primero esta "depreciated" y ya no se utiliza y tenía es cierto la virtud de automatizar el proceso, pero también es un arma de doble filo... A downside of automatically fitting an entire set of invariance models ## (like the old measurementInvariance() function did) is that you might ## end up testing models that shouldn't even be fitted because less ## restrictive models already fail (e.g., don't test full scalar ## invariance if metric invariance fails! Establish partial metric ## invariance first, then test equivalent of intercepts ONLY among the ## indicators that have invariate loadings.)
@@PabloVallejoMedina muchas gracias por la explicación, no había visto que estaba depreciated y los problemas que tenía. Muy buena aclaración para los iniciados en el tema como yo.
@@PabloVallejoMedina 😢😢..... Pablo, quiere decir que es posible que lo dejes? por favor no lo hagas, la ciencia te necesita estás haciendo un trabajo estupendo
Excelente video! una duda muy grande, qué índices podría utilizar para evaluar la invarianza si mi método de estimación es el ULS que por su naturaleza no ofrece valores de RMSEA y CFI? muchas gracias, saludos desde México!
Hola Pablo, muy buen video,. Tenía una consulta , en tu tutorial hiciste el procedimiento de la invarianza bajo los parámetros de "Wu.Estabrook.2016". Sin embargo, no sé podrías pasar la sintaxis de la invarianza por medio de lavaan (cfa) con la matriz policórica. Estaba jugando con los código y no sé si es así : conf1
Hola Pablo, excelente video, muchas gracias. Tengo el mismo problema de Francisco. Pero no logro resolverlo. Creo que el problema podría estar en la variable de agrupación. No se si lo que hizo Francisco fue transformar a numérica toda la DF o solo la variable de agrupación. Cualquier orientación esteré muy agradecido.
Hola, buena pregunta. Depende de las restricciones que pongamos. Un factor superior no te va a funcionar si no pones alguna reestricción extra: puedes hacer tres cosas: - fix variance of higher order factor to 1 - fix average loading on higher order factor to 1 - fix first higher order loading to 1 cada uno tendrá sus implicaciones. Pero sin un ejemplo real es difícil de saber ;).
hola pablo, cómo estas? es posible que entre un modelo en el cual restringí loadings e intercepts y otro en el que restringí loadings, intercepts y residuals, el ajuste sea exactamente el mismo? no varían ni los grados de libertad.
Hola guadalupe, Sí, si es posible. Básicamente te puede suceder porque le estás pidiendo un nivel de restricción que en tu modelo no existe -o lo tienes fijo en un valor- . No puedo saber qué, pues no conozco tu modelo, pero sería algo así como calcular las similitudes entre las covarianzas de los factores, pero no tener covarianzas en los factores en el modelo.
@@PabloVallejoMedina Claro! Es unifactorial! Estoy pidiendo restricciones de covarianzas donde no las hay 🤦🏻♀️🤦🏻♀️🤦🏻♀️ ahora... dado que no hay covarianzas, la invarianza escalar me la debería saltear y pasar directamente a la estricta? Al no haber covarianzas sería correcto llamarla "estricta"?
Que crack! Muchas gracias! Se podría hacer una invarianza factorial entre diferentes grupos de edad o nivel educativo. Por ejemplo comparar un instrumento en estudiantes de enseñanza media vs estudiantes universitarios. Saludos!!
hola pablo, como siempre muuy agradecido por tus aportes, tengo una duda, no sé si no me estoy percantando de ello, pero donde veo los pesos estandarizados de los ítems ?
Hola, no sé los paso varias veces por encima sin detenerme en ellos. Siempre puedes sacarle con Semplot el dibujito y ubicarlos en la sintaxis. De todas formas asegúrate de tener el standarized = TRUE
Buen día Pablo. Excelente video. Muy agradecido por los conocimientos compartidos. Solo una consulta, he notado que cuando se pide el resumen del configural, metric, scalar y strict, da los indices de ajuste de la columna de "Standard" es posible pedirle que muestre los indices robustos "Robust". Entiendo que cuando se reporta los indices de ajuste se reportan los indices robustos. Muchas gracias por la ayuda!
@@PabloVallejoMedina Si entiendo, solo que la duda era, que se tomaba en cuenta tambien las diferencias de CFI y RMSEA para saber si el modelo empeoraba a medida que se ingresaban las restricciones (Chen, 2007). En ese sentido, notaba que cuando pedias el resumen del configural, metric, scalar, strict te daban los indices "Standard" no los robustos (CFI y RMSEA). Entonces para ver si el modelo empeora, se evalua el indices CFI y RMSEA "Standard" Estaré muy agradecido por tu respuesta =)
¡Gracias por los videos! Si en vez de un CFA tuviera un SEM y quisiera saber si el efecto (coeficiente de regresión) de una variable latente sobre una variable respuesta cualquiera es el mismo para las tres ciudades, ¿qué debería hacer? ¿debo restringir el modelo paso a pasa hasta llegar a restringir los coeficientes de regresión, y solamente si el modelo empeora mucho, procedo a liberar los coeficientes?
hola pablo, como estás? Te pasó alguna vez que al aumentar la restricción aumente el ajuste en vez de disminuir? Paso de un CFI en la configural de .923 a un CFI en la métrica de .933
@@guadapupeok Hola, bueno en ciencia no hay nada bueno o malo, es simplemente la realidad. Pero en este caso sería un indicador de invarianza. Por lo que podrías seguir al siguiente nivel.
@@PabloVallejoMedina ah entonces, si entendí bien, aunque la diferencia entre los CFI sea relativamente"grande", en este caso eso no indica invarianza porque la calidad del ajuste aumenta en vez de disminuir. Entendí bien?
Hola Pablo, gracias por tu vídeo. Estaba practicando con la base y sintaxis que dejaste arriba pero me da un error. Error: Can't combine `..1` and `..2` . Run `rlang::last_error()` to see where the error occurred. Llevo un rato intentando comprender que será pero no doy con el error... Gracias.
Hola Pablo, tus vídeos me han sido de mucha utilidad, gracias por ellos. ¿Puedes ayudarme con dos dudas que tengo de los datos de abajo? Los datos del CFI indican invarianza. Pero, el RMSEA scalar-metric = -0.0151372. Por consiguiente, no hay evidencia de invarianza ¿cierto? Teniendo en cuenta los valores de CFI y aun suponiendo que los cambios en RMSEA fueran aceptables, ¿debo concluir que el modelo es inadecuado porque no alcanzan los valores aceptables (CFI mayor o igual a 0.90 y RMSEA menor o igual a 0.08? Muchas gracias y un saludo chisq df rmsea tli cfi aic configural 91.69183 28 0.1635887 0.8313812 0.8875875 2931.163 metric 99.21492 34 0.1502189 0.8578168 0.8848993 2926.686 scalar 102.04001 40 0.1350817 0.8850280 0.8905028 2917.512 strict 108.27103 47 0.1238424 0.9033643 0.8918600 2909.743
Excelente video.
También sugiero a los interesados en el tema revisar la función measurementInvariance() del paquete semTools que automatiza gran parte del poceso.
Hola muchas gracias, yo la verdad no recomiedo esa función. Primero esta "depreciated" y ya no se utiliza y tenía es cierto la virtud de automatizar el proceso, pero también es un arma de doble filo... A downside of automatically fitting an entire set of invariance models
## (like the old measurementInvariance() function did) is that you might
## end up testing models that shouldn't even be fitted because less
## restrictive models already fail (e.g., don't test full scalar
## invariance if metric invariance fails! Establish partial metric
## invariance first, then test equivalent of intercepts ONLY among the
## indicators that have invariate loadings.)
@@PabloVallejoMedina muchas gracias por la explicación, no había visto que estaba depreciated y los problemas que tenía. Muy buena aclaración para los iniciados en el tema como yo.
@@RaidellAvello Yo la utilizaba ;), pero un día dejó de existir.
Pablo muchas gracias por tu trabajo..... Si queremos chupitos de metodología
Ojalá pueda ponerme con chupitos de R de nuevo ;)
@@PabloVallejoMedina 😢😢..... Pablo, quiere decir que es posible que lo dejes? por favor no lo hagas, la ciencia te necesita estás haciendo un trabajo estupendo
@@diegovaca9026 A ver si me da la vida, ahora llevo tiempo sin grabar nada nuevo. A ver si en noviembre puedo retomar ;)
siempre salvándome el trabajo, gracias Pablo!
Un placer Jenny ;)
Me encanto tu ejemplo del modelo teórico. Lo voy a usar con mis alumnos. Muchas gracias por tus videos!
Un placer ;)
muchas gracias Pablo! Siempre súper claro!
Muchas gracias Pablo, como siempre muy ilustrativo, lo usaré para uno de mis artículos
Un placer como siempre.
excelente video gracias Pablo, ojalá sigas con tus chupitos metodológicos, me ayudo mucho para refrescar en mi cabeza el uso de invarianza
Muchas gracias ;)
Excelente video! una duda muy grande, qué índices podría utilizar para evaluar la invarianza si mi método de estimación es el ULS que por su naturaleza no ofrece valores de RMSEA y CFI? muchas gracias, saludos desde México!
¡Estaba esperando tu vídeo hace varias semanas! Muchas gracias
Sí, unos cuantos estabais en esas. ;)
Pablo, que buen video, estaba esperándolo hace mucho y por fin llegó! Muchas gracias!!!
Un placer !!!
Excelente Chupito🍻
Muchas gracias!
Un placer ;)
Si sería bueno chupitos de metodología también. Gracias Pablo por difundir la ciencia
Muchas gracias, de momento va a ser que no, ya no me da el tiempo ;)
Hola Pablo, muy buen video,.
Tenía una consulta , en tu tutorial hiciste el procedimiento de la invarianza bajo los parámetros de "Wu.Estabrook.2016".
Sin embargo, no sé podrías pasar la sintaxis de la invarianza por medio de lavaan (cfa) con la matriz policórica.
Estaba jugando con los código y no sé si es así :
conf1
Creo que está perfecto. Debería darte igual que a mi con Wu.Estabrook. Pero no le veo problemas.
Excelente video, muchas gracias
De nada, un placer ;)
Hola Pablo, excelente video, muchas gracias. Tengo el mismo problema de Francisco. Pero no logro resolverlo. Creo que el problema podría estar en la variable de agrupación. No se si lo que hizo Francisco fue transformar a numérica toda la DF o solo la variable de agrupación. Cualquier orientación esteré muy agradecido.
Hola que te da el resultado de ejecutar? : rlang::last_error()
@@PabloVallejoMedina Hola Pablo. Mira. Este es el error que me da. En realidad no se como interpretarlo
Can't combine `..1` and `..2` .
Backtrace:
1. lavaan::cfa(...)
4. lavaan::lavaan(...)
5. lavaan:::lavData(...)
6. lavaan:::lav_data_full(...)
8. vctrs:::`==.vctrs_vctr`(data[[group]], group.label[g])
9. vctrs::vec_equal(e1, e2)
10. vctrs:::vec_cast_common_params(!!!args, .to = .ptype, .df_fallback = DF_FALLBACK_quiet)
11. vctrs:::vec_cast_common_opts(..., .to = .to, .opts = opts)
13. haven:::vec_ptype2.haven_labelled.character(...)
14. vctrs::vec_ptype2(y, x, ...)
16. haven:::vec_ptype2.character.haven_labelled(...)
17. vctrs::vec_ptype2(x, vec_data(y), ...)
19. vctrs::vec_default_ptype2(...)
20. vctrs::stop_incompatible_type(...)
21. vctrs:::stop_incompatible(...)
22. vctrs:::stop_vctrs(...)
Run `rlang::last_trace()` to see the full context.
@@ricardojorquera No sé, si no te estás equivocando en la sintaxis debes de tener la data mal configurada, pero yo tampoco lo entiendo muy bien.
Hola Pablo! Muchísimas gracias por tu vídeo! Como mirarías la invarianzara para un second-order CFA?
Hola, buena pregunta. Depende de las restricciones que pongamos. Un factor superior no te va a funcionar si no pones alguna reestricción extra: puedes hacer tres cosas:
- fix variance of higher order factor to 1
- fix average loading on higher order factor to 1
- fix first higher order loading to 1
cada uno tendrá sus implicaciones. Pero sin un ejemplo real es difícil de saber ;).
@@PabloVallejoMedina Las restricciones no las impone directamente CFA?
cfa_1 = "life_sat =~ a + b+ c
pos_affect =~ d+ e+ f
neg_affect =~ g + h + i
wellbeing =~ life_sat + pos_affect + neg_affect"
colnames= c("a", "b", "c", "d", "e", "f", "g", "h", "i")
config.cfa_1 = runMI(
model = cfa_1,
data = amelia.output$imputations,
fun="cfa",
estimator = "WLSMV",
ordered=colnames,
group="gender",
std.lv = TRUE)
config.cfa_2 = measEq.syntax(
configural.model=config.cfa_1,
group="gender", group.equal=c("loadings", "thresholds"),
ID.fac = "std.lv",
ID.cat = "default",
return.fit=TRUE)
Aquí, debería incluir restricciones adicionales en la syntax cfa_1?
hola pablo, cómo estas? es posible que entre un modelo en el cual restringí loadings e intercepts y otro en el que restringí loadings, intercepts y residuals, el ajuste sea exactamente el mismo? no varían ni los grados de libertad.
Hola guadalupe, Sí, si es posible. Básicamente te puede suceder porque le estás pidiendo un nivel de restricción que en tu modelo no existe -o lo tienes fijo en un valor- . No puedo saber qué, pues no conozco tu modelo, pero sería algo así como calcular las similitudes entre las covarianzas de los factores, pero no tener covarianzas en los factores en el modelo.
@@PabloVallejoMedina Claro! Es unifactorial! Estoy pidiendo restricciones de covarianzas donde no las hay 🤦🏻♀️🤦🏻♀️🤦🏻♀️ ahora... dado que no hay covarianzas, la invarianza escalar me la debería saltear y pasar directamente a la estricta? Al no haber covarianzas sería correcto llamarla "estricta"?
Que crack! Muchas gracias! Se podría hacer una invarianza factorial entre diferentes grupos de edad o nivel educativo. Por ejemplo comparar un instrumento en estudiantes de enseñanza media vs estudiantes universitarios.
Saludos!!
Sí, así es. Muchas gracias a ti ;)
hola pablo, como siempre muuy agradecido por tus aportes, tengo una duda, no sé si no me estoy percantando de ello, pero donde veo los pesos estandarizados de los ítems ?
Hola, no sé los paso varias veces por encima sin detenerme en ellos. Siempre puedes sacarle con Semplot el dibujito y ubicarlos en la sintaxis. De todas formas asegúrate de tener el standarized = TRUE
Buen día Pablo. Excelente video. Muy agradecido por los conocimientos compartidos. Solo una consulta, he notado que cuando se pide el resumen del configural, metric, scalar y strict, da los indices de ajuste de la columna de "Standard" es posible pedirle que muestre los indices robustos "Robust". Entiendo que cuando se reporta los indices de ajuste se reportan los indices robustos. Muchas gracias por la ayuda!
La comparación del x2 debe ser con los no robustos y por tanto son estos los que se informan. Eso explican en el paquete oficial ;)
@@PabloVallejoMedina Ohh entiendo. Eso tambien incluiria los índices de CFI y RMSEA?
@@lindseywildmanvilcaquiro7621 mhhh no. Las diferencias se sacan con el x 2, no con el RMSEA y el CFI ;)
@@PabloVallejoMedina Si entiendo, solo que la duda era, que se tomaba en cuenta tambien las diferencias de CFI y RMSEA para saber si el modelo empeoraba a medida que se ingresaban las restricciones (Chen, 2007). En ese sentido, notaba que cuando pedias el resumen del configural, metric, scalar, strict te daban los indices "Standard" no los robustos (CFI y RMSEA). Entonces para ver si el modelo empeora, se evalua el indices CFI y RMSEA "Standard" Estaré muy agradecido por tu respuesta =)
@@lindseywildmanvilcaquiro7621 Ahh sí, en ese caso si, comparas la reducción del RMSEA y la del CFI robustos ;)
Pablo, muchas gracias por tan excelente video!! Cuando lanzarias el del modelo TAM?
El próximo año hare uno de modelos en SEM.
¡Gracias por los videos!
Si en vez de un CFA tuviera un SEM y quisiera saber si el efecto (coeficiente de regresión) de una variable latente sobre una variable respuesta cualquiera es el mismo para las tres ciudades, ¿qué debería hacer? ¿debo restringir el modelo paso a pasa hasta llegar a restringir los coeficientes de regresión, y solamente si el modelo empeora mucho, procedo a liberar los coeficientes?
Hola, no en principio no. Creo que habría que ir paso a paso. Pero no funciona como una invarianza.
hola pablo, como estás? Te pasó alguna vez que al aumentar la restricción aumente el ajuste en vez de disminuir? Paso de un CFI en la configural de .923 a un CFI en la métrica de .933
Hola sí, es una posibilidad.!!
@@PabloVallejoMedina y aunque el ajuste sea mejor sería una mala noticia porque implicaría invarianza, no?
@@guadapupeok Hola, bueno en ciencia no hay nada bueno o malo, es simplemente la realidad. Pero en este caso sería un indicador de invarianza. Por lo que podrías seguir al siguiente nivel.
@@PabloVallejoMedina ah entonces, si entendí bien, aunque la diferencia entre los CFI sea relativamente"grande", en este caso eso no indica invarianza porque la calidad del ajuste aumenta en vez de disminuir. Entendí bien?
Sí así es, es cómo si tuvieras un Ferrari que funciona mejor a 200Km/h que a 50 km/h... ahora a ver cómo frena ;)
Hola Pablo, gracias por tu vídeo. Estaba practicando con la base y sintaxis que dejaste arriba pero me da un error.
Error: Can't combine `..1` and `..2` .
Run `rlang::last_error()` to see where the error occurred.
Llevo un rato intentando comprender que será pero no doy con el error...
Gracias.
Creo que lo pude resolver, aplique as.numeric().
@@franciscogalvez8426 Perfecto, sino, cuando te salga eso ejecutas: rlang::last_error() en la consola y te dice dónde la estás embarrando.
Pablo Vallejo Medina Gracias Pablo, así llegue a la solución. Que tengas una buena tarde, excelente video como siempre.
@@franciscogalvez8426 Un placer Francisco!!
@@franciscogalvez8426 hola francisco, podrías ayudarme, a mi me sale el mismo error, cómo aplicaste as.numeric ?
Chupitos de metodología.... Gracias
A ver si se puede
Hola Pablo, tus vídeos me han sido de mucha utilidad, gracias por ellos. ¿Puedes ayudarme con dos dudas que tengo de los datos de abajo? Los datos del CFI indican invarianza. Pero, el RMSEA scalar-metric = -0.0151372. Por consiguiente, no hay evidencia de invarianza ¿cierto? Teniendo en cuenta los valores de CFI y aun suponiendo que los cambios en RMSEA fueran aceptables, ¿debo concluir que el modelo es inadecuado porque no alcanzan los valores aceptables (CFI mayor o igual a 0.90 y RMSEA menor o igual a 0.08? Muchas gracias y un saludo
chisq df rmsea tli cfi aic
configural 91.69183 28 0.1635887 0.8313812 0.8875875 2931.163
metric 99.21492 34 0.1502189 0.8578168 0.8848993 2926.686
scalar 102.04001 40 0.1350817 0.8850280 0.8905028 2917.512
strict 108.27103 47 0.1238424 0.9033643 0.8918600 2909.743
Ni invarianza ni confirmatorio. Con un RMSEA no hay ni que evaluar la invarianza
@@PabloVallejoMedina Muchas gracias por el tiempo para responder! Un saludo!