# A tibble: 7 × 7
id Aleatorización Mes `Pauta (código)` Ferritina cambio_ferritina_t0
<dbl> <fct> <ord> <fct> <dbl> <dbl>
1 1 Ferinject 0 meses <NA> 414 0
2 1 Ferinject 2 meses 1 418 4
3 1 Ferinject 4 meses 1 308 -106
4 1 Ferinject 6 meses <NA> 215 -199
5 1 Ferinject 8 meses <NA> 183 -231
6 1 Ferinject 10 meses <NA> 216 -198
7 1 Ferinject 12 meses <NA> 193 -221
# ℹ 1 more variable: cambio_ferritina_tmenos1 <dbl>
Modelos
Stakeholder: Jose L Merino Rivas Centro: Hospital del Henares
Fecha última modificación: 23 marzo 2026
Data modelos
Ejemplo
Distribución de la variable respuesta
NO ES NECESARIA NINGUNA SUPOSICIÓN SOBRE LA DISTRIBUCIÓN DE LA VARIABLE RESPUESTA, es simple curiosidad.
Efecto no-lineal del factor tiempo
Data: mutate(filter(df, Vivo == 1), Mes = as.numeric(Mes))
Models:
fits$grado_1: cambio_ferritina_t0 ~ Aleatorización + poly(Mes, g, raw = TRUE) + (1 | id)
fits$grado_2: cambio_ferritina_t0 ~ Aleatorización + poly(Mes, g, raw = TRUE) + (1 | id)
fits$grado_3: cambio_ferritina_t0 ~ Aleatorización + poly(Mes, g, raw = TRUE) + (1 | id)
fits$grado_4: cambio_ferritina_t0 ~ Aleatorización + poly(Mes, g, raw = TRUE) + (1 | id)
npar AIC BIC logLik -2*log(L) Chisq Df Pr(>Chisq)
fits$grado_1 5 5095.7 5115.4 -2542.8 5085.7
fits$grado_2 6 5096.1 5119.8 -2542.0 5084.1 1.6097 1 0.2045
fits$grado_3 7 5097.9 5125.5 -2541.9 5083.9 0.2048 1 0.6509
fits$grado_4 8 5099.8 5131.4 -2541.9 5083.8 0.0480 1 0.8265
--- Interpretación ---
Modelo recomendado: grado_1
grado_1 vs grado_2 : el modelo complejo grado_2 NO mejora significativamente respecto a grado_1 (p = 0.2045 )
grado_2 vs grado_3 : el modelo complejo grado_3 NO mejora significativamente respecto a grado_2 (p = 0.6509 )
grado_3 vs grado_4 : el modelo complejo grado_4 NO mejora significativamente respecto a grado_3 (p = 0.8265 )
No se observa evidencia estadística, según el test de razón de verosimilitudes, de que añadir términos de curvatura mejore el ajuste del modelo. Por tanto, la evolución de la ferritina es compatible con una relación aproximadamente lineal en el tiempo. La curvatura aparente podría deberse a variabilidad individual (capturada por (1 | id)) o a ruido
Ferritina (continua)
Modelo de intersección aleatoria
Intersección aleatoria por sujeto.
Varios niveles sin datos observados.
, , Pauta (código) = 1
Aleatorización
Mes Venofer Ferinject
0 0 0
1 0 20
2 0 20
3 1 19
4 0 15
5 0 15
6 0 12
, , Pauta (código) = 3
Aleatorización
Mes Venofer Ferinject
0 0 0
1 17 3
2 18 1
3 8 1
4 8 1
5 13 1
6 14 1
, , Pauta (código) = 4
Aleatorización
Mes Venofer Ferinject
0 0 0
1 1 2
2 0 1
3 0 0
4 0 0
5 0 0
6 0 0
, , Pauta (código) = 2
Aleatorización
Mes Venofer Ferinject
0 0 0
1 0 0
2 1 0
3 0 1
4 1 4
5 0 5
6 0 5
, , Pauta (código) = NA
Aleatorización
Mes Venofer Ferinject
0 30 34
1 12 9
2 11 9
3 18 9
4 17 9
5 12 7
6 9 9
- Muchos cruces de niveles sin observaciones
- La pauta es la misma independientemente del hierro
- Me interesa el tipo de hierro: no quiero triple interacción.
| NO QUIERO: | \(HD + Mes * Aleatorización * \text{Pauta (código)} + (1 \mid id)\) |
| SÍ QUIERO: | \(HD + Mes + Aleatorización + \text{Pauta (código)} + Mes \cdot Aleatorización + (1 \mid id)\) |
m1 <- lmer(
log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` + log(ferritina_previa) + Mes*Aleatorización + (1 | id),
data = data_m1,
REML = TRUE
)# Este modelo no puede usar datos del Control 2 porque cambio vs t0 y cambio vs t-1 es lo mismo
# data_m1_m2a <- data_m1 |> filter(!Mes%in%c(0,2)) # para temas de funciones posteriores
# Antes usaba el factor fijo cambio_log_ferritina_tmenos1 pero no tiene sentido porque para eso le he tenido que medir el nivel de ferritina
m2a <- lmer(
cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + Mes*Aleatorización + (1 | id),
data = data_m1,
REML = TRUE
)# Si meto también el log(ferritina_previa), me pasaría igual que en el modelo anterior, no sería válido para el Control 2
m2b <- lmer(
cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + log_ferritina_basal + Mes*Aleatorización + (1 | id),
data = data_m1,
REML = TRUE
)# Para mí este modelo es el que menos sentido quiere. El factor tiempo (siendo lineal) pierde sentido si siempre voy a predecir el cambio respecto al t-1, metiendo el t (y aún más si también hubiera metido la ferritina_previa)
m3 <- lmer(
cambio_log_ferritina_tmenos1 ~ HD + Mes + Aleatorización + `Pauta (código)` + log_ferritina_basal + Mes*Aleatorización + (1 | id),
data = data_m1,
REML = TRUE
)boundary (singular) fit: see help('isSingular')
boundary (singular) fit: la varianza entre sujetos del m3 es prácticamente 0, es decir, la pendiente aleatoria no aporta información. Planteo el modelo m3 pero sin la pendiente aleatoria.
m3 <- lm(
cambio_log_ferritina_tmenos1 ~ HD + Mes + Aleatorización + `Pauta (código)` + log_ferritina_basal + Mes*Aleatorización,
data = data_m1
)Comparación de modelos.
Comparo únicamente los modelos con intersección aleatoria:
- m1 (precedir la log-ferritina)
- m2a (predecir el cambio de la log-ferritina respecto al valor basal usando el cambio_log_ferritina_tmenos1).
- m2b (predecir el cambio de la log-ferritina respecto al valor basal usando la log_ferritina_basal).
La no normalidad de los residuos causa: coeficientes insesgados + intervalos de confianza y p-valores posiblemente no ser fiables + predicciones para valores extremos potencialmente imprecisas.
Warning: Non-normality of residuals detected (p < .001).
Warning: Non-normality of residuals detected (p = 0.010).
Warning: Non-normality of residuals detected (p = 0.019).
## [1] "4" "16" "19" "20" "26" "38" "53" "59" "64"
## [1] "4" "26" "53" "64"
## [1] "4" "19" "20" "26" "53" "64"
Quito el outlier id_paciente=c(26,53,64), validarlo con Jose Luis.
m1 <- lmer(
log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` + log(ferritina_previa) + Mes*Aleatorización + (1 | id),
data = data_m2,
REML = TRUE
)# Este modelo no puede usar datos del Control 2 porque cambio vs t0 y cambio vs t-1 es lo mismo
# data_m2_m2a <- data_m2 |> filter(!Mes%in%c(0,2)) # para temas de funciones posteriores
m2a <- lmer(
cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + Mes*Aleatorización + (1 | id),
data = data_m2,
REML = TRUE
)# Si meto también el log(ferritina_previa), me pasaría igual que en el modelo anterior, no sería válido para el Control 2
m2b <- lmer(
cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + log_ferritina_basal + Mes*Aleatorización + (1 | id),
data = data_m2,
REML = TRUE
)Warning: Non-normality of residuals detected (p < .001).
Warning: Non-normality of residuals detected (p = 0.011).
Warning: Non-normality of residuals detected (p = 0.027).
Resultados
Los modelos m1 y m2a cumple con la hipótesis de normalidad de los errores.
ICC: medida de correlación de las observaciones pertenecientes al mismo conjunto / varianza entre los conjuntos partido por la varianza total / porcentaje de la variabilidad residual debida a diferencias entre sujetos.
ICC alto (es lo que me gustaría): - mucha variabilidad entre sujetos
- poca variabilidad dentro del sujeto
- las observaciones del mismo sujeto se parecen mucho
ICC bajo:
- poca variabilidad entre sujetos
- mucha variabilidad dentro del sujeto
- medir varias veces al mismo sujeto aporta poca información extra
- ICC > 0.20: fuerte dependencia intra-sujeto -> modelo mixto imprescidible
- ICC 0.05–0.20: moderada dependencia intra-sujeto -> modelo mixto recomendable
- ICC < 0.05: poca dependencia intra-sujeto -> poca ganancia por agrupar
Modelo m1
Observaciones no incluidas en el modelo debido a valores faltantes en las covariables incluidas.
log_Ferritina HD Mes Aleatorización
13 0 0 0
Pauta (código) ferritina_previa id
190 67 0
Linear mixed model fit by REML ['lmerMod']
Formula: log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` +
log(ferritina_previa) + Mes * Aleatorización + (1 | id)
Data: data_m2
REML criterion at convergence: 247.1297
Random effects:
Groups Name Std.Dev.
id (Intercept) 0.1409
Residual 0.4237
Number of obs: 187, groups: id, 53
Fixed Effects:
(Intercept) HD1
2.32393 0.03308
Mes AleatorizaciónFerinject
-0.01445 -0.37645
`Pauta (código)`3 `Pauta (código)`4
-0.30262 -0.14999
`Pauta (código)`2 log(ferritina_previa)
-0.11614 0.69174
Mes:AleatorizaciónFerinject
-0.01899
============================================================
DIAGNÓSTICO COMPLETO DEL MODELO
============================================================
1. PRUEBAS DE NORMALIDAD DE RESIDUOS:
Shapiro-Wilk: W = 0.9695, p-valor = 0.0004
Kolmogorov-Smirnov: D = 0.0646, p-valor = 0.4166
⚠ Los residuos NO son normales (p < 0.05) - pero modelos mixtos son robustos
2. HOMOCEDASTICIDAD:
Test de heterocedasticidad: p = 0.0028
⚠ Evidencia de heterocedasticidad
## 2.5 % 97.5 %
## .sig01 NA NA
## .sigma NA NA
## (Intercept) 1.56223240 3.08562088
## HD1 -0.23280012 0.29895561
## Mes -0.06741331 0.03851590
## AleatorizaciónFerinject -0.81530851 0.06240570
## `Pauta (código)`3 -0.68711977 0.08187821
## `Pauta (código)`4 -0.67920670 0.37922370
## `Pauta (código)`2 -0.42552444 0.19325423
## log(ferritina_previa) 0.59068853 0.79278705
## Mes:AleatorizaciónFerinject -0.09246684 0.05447954
=== ANÁLISIS DEL ICC ===
ICC calculado: 0.100
Clasificación: Bajo
COMPONENTES DE VARIANZA:
- Varianza entre sujetos: 0.0198 (10.0%)
- Varianza intra-sujeto: 0.1795 (90.0%)
- Varianza total: 0.1993
CONCLUSIONES CLÍNICAS Y ESTADÍSTICAS:
- ICC BAJO-MODERADO: Observaciones relativamente independientes
- Evaluar si efecto aleatorio es necesario
RECOMENDACIONES:
• Tamaño medio del cluster: 3.5 obs/paciente
• Nº óptimo de mediciones/paciente: 18.1
• Mejor: MENOS pacientes, MÁS mediciones por paciente
$ICC
[1] 0.09957298
$Interpretacion_varianza
[1] "Dependencia intra-sujeto moderada: modelo mixto recomendable"
$emmeans
Aleatorización emmean SE df lower.CL upper.CL
Venofer 6.29 0.164 85.0 5.96 6.62
Ferinject 5.85 0.114 99.4 5.62 6.08
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.44 0.2 90.5 2.202 0.0302
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
El modelo explicativo m1 evalúa el nivel de log-ferritina en función de los efectos fijos de HD (indica si el paciente recibe más de dos sesiones de hemodiálisis por semana), mes, aleatorización, pauta, la log-ferritina del control previo, y la interacción entre mes y aleatorización. Además, incorpora un efecto aleatorio para id para tener en cuenta la variabilidad entre pacientes: cada paciente (id) tiene su propio valor basal de log_Ferritina y la evolución temporal (efecto de Mes) es la misma para todos los pacientes. En este modelo, a medida que aumenta el tiempo, la diferencia en el efecto de cada rama de aleatorización es constante.
Mes = 0:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.376 0.226 138.3 1.668 0.0975
Mes = 1:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.395 0.210 119.1 1.879 0.0627
Mes = 2:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.414 0.201 102.5 2.059 0.0420
Mes = 3:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.433 0.199 92.3 2.178 0.0319
Mes = 4:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.452 0.204 89.6 2.220 0.0289
Mes = 5:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.471 0.215 93.4 2.191 0.0309
Mes = 6:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.490 0.232 101.9 2.112 0.0371
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
$id
Modelo m2a
Observaciones no incluidas en el modelo debido a valores faltantes en las covariables incluidas.
cambio_log_ferritina_t0 HD Mes
19 0 0
Aleatorización Pauta (código) id
0 190 0
Linear mixed model fit by REML ['lmerMod']
Formula:
cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` +
Mes * Aleatorización + (1 | id)
Data: data_m2
REML criterion at convergence: 283.3216
Random effects:
Groups Name Std.Dev.
id (Intercept) 0.5755
Residual 0.3732
Number of obs: 184, groups: id, 52
Fixed Effects:
(Intercept) HD1
0.08366 0.34071
Mes AleatorizaciónFerinject
0.03904 -0.07256
`Pauta (código)`3 `Pauta (código)`4
-0.02888 -0.12265
`Pauta (código)`2 Mes:AleatorizaciónFerinject
-0.33967 -0.04519
============================================================
DIAGNÓSTICO COMPLETO DEL MODELO
============================================================
1. PRUEBAS DE NORMALIDAD DE RESIDUOS:
Shapiro-Wilk: W = 0.9763, p-valor = 0.0032
Kolmogorov-Smirnov: D = 0.0605, p-valor = 0.5103
⚠ Los residuos NO son normales (p < 0.05) - pero modelos mixtos son robustos
2. HOMOCEDASTICIDAD:
Test de heterocedasticidad: p = 0.2462
✓ Varianza constante (homocedasticidad) aceptable
## 2.5 % 97.5 %
## .sig01 NA NA
## .sigma NA NA
## (Intercept) -0.52681063 0.69413568
## HD1 -0.30268620 0.98410969
## Mes -0.01305544 0.09112677
## AleatorizaciónFerinject -0.69019776 0.54507122
## `Pauta (código)`3 -0.57590633 0.51813652
## `Pauta (código)`4 -0.64772232 0.40241763
## `Pauta (código)`2 -0.66254262 -0.01680737
## Mes:AleatorizaciónFerinject -0.11921601 0.02883509
=== ANÁLISIS DEL ICC ===
ICC calculado: 0.704
Clasificación: Muy fuerte
COMPONENTES DE VARIANZA:
- Varianza entre sujetos: 0.3312 (70.4%)
- Varianza intra-sujeto: 0.1393 (29.6%)
- Varianza total: 0.4705
CONCLUSIONES CLÍNICAS Y ESTADÍSTICAS:
- ICC MUY ALTO: Mediciones fuertemente correlacionadas dentro de paciente
- Modelo mixto es CRUCIAL
- Variabilidad dominada por diferencias entre pacientes
RECOMENDACIONES:
• Tamaño medio del cluster: 3.5 obs/paciente
• Nº óptimo de mediciones/paciente: 0.8
• Mejor: MÁS pacientes, MENOS mediciones por paciente
$ICC
[1] 0.7039641
$Interpretacion_varianza
[1] "Dependencia intra-sujeto alta: modelo mixto imprescindible"
$emmeans
Aleatorización emmean SE df lower.CL upper.CL
Venofer 0.2615 0.278 90.0 -0.290 0.813
Ferinject 0.0381 0.192 71.9 -0.345 0.421
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.223 0.31 124 0.721 0.4722
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
El modelo explicativo m1: r evalúa el cambio de log-ferritina respecto al control en el mes 0 en función de los efectos fijos de HD (indica si el paciente recibe más de dos sesiones de hemodiálisis por semana), mes, aleatorización, pauta, la log-ferritina del control previo, y la interacción entre mes y aleatorización. Además, incorpora un efecto aleatorio para id para tener en cuenta la variabilidad entre pacientes: cada paciente (id) tiene su propio valor basal de log_Ferritina y la evolución temporal (efecto de Mes) es la misma para todos los pacientes. En este modelo, a medida que aumenta el tiempo, la diferencia en el efecto de cada rama de aleatorización es mayor aunque no llega a ser una diferencia significativa.
Mes = 0:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.0726 0.317 137 0.229 0.8194
Mes = 1:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.1178 0.310 129 0.380 0.7044
Mes = 2:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.1629 0.307 125 0.532 0.5960
Mes = 3:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.2081 0.308 124 0.675 0.5007
Mes = 4:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.2533 0.314 126 0.806 0.4218
Mes = 5:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.2985 0.325 132 0.919 0.3598
Mes = 6:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.3437 0.339 140 1.013 0.3128
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
La falta de significación en las comparaciones punto a punto puede deberse a:
- Bajo poder estadístico para detectar diferencias en puntos específicos
- Alta variabilidad entre sujetos
- El efecto acumulativo necesita más tiempo para ser detectable
Pendiente aleatoria (Mes | id)
¿El tiempo debe ser factor aleatorio? ¿Hay variabilidad entre sujetos en la evolución temporal?
Para predecir la log-ferritina es suficiente con el modelo de intersección aleatoria, no es necesario incluir pendiente aleatoria por mes.
Data: data_m2
Models:
m1_0: log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` + log(ferritina_previa) + Mes * Aleatorización + (1 | id)
m1_1: log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` + log(ferritina_previa) + Mes * Aleatorización + ((1 | id) + (0 + Mes | id))
npar AIC BIC logLik -2*log(L) Chisq Df Pr(>Chisq)
m1_0 11 238.86 274.40 -108.43 216.86
m1_1 12 240.86 279.63 -108.43 216.86 0 1 1
Groups Name Std.Dev.
id (Intercept) 0.059935
id.1 Mes 0.000000
Residual 0.428045
Para predecir el cambio de la log-ferritina respecto al basal usando el cambio_log_ferritina_tmenos1 es mejor el modelo con pendiente (Mes) e intersección aleatoria (id).
Data: data_m2
Models:
m2_0: cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + Mes * Aleatorización + (1 | id)
m2_1: cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + Mes * Aleatorización + ((1 | id) + (0 + Mes | id))
npar AIC BIC logLik -2*log(L) Chisq Df Pr(>Chisq)
m2_0 10 283.49 315.64 -131.75 263.49
m2_1 11 285.48 320.85 -131.74 263.48 0.008 1 0.9288
Groups Name Std.Dev.
id (Intercept) 0.55061
id.1 Mes 0.01461
Residual 0.36625
Para predecir el cambio de la log-ferritina respecto al basal usando la log_ferritina_basal es suficiente con el modelo de intersección aleatoria, no es necesario incluir pendiente aleatoria por mes.
Data: data_m2
Models:
m2_0: cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + log_ferritina_basal + Mes * Aleatorización + (1 | id)
m2_1: cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` + log_ferritina_basal + Mes * Aleatorización + (1 + Mes | id)
npar AIC BIC logLik -2*log(L) Chisq Df Pr(>Chisq)
m2_0 11 268.48 303.85 -123.24 246.48
m2_1 13 271.11 312.90 -122.56 245.11 1.3706 2 0.5039
Groups Name Std.Dev. Corr
id (Intercept) 0.372178
Mes 0.024016 1.000
Residual 0.366515
Warning: Non-normality of residuals detected (p = 0.007).
Resultados
El modelo m2a cumple con la hipótesis de normalidad de los errores.
Modelo m2a_tRandom
Observaciones no incluidas en el modelo debido a valores faltantes en las covariables incluidas.
cambio_log_ferritina_t0 HD Mes
19 0 0
Aleatorización Pauta (código) id
0 190 0
Linear mixed model fit by REML ['lmerMod']
Formula:
cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` +
Mes * Aleatorización + ((1 | id) + (0 + Mes | id))
Data: data_m2
REML criterion at convergence: 283.2177
Random effects:
Groups Name Std.Dev.
id (Intercept) 0.56828
id.1 Mes 0.02891
Residual 0.36982
Number of obs: 184, groups: id, 52
Fixed Effects:
(Intercept) HD1
0.10999 0.31888
Mes AleatorizaciónFerinject
0.03921 -0.09157
`Pauta (código)`3 `Pauta (código)`4
-0.05317 -0.13748
`Pauta (código)`2 Mes:AleatorizaciónFerinject
-0.35576 -0.04502
============================================================
DIAGNÓSTICO COMPLETO DEL MODELO
============================================================
1. PRUEBAS DE NORMALIDAD DE RESIDUOS:
Shapiro-Wilk: W = 0.9745, p-valor = 0.0019
Kolmogorov-Smirnov: D = 0.0602, p-valor = 0.5169
⚠ Los residuos NO son normales (p < 0.05) - pero modelos mixtos son robustos
2. HOMOCEDASTICIDAD:
Test de heterocedasticidad: p = 0.2459
✓ Varianza constante (homocedasticidad) aceptable
## 2.5 % 97.5 %
## .sig01 NA NA
## .sig02 NA NA
## .sigma NA NA
## (Intercept) -0.50006210 0.72004302
## HD1 -0.32432000 0.96207446
## Mes -0.01446534 0.09289467
## AleatorizaciónFerinject -0.70773977 0.52459232
## `Pauta (código)`3 -0.60109315 0.49474668
## `Pauta (código)`4 -0.66315368 0.38819632
## `Pauta (código)`2 -0.68341882 -0.02810407
## Mes:AleatorizaciónFerinject -0.12127178 0.03122524
=== ANÁLISIS DEL ICC ===
ICC calculado: 0.702
Clasificación: Muy fuerte
COMPONENTES DE VARIANZA:
- Varianza entre sujetos: 0.3229 (70.2%)
- Varianza intra-sujeto: 0.1368 (29.8%)
- Varianza total: 0.4597
CONCLUSIONES CLÍNICAS Y ESTADÍSTICAS:
- ICC MUY ALTO: Mediciones fuertemente correlacionadas dentro de paciente
- Modelo mixto es CRUCIAL
- Variabilidad dominada por diferencias entre pacientes
RECOMENDACIONES:
• Tamaño medio del cluster: 3.5 obs/paciente
• Nº óptimo de mediciones/paciente: 0.8
• Mejor: MÁS pacientes, MENOS mediciones por paciente
$ICC
[1] 0.7024931
$Interpretacion_varianza
[1] "Dependencia intra-sujeto alta: modelo mixto imprescindible"
$emmeans
Aleatorización emmean SE df lower.CL upper.CL
Venofer 0.2637 0.281 90.0 -0.294 0.821
Ferinject 0.0219 0.195 71.6 -0.367 0.410
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.242 0.313 123 0.772 0.4415
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
A medida que aumenta el tiempo, la diferencia en el efecto de cada rama de aleatorización es mayor aunque no llega a ser una diferencia significativa.
Mes = 0:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.0916 0.319 134 0.287 0.7748
Mes = 1:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.1366 0.312 127 0.438 0.6621
Mes = 2:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.1816 0.309 123 0.588 0.5578
Mes = 3:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.2266 0.311 123 0.728 0.4680
Mes = 4:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.2717 0.318 123 0.853 0.3952
Mes = 5:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.3167 0.330 121 0.959 0.3393
Mes = 6:
contrast estimate SE df t.ratio p.value
Venofer - Ferinject 0.3617 0.346 114 1.046 0.2980
Results are averaged over the levels of: HD, Pauta (código)
Degrees-of-freedom method: kenward-roger
La falta de significación en las comparaciones punto a punto puede deberse a:
- Bajo poder estadístico para detectar diferencias en puntos específicos
- Alta variabilidad entre sujetos
- El efecto acumulativo necesita más tiempo para ser detectable
Cada id tiene su intercepto propio (nivel inicial de cambio_log_ferritina_t0). Y también tiene su pendiente propia para Mes, que indica cómo cambia la variable con el tiempo para ese paciente.
Pendiente aleatoria (pauta | id) NO TERMINADO
¿La pauta debe ser factor aleatorio? ¿Hay variabilidad entre sujetos en la pauta?
Para predecir la log-ferritina es suficiente con el modelo de intersección aleatoria, no es necesario incluir pendiente aleatoria por pauta.
Data: data_m2
Models:
m1_0: log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` + log(ferritina_previa) + Mes * Aleatorización + (1 | id)
m1_1: log_Ferritina ~ HD + Mes + Aleatorización + `Pauta (código)` + log(ferritina_previa) + Mes * `Pauta (código)` + (1 + Mes | id)
npar AIC BIC logLik -2*log(L) Chisq Df Pr(>Chisq)
m1_0 11 238.86 274.40 -108.43 216.86
m1_1 15 244.00 292.46 -107.00 214.00 2.8635 4 0.5809
Groups Name Std.Dev. Corr
id (Intercept) 0.1250834
Mes 0.0093161 -1.000
Residual 0.4188477
Para predecir el cambio de la log-ferritina respecto al basal es mejor el modelo con pendiente (Aleatorización) e intersección aleatoria (id).
Groups Name Std.Dev. Corr
id (Intercept) 0.360859
Mes 0.078994 0.521
Residual 0.238450
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula:
## cambio_log_ferritina_t0 ~ HD + Mes + Aleatorización + `Pauta (código)` +
## cambio_log_ferritina_tmenos1 + Mes * `Pauta (código)` +
## (1 + Mes | id)
## Data: data_m2
##
## AIC BIC logLik -2*log(L) df.resid
## 184.2 232.2 -77.1 154.2 167
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.24518 -0.53526 0.01708 0.47837 2.94968
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## id (Intercept) 0.13022 0.36086
## Mes 0.00624 0.07899 0.52
## Residual 0.05686 0.23845
## Number of obs: 182, groups: id, 52
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -0.044818 0.226187 -0.198
## HD1 0.075921 0.247660 0.307
## Mes 0.002399 0.026243 0.091
## AleatorizaciónFerinject 0.030433 0.220666 0.138
## `Pauta (código)`3 -0.041301 0.209248 -0.197
## `Pauta (código)`4 0.179546 0.522674 0.344
## `Pauta (código)`2 -1.966494 0.443242 -4.437
## cambio_log_ferritina_tmenos1 0.540388 0.043543 12.410
## Mes:`Pauta (código)`3 0.063534 0.036248 1.753
## Mes:`Pauta (código)`4 -0.227261 0.349672 -0.650
## Mes:`Pauta (código)`2 0.336527 0.092369 3.643
##
## Correlation of Fixed Effects:
## (Intr) HD1 Mes AltrzF `P()`3 `P()`4 `P()`2 cm___1 M:`P()`3
## HD1 -0.100
## Mes -0.232 0.014
## AltrzcnFrnj -0.887 -0.090 0.122
## `Pat(cdg)`3 -0.903 0.109 0.247 0.778
## `Pat(cdg)`4 -0.336 0.042 0.064 0.289 0.341
## `Pat(cdg)`2 -0.027 -0.070 0.025 0.009 0.022 0.011
## cmb_lg_fr_1 -0.122 -0.020 0.042 0.080 0.075 0.054 0.139
## Ms:`P(cd)`3 0.198 -0.010 -0.723 -0.122 -0.280 -0.033 -0.012 0.011
## Ms:`P(cd)`4 0.231 -0.014 0.001 -0.220 -0.233 -0.940 -0.007 -0.043 -0.010
## Ms:`P(cd)`2 0.042 0.103 -0.139 -0.011 -0.038 -0.014 -0.952 -0.116 0.096
## M:`P()`4
## HD1
## Mes
## AltrzcnFrnj
## `Pat(cdg)`3
## `Pat(cdg)`4
## `Pat(cdg)`2
## cmb_lg_fr_1
## Ms:`P(cd)`3
## Ms:`P(cd)`4
## Ms:`P(cd)`2 0.003
Warning: Non-normality of residuals detected (p = 0.025).
El modelo m1:
## 2.5 % 97.5 %
## .sig01 NA NA
## .sigma NA NA
## (Intercept) 1.56223240 3.08562088
## HD1 -0.23280012 0.29895561
## Mes -0.06741331 0.03851590
## AleatorizaciónFerinject -0.81530851 0.06240570
## `Pauta (código)`3 -0.68711977 0.08187821
## `Pauta (código)`4 -0.67920670 0.37922370
## `Pauta (código)`2 -0.42552444 0.19325423
## log(ferritina_previa) 0.59068853 0.79278705
## Mes:AleatorizaciónFerinject -0.09246684 0.05447954
El modelo m2_pautaRandom:
## 2.5 % 97.5 %
## .sig01 NA NA
## .sig02 NA NA
## .sig03 NA NA
## .sigma NA NA
## (Intercept) -0.49670870 0.42608892
## HD1 -0.41622113 0.61005373
## Mes -0.05070311 0.05724154
## AleatorizaciónFerinject -0.43590637 0.46733137
## `Pauta (código)`3 -0.47788556 0.37458272
## `Pauta (código)`4 -0.91469666 1.21137190
## `Pauta (código)`2 -2.86323710 -1.08599779
## cambio_log_ferritina_tmenos1 0.44781064 0.62281932
## Mes:`Pauta (código)`3 -0.01165050 0.13761348
## Mes:`Pauta (código)`4 -0.92163260 0.50139122
## Mes:`Pauta (código)`2 0.15214222 0.52326602
Ferritina (Valores óptimos)
# Overdispersion test
dispersion ratio = 0.988
p-value = 0.864
# Check for Multicollinearity
Low Correlation
Term VIF VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
HD 1.16 [1.05, 1.47] 1.08 0.86 [0.68, 0.95]
Mes 2.09 [1.75, 2.60] 1.45 0.48 [0.39, 0.57]
log(ferritina_previa) 1.13 [1.03, 1.46] 1.06 0.89 [0.68, 0.97]
Moderate Correlation
Term VIF VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
Aleatorización 8.38 [6.59, 10.75] 2.89 0.12 [0.09, 0.15]
Pauta (código) 5.73 [4.55, 7.32] 2.39 0.17 [0.14, 0.22]
Mes:Aleatorización 6.31 [4.99, 8.06] 2.51 0.16 [0.12, 0.20]