La fluorescencia es la propiedad de algunos átomos y moléculas de absorber luz a una longitud de onda determinada (excitación) seguido por la emisión de luz de corta duración a una longitud de onda más larga.
La fluorescencia implica una fuente de luz externa para excitar la muestra a una longitud de onda en particular. Cuando se excita a la longitud de onda adecuada, la molécula pasa de un estado básico a otro excitado. A medida que la molécula vuelve al estado fundamental, se libera energía en forma de calor (pérdida de energía) y luz a una longitud de onda diferente de menor energía.
Recolección de los datos
Se recolectaron muestras de azúcar durante tres meses de operación en una planta azucarera ubicada en Escandinavia. Las muestras se tomaron cada ocho horas, lo que corresponde a tres mediciones diarias, para un total de 268 muestras a lo largo del periodo de estudio.
El azúcar se disolvió en agua en una proporción de 2.25 g por 15 ml, y la solución resultante se analizó utilizando un espectrofluorómetro PE LS50B.
Cada muestra fue excitada a siete longitudes de onda (230, 240, 255, 290, 305, 325 y 340 nm). Para cada una de estas excitaciones, el equipo registró la intensidad de emisión en 571 longitudes de onda. Los espectros de emisión se midieron en el rango de 275 a 560 nm, con intervalos de 0,5 nm.
Para el suavizado de las curvas se empleará suaviado splines, utilizando bases B-splines. Esta elección se justifica a partir de la visualización de los datos, donde se puede observar que los espectros de emisión no presentan un comportamiento periódico. En este contexto, los B-splines son una base adecuada.
Para poder realizar FPCA, el operador de covarianza debe ser un operador de Hilbert–Schmidt, simétrico y definido positivo. Para que lo primero se cumpla, el proceso aleatorio del cual se obtienen las realizaciones debe ser cuadrado–integrable, \(\mathrm{E}[\lVert \chi \rVert^2]<\infty\). Las otras dos propiedades se tienen por la simetría y positividad del operador de covarianza \(c(s,t) = \operatorname{Cov}(\chi(s), \chi(t))\).
Otro supuesto que se hace es que la media es constante. Sean \(\chi_1\),\(\chi_2\)\(\cdots\)\(\chi_N\) observaciones funcionales univariadas en \(L^2\).
Para esto, se juzga el sistema de hipótesis \[
H_0: \mathrm{E}[\chi_1] = \cdots = \mathrm{E}[\chi_N]
\] Cada observación funcional puede representarse mediante el modelo:
\[
\begin{equation}
\chi_i(t) = \mu(t) + Y_i(t), \quad E[Y_i(t)] = 0
\end{equation}
\] Donde \(\mu(t)\) es la media poblacional.
es pequeña para todo \(1 \leq k < N\) y para todo \(t \in [0,1]\).
Sin embargo, \(\Delta_k(t)\) puede volverse grande debido a la variabilidad si \(k\) está cerca de \(1\) o de \(N\). Por esta razón, es usual trabajar con
Si \(k\) es cercano a 1, \(\hat{\mu}_k\) se calcula con pocos valores, mientras que \(\tilde{\mu}_c¿k\) incorpora la mayor parte de la información. En cambio, si \(k\) es cercano a \(N\), ocurre lo contrario. En cualquiera de estos dos casos, \(\hat{\mu}_k\) y \(\tilde{\mu}_k\) pueden diferir considerablemente, lo que podría llevar a que la prueba detecte un punto de cambio incluso cuando en realidad no existe.
Para solucionar este problema, se puede ponderar la diferencia entre estos valores mediante un peso parabólico en función de \(k\). \[
P_k(t)
=
\sum_{1 \leq i \leq k} \chi_i(t)
-
\frac{k}{N}
\sum_{1 \leq i \leq N} \chi_i(t)
=
\frac{k(N-k)}{N}
\left[
\hat{\mu}_k(t)
-
\check{\mu}_k(t)
\right].
\]
Ya que el valor de \(P_k(t)\) no cambia si las funciones \(\chi_i(t)\) son reemplazadas por \(\chi_i(t)-\chi_N(t)\). Al definir \(k=[Nx]\), con \(x \in (0,1)\), se obtiene
\[
\begin{equation}
\int \left\{
\sum_{1 \leq i \leq Nx} \chi_i(t)
-
\frac{[Nx]}{N}
\sum_{1 \leq i \leq N} \chi_i(t)
\right\}
\hat{v}_{\ell}(t)\,dt
=
\sum_{1 \leq i \leq Nx} \hat{\xi}_{\ell,i}
-
\frac{[Nx]}{N}
\sum_{1 \leq i \leq N} \hat{\xi}_{\ell,i}.
\end{equation}
\]
Lo que muestra que los scores pueden utilizarse para probar la constancia de la función de media.
El siguiente teorema puede emplearse para derivar varios estadísticos de prueba.
\[
\begin{equation}
T_N(x)
=
\frac{1}{N}
\sum_{\ell=1}^{d}
\hat{\lambda}_{\ell}^{-1}
\left(
\sum_{1 \leq i \leq Nx}
\hat{\xi}_{\ell,i}
-
x
\sum_{1 \leq i \leq N}
\hat{\xi}_{\ell,i}
\right)^2
\end{equation}
\]
Sean \(B_1(\cdot), \ldots, B_d(\cdot)\) puentes brownianos estándar independientes. Bajo \(H_0\):
La decisión estadística se toma comparando el valor calculado de \(S_{N,d}\) con los valores críticos. Se rechaza \(H_0\) con un nivel de significancia \(\alpha\) si: \[
\begin{equation}
S_{N,d} > C_d(\alpha)
\end{equation}
\] Teniendo en cuenta que \(x \in [0, 1]\), el valor \(x^*\) que maximiza \(T_N(x)\), multiplicado por \(N\) corresponde a un estimador consistente del punto de cambio.
Esto se realiza mediante la función fchange() del paquete fChange, donde es posible aplicar la metodología propuesta por (Berkes et al. 2009). Esta metodología
Tabla 1: Estimaciones de los puntos de cambio en la media funcional
Punto de Cambio
p-valor
3
0.038
7
0.000
13
0.043
16
0.005
112
0.003
134
0.000
188
0.000
194
0.007
204
0.002
216
0.038
246
0.005
256
0.014
Los resultados proporcionados en Tabla 1 muestran evidencia para rechazar la hipótesis nula de media funcional constante, \(H_0: \mathrm{E}[\chi_1] = \cdots = \mathrm{E}[\chi_N]\), a favor de la existencia de cambios en la media de las curvas espectrométricas.
Segmento
n
Rango
1
3
1 a 3
2
4
4 a 7
3
6
8 a 13
4
3
14 a 16
5
96
17 a 112
6
22
113 a 134
7
54
135 a 188
Segmento
n
Rango
8
8
6
189 a 194
9
9
10
195 a 204
10
10
12
205 a 216
11
11
30
217 a 246
12
12
10
247 a 256
13
13
12
257 a 268
Figura 1: Curvas observadas y funciones medias estimadas para el segmento 5 y el segmento 7
Por lo tanto, a cada observación se le resta la media estimada correspondiente al segmento al que pertenece, con el fin de obtener las curvas centradas.
Figura 2: Curvas espectrométricas centradas para el segmento 5 y el segmento 7
A continuación se realiza el análisis de componentes principales para el segmento 5 y el segmento 7.
Luego de haber centrado los procesos, se encuentran las estimaciones de las funciones propias asociadas al operador de covarianza del proceso funcional para cada grupo.
Figura 3: Gráfico de las tres primeras funciones propias estimadas del segmento 5
Con la función plot.pca.fd es posible interpretarlas de una forma más sencilla, pues se muestra cómo cada componente principal afecta a la media del proceso. Esto se muestra en la Figura 4, Figura 5 y Figura 6.
Figura 4: Efecto de las primera componente principal sobre la media del proceso del segmento 5
Figura 5: Efecto de la segunda componente principal sobre la media del proceso del segmento 5
Figura 6: Efecto de la tercera componente principal sobre la media del proceso del segmento 5
[1] "done"
Figura 7: Gráfico de las tres primeras funciones propias estimadas del segmento 7
Figura 8: Efecto de las primera componente principal sobre la media del proceso del segmento 7
Figura 9: Efecto de la segunda componente principal sobre la media del proceso del segmento 7
Figura 10: Efecto de la tercera componente principal sobre la media del proceso del segmento 7
En el caso de la primera función propia, esta está mostrando un aumento constante en la media. Debido a su alto porcentaje de variabilidad explicada, se podría decir que la mayor fuente de variación es la cantidad de luz que se emite (magnitud). Además, se puede ver que hay más varibilidad cuando las muestras se someten a longitudes de onda entre los 350nm y 500nm aproximadamente.
La segunda función propia muestra un contraste entre la exposición a las longitudes de onda menores a 380nm aproximadamente y la exposición a las longitudes de onda mayores a 380nm, mostrando una variación mayor en los intervalos [310, 370] y [400, 470] nm.
Por último, la tercera función propia tienen un patrón cuadrático y presenta mayor variabilidad hacia las longitudes de onda medias.
2.3 Varianza explicada
Figura 11: Scree plot de las tres primeras componentes principales para el segmento 5 y segmento 7
El porcentaje de varianza se muestra a través de un scree plot en la Figura 11. De esta forma, es posible ver que para los dos segmentos, las dos primeras componentes principales ya explican más del 90% de variabilidad total.
2.4 Descomposición Karhunen-Loève
La descomposición de Karhunen-Loève consiste en expresar cada observación funcional como \[
X(t) = \mu(t) + \sum_{k=1}^\infty \xi_k \nu_k (t)
\] donde \(\nu_k\) corresponde a la \(k\)–ésima función propia y \(\xi_k\) es el \(k\)–ésimo score, \(\xi_k=\langle X, \nu_k \rangle\).
En este caso, la base óptima corresponde al conjunto de las dos primeras funciones propias pues ellas explican más del 90% de la variabilidad, aproximadamente. Por lo tanto, para cada observación funcional, se tiene su aproximación \[
X_{i,g}(t) \approx \hat \mu_g(t) + \sum_{k=1}^{K_g}\hat {\xi}_{ikg} \hat \nu _ {kg}(t)
\] con \(i = 1,\ldots,268\), \(g=1,2\) y \(K_g=2\).
A continuación, se expresan las tres primeras observaciones muestrales con la descomposición de Karhunen-Loève.
Figura 14: Gráficos de las realizaciones del primer score para el segmento 5
En el caso del primer grupo es posible ver que los scores tienen una distribución asimétrica y también hay presencia de algunos outliers.
Figura 15: Gráficos de las realizaciones del primer score para el segmento 7
2.6 Gráficos de dispersión de los scores
A continuación, se muestra el gráfico de dispersión de las dos primeras componentes principales, que explican más del 90% de la variabilidad, aproximadamente.
Figura 16: Score plot de las dos primeras componentes principales para el segmento 5
Es posible ver que la mayoría de puntos se concentran alrededor de los valores negativos cercanos al cero para el primer score y alrededor del cero para el segundo score. Asimismo, debido al gran porcentaje de variabilidad que explica la primera componente se puede ver que la dispersión es mayor a lo largo de su eje.
Figura 17: Score plot de las dos primeras componentes principales para el segmento 7
Figura 18: Gráfico de la función de covarianza estimada y las funciones propias estimadas (Segmento 5)
Figura 19: Gráfico de la función de covarianza estimada y las funciones propias estimadas (Segmento 7)
A partir de la gráfica, se observa que la función de covarianza estimada alcanza sus valores más altos en las longitudes de onda intermedias. Esto indica que la variabilidad de las curvas es mayor en la región central.
Este comportamiento es coherente con lo observado en la primera función propia, la cual presenta sus valores más altos precisamente en dichas longitudes de onda, lo que sugiere que la mayor parte de la variabilidad está concentrada en esa zona y corresponde a un patrón global de cambio en el nivel de las curvas.
La segunda y tercera funciones propias muestran cambios de signo y formas más oscilatorias, lo que refleja variaciones más complejas en la forma de las curvas. Estas funciones permiten capturar patrones de contraste y variaciones locales que no son explicados por la primera componente principal, aportando así mayor flexibilidad en la representación de la variabilidad funcional.
2.8 Teorema de Mercer
Por el teorema de Mercer se tiene que el kernel \(\psi(s,t)\) usado en el operador integral \(\Psi (x)(t)\) se puede representar en términos de los valores propios y funciones propias del operador. En este caso, se tiene el operador de covarianza \(\mathcal{C}_\chi(x)(t))\) con la función de covarianza como Kernel. Luego,
Figura 20: Gráfico de la función de covarianza y su aproximación por el teorema de Mercer (Segmento 5)
Figura 21: Gráfico de la función de covarianza y su aproximación por el teorema de Mercer (Segmento 5)
Figura 22: Gráfico de la función de covarianza y su aproximación por el teorema de Mercer (Segmento 5)
Figura 23: Gráfico de la función de covarianza y su aproximación por el teorema de Mercer (Segmento 7)
Figura 24: Gráfico de la función de covarianza y su aproximación por el teorema de Mercer (Segmento 7)
Figura 25: Gráfico de la función de covarianza y su aproximación por el teorema de Mercer (Segmento 7)
2.9 Carta de control usando FPCA
Una carta de control es una herramienta que permite monitorear si un proceso se mantiene bajo control o si presenta cambios anómalos a lo largo del tiempo.
Para construir una carta de control a partir del análisis de componentes principales:
Se utiliza una carta\(T^2\) para monitorear la variabilidad explicada por las componentes principales (scores).
Para el caso funcional, sea \(\chi\) una función aleatoria definida en \(L^2\), la cual puede representarse mediante la descomposición de Karhunen–Loève como:
\(\phi_k\): son las funciones propias ortonormales del operador de covarianza asociado a \(\chi\).
\(\xi_k = \langle \chi, \phi_k \rangle\): son los scores, que son las proyecciones de la función \(\chi\) sobre las funciones propias.
Para realizar FPCA, se utiliza una aproximación truncada de esta expansión. Dado que el operador de covarianza posee infinitos valores y funciones propias, se selecciona un número finito \(K\) de componentes principales, de manera que se capture una proporción suficientemente alta de la varianza total.
Además, se complementa con una carta\(Q\) o SPE, que permite detectar variabilidad no capturada por las componentes principales, es decir, aquello que queda fuera de las direcciones de máxima varianza.
En la Fase I se realiza el FPCA a partir de una muestra en control.
Se realiza el FPCA.
Se calculan los estadísticos \(T_j^2\) y \(Q_j\).
El nivel de significancia conjunto para las cartas de control \(T^2\) y \(Q\) se fija como \(\alpha\). Dado que se utilizan dos estadísticas de monitoreo, el nivel de significancia individual para cada carta se define como:
\[
\alpha' = 1 - (1 - \alpha)^{1/p},
\]
donde \(p = 2\) corresponde al número de cartas de control. De esta manera, se garantiza que el nivel de significancia global sea \(\alpha\). Nosotros fijaremos \(\alpha = 0.05\) como nivel de significancia conjunto.
Por otra parte, dado que la distribución exacta de los estadísticos \(T^2\) y \(Q\) no es conocida, los límites de control se estiman mediante un procedimiento de bootstrap. En particular, se considera el máximo de estos estadísticos en cada réplica bootstrap, y a partir de esta distribución empírica se calculan los cuantiles correspondientes de \(T^2\) y \(Q\), los cuales se utilizan para definir los limites.
Para la construcción de las cartas de control, se divide el conjunto de datos en dos subconjuntos: el \(80\%\) de las observaciones se utiliza en la Fase I, mientras que el \(20\%\) restante se reserva para la Fase II.
Una vez identificados los puntos de cambio, la construcción de las cartas de control se realizará mediante la partición del conjunto de datos, agrupando aquellas observaciones que comparten una misma estructura de media.
Código
T2_Q.CL <-function(data, argvals, Lambda, Basis, ncomp, alpha, B, seed){ N <-dim(data)[2] all_T2 <-vector("list", B) all_Q <-vector("list", B) fdParobj <-fdPar(fdobj = Basis, Lfdobj =2, lambda = Lambda) dt <-diff(argvals)set.seed(seed)for (b inseq_len(B)) {# Remuestreo idx <-sample(1:N, size = N, replace =TRUE) samples <- data[, idx, drop =FALSE]# Suavizado y PCA smoothlist <-smooth.basis(argvals, samples, fdParobj) fdObj_c <-center.fd(smoothlist$fd) pcaObj <-pca.fd(fdObj_c, nharm = ncomp, centerfns =FALSE)# Extraer scores y valores propios Scores <- pcaObj$scores Eigenval <- pcaObj$values[1:ncomp]# T2 all_T2[[b]] <-rowSums((Scores %*%diag(1/Eigenval)) * Scores)# Q Xfd <-eval.fd(argvals, fdObj_c) Phi <-eval.fd(argvals, pcaObj$harmonics) Xhat <- Phi %*%t(Scores) all_Q[[b]] <-apply((Xfd - Xhat)^2, 2, function(v){sum((v[-1] + v[-length(v)]) /2* dt) }) }# Límites de control CL_T2 <-quantile(unlist(all_T2), 1- alpha) CL_Q <-quantile(unlist(all_Q), 1- alpha)# Modelo con datos originales smoothlist_f <-smooth.basis(argvals, data, fdParobj) fdObj_c_f <-center.fd(smoothlist_f$fd) pcaObj_f <-pca.fd(fdObj_c_f, nharm = ncomp, centerfns =FALSE) Scores_f <- pcaObj_f$scores Eigenval_f <- pcaObj_f$values[1:ncomp]# T2 final T2_final <-rowSums((Scores_f %*%diag(1/Eigenval_f)) * Scores_f)# Q final Xfd_f <-eval.fd(argvals, fdObj_c_f) Phi_f <-eval.fd(argvals, pcaObj_f$harmonics) Xhat_f <- Phi_f %*%t(Scores_f) Q_final <-apply((Xfd_f - Xhat_f)^2, 2, function(v){sum((v[-1] + v[-length(v)]) /2* dt) })return(list(CL_T2 =as.numeric(CL_T2),CL_Q =as.numeric(CL_Q),T2 = T2_final,Q = Q_final ))}clean_phaseI_T2Q <-function(data, p, argvals, Lambdas, Basis, ncomp =2,alpha =0.025, B =500, seed =123,r,cp){set.seed(seed) data_variable <- data[ , , p][,cp] n_total <-dim(data_variable)[2]# Selección de Fase I idx_phase1 <-1:floor(r * n_total) data_phase1 <- data_variable[, idx_phase1, drop =FALSE] indices <- idx_phase1 removed_indices <-c() Lambda <- Lambdas[p]repeat { res <-T2_Q.CL(data = data_phase1,argvals = argvals,Lambda = Lambda,Basis = Basis,ncomp = ncomp,alpha = alpha,B = B,seed = seed )# Identificar fuera de control outliers <-which(res$T2 > res$CL_T2 | res$Q > res$CL_Q)if(length(outliers) ==0) break# Guardar cuáles estamos quitando removed_indices <-c(removed_indices, indices[outliers])# Actualizar datos y los índices que quedan data_phase1 <- data_phase1[, -outliers, drop =FALSE] indices <- indices[-outliers]if(length(indices) <= ncomp) break }return(list(cleaned_data = data_phase1,final_result = res,removed_indices = removed_indices,n_removed =length(removed_indices),indices = indices ))}
Se construirá la carta de control para el proceso en el cual la media se mantiene constante y que, además, contiene el mayor número de observaciones. En este caso, corresponde al segmento 5.
La división de los datos se realizará utilizando el 80% de las observaciones para la Fase I y el 20% restante para la Fase II. Finalmente, los límites de control serán estimados mediante un procedimiento de bootstrap.
Del segmento 5, conformado por 96 observaciones que presentan la misma media, se seleccionó el 80%, correspondiente a 76 observaciones, para la Fase I. Dentro de este conjunto, 41 observaciones se utilizaron para la estimación de los límites de control, mientras que las 20 observaciones restantes se destinaron a la Fase II, con el propósito de realizar el monitoreo del proceso.
A partir de la Fase I, los límites de control obtenidos fueron 5.866352 para el estadístico \(T^2\) y 173.5451 para el estadístico \(Q\).
Figura 26: Cartas de control funcional (T² y Q) Fase 1 - Segmento 5
Código
dt <-diff(t)# Scores y valores propios segmento 5Scores_g3 <- pcaObj.G1$scores[,1:2]Eigenval_g3 <- pcaObj.G1$values[1:2]# Q segmento 5Xfd_g3 <-eval.fd(t, cp$Grupo_5$fd_centrado)Phi_g3 <-eval.fd(t, pcaObj.G1$harmonics)[,1:2]Xhat_g3 <- Phi_g3 %*%t(Scores_g3)indices_excluir <-c( resT2Q_2[["indices"]], resT2Q_2[["removed_indices"]])# Índices válidos (los que NO están en el vector anterior)indices_validos <-setdiff(1:nrow(Scores_g3), indices_excluir)# T2 solo para los índices válidosT2_final_3 <-rowSums( (Scores_g3[indices_validos, ] %*%diag(1/ Eigenval_g3)) * Scores_g3[indices_validos, ])# Q segmento 5 solo para los índices válidosQ_final_3 <-apply( (Xfd_g3[, indices_validos] - Xhat_g3[, indices_validos])^2,2,function(v) {sum((v[-1] + v[-length(v)]) /2* dt) })CL_T2 <- resT2Q_2$final_result$CL_T2CL_Q <- resT2Q_2$final_result$CL_Qdf_g3 <-data.frame(obs = indices_validos +16,T2 = T2_final_3,Q = Q_final_3)df_long_g3 <- df_g3 %>%pivot_longer(cols =c(T2, Q),names_to ="stat",values_to ="value" )limits <-data.frame(stat =c("T2", "Q"),CL =c(CL_T2, CL_Q))palette <-c("T2"="#1F77B4","Q"="#FF7F0E")limit_color <-"#D62728"ggplot(df_long_g3, aes(x = obs, y = value, color = stat)) +geom_line(linewidth =0.9) +geom_point(size =1.6, alpha =0.85) +geom_hline(data = limits,aes(yintercept = CL),color = limit_color,linetype ="dashed",linewidth =1 ) +facet_wrap(~stat, ncol =1, scales ="free_y") +scale_color_manual(values = palette) +labs(x ="Índice de observación original",y ="Valor del estadístico",color ="Estadístico" ) +theme_minimal(base_size =13) +theme(legend.position ="none",strip.text =element_text(face ="bold"),plot.title =element_text(face ="bold", hjust =0.5),panel.grid.minor =element_blank() )
Observaciones fuera de control
Observación real
Valor T²
Valor Q
Fuera por T²
Fuera por Q
93
2.883
790.247
No
Sí
94
2.240
174.686
No
Sí
95
0.211
1780.197
No
Sí
96
1.723
1189.014
No
Sí
99
0.400
453.050
No
Sí
100
0.098
947.013
No
Sí
101
0.264
733.997
No
Sí
102
0.992
617.703
No
Sí
103
0.496
434.745
No
Sí
105
1.380
521.318
No
Sí
106
0.979
419.474
No
Sí
107
0.111
1324.682
No
Sí
108
2.029
521.007
No
Sí
109
6.747
2151.488
Sí
Sí
110
1.287
276.988
No
Sí
2.10 Carta de control usando La distancia funcional de Mahalanobis
Sea \(\chi\) una función aleatoria definida en \(L^2\), asumimos \[
\mu_\chi(t) = E[\chi(t)],
\] y \(\mathcal{C}_X\) el operador de covarianza
Sean \(\lambda_1, \lambda_2, \ldots\) los valores propios del operador y \(\psi_1, \psi_2, \ldots\) las funciones propias, que forman una base ortonormal de \(L^2\).
Usando la expansión de Karhunen–Loève de la función aleatoria \(X\): \[
\chi = \mu_\chi + \sum_{k=1}^{\infty} \xi_k \psi_k\] donde
\[
\xi_k = \langle \chi - \mu_X, \psi_k \rangle,
\] los cuales son los scores de componentes principales, variables aleatorias no correlacionadas con media cero y varianza \(\lambda_k\).
El operador de covarianza se expresa como: \[
\mathcal{C}_\chi(x,y) = \sum_{j=1}^{\infty} \lambda_j \psi_j(x)\psi_j(y),
\] usando el teorema de Mercer.
Para una función \(y\), el operador inverso se escribe como: \[
\mathcal{C}_\chi^{-1}(y)
= \sum_{k=1}^{\infty} \frac{1}{\lambda_k} \langle y, \psi_k \rangle \psi_k.
\]
Se define la distancia funcional de Mahalanobis entre \(\chi\) y \(\mu_\chi\) como: \[
d_{FM}^2 = \left\langle \mathcal{C}_\chi^{-1/2}(\chi - \mu_\chi), \mathcal{C}_\chi^{-1/2}(\chi - \mu_\chi) \right\rangle.
\]
Expandiendo: \[
\mathcal{C}_\chi^{-1/2}(\chi - \mu_\chi)
= \sum_{k=1}^{\infty} \frac{1}{\sqrt{\lambda_k}} \xi_k \psi_k,
\] por lo que
Esta versión funcional de la distancia de Mahalanobis es una semi-distancia, ya que debido al truncamiento del operador de covarianza puede ocurrir que elementos distintos tengan distancia cero.
Para la construcción de las cartas de control se seguirá un procedimiento análogo al utilizado previamente en el contexto de FPCA, dividiendo el análisis en dos etapas: una fase de calibración (Fase I) y una fase de monitoreo (Fase II).
En la fase I se seleccionará un subconjunto de observaciones que se asume proviene de un proceso bajo control, es decir, datos que comparten la misma estructura de media. En este caso, se considerará nuevamente que el periodo estable corresponde a las observaciones finales, por lo que se tomará el 80% de los datos más recientes para conformar la Fase I, mientras que el 20% restante se destinará a la Fase II.
Esta partición permitirá estimar los límites de control a partir de un conjunto de referencia estable y, posteriormente, evaluar el comportamiento de las observaciones restantes. Manteniendo el mismo enfoque basado en bootstrap y en la distancia funcional de Mahalanobis.
Código
DFM.CL <-function(data, argvals, Lambda, Basis, ncomp, alpha, B, seed){ N <-dim(data)[2] all_DFM <-vector("list", B) fdParobj <-fdPar(fdobj = Basis, Lfdobj =2, lambda = Lambda)set.seed(seed)for (b inseq_len(B)) {# Remuestreo bootstrap idx <-sample(1:N, size = N, replace =TRUE) samples <- data[, idx, drop =FALSE]# Suavizado y FPCA smoothlist <-smooth.basis(argvals, samples, fdParobj) fdObj_c <-center.fd(smoothlist$fd) pcaObj <-pca.fd(fdObj_c, nharm = ncomp, centerfns =FALSE)# Scores y valores propios Scores <- pcaObj$scores Eigenval <- pcaObj$values[1:ncomp]# Distancia funcional de Mahalanobis all_DFM[[b]] <-sqrt(rowSums( (Scores^2) /matrix( Eigenval,nrow =nrow(Scores),ncol =length(Eigenval),byrow =TRUE ) ) ) } CL_DFM <-quantile(unlist(all_DFM), 1- alpha)# Modelo final con los datos originales smoothlist_f <-smooth.basis(argvals, data, fdParobj) fdObj_c_f <-center.fd(smoothlist_f$fd) pcaObj_f <-pca.fd(fdObj_c_f, nharm = ncomp, centerfns =FALSE) Scores_f <- pcaObj_f$scores Eigenval_f <- pcaObj_f$values[1:ncomp]# DFM final DFM_final <-sqrt(rowSums( (Scores_f^2) /matrix( Eigenval_f,nrow =nrow(Scores_f),ncol =length(Eigenval_f),byrow =TRUE ) ) )return(list(CL_DFM =as.numeric(CL_DFM),DFM = DFM_final ))}clean_phaseI_DFM <-function(data, p, argvals,Lambdas, Basis, ncomp =2, alpha =0.025, B =500, seed =123, r, cp) {set.seed(seed) data_variable <- data[, , p][, cp] n_total <-dim(data_variable)[2]# Selección aleatoria de Fase I idx_phase1 <-1:floor(r * n_total) data_phase1 <- data_variable[, idx_phase1, drop =FALSE]# Guardar índices originales indices <- idx_phase1 removed_indices <-c() Lambda <- Lambdas[p]repeat {# Estimar límite de control y DFM res <-DFM.CL(data = data_phase1,argvals = argvals,Lambda = Lambda,Basis = Basis,ncomp = ncomp,alpha = alpha,B = B,seed = seed )# Identificar observaciones fuera de control outliers <-which(res$DFM > res$CL_DFM)# Si no hay outliers, detenerif (length(outliers) ==0) break# Guardar índices eliminados removed_indices <-c( removed_indices, indices[outliers] )# Eliminar observaciones fuera de control data_phase1 <- data_phase1[, -outliers, drop =FALSE] indices <- indices[-outliers]# Evitar que queden muy pocas observacionesif (length(indices) <= ncomp) break }return(list(cleaned_data = data_phase1,final_result = res,removed_indices = removed_indices,n_removed =length(removed_indices),indices = indices ))}CL_DFM=clean_phaseI_DFM (data=wvl, p=2, argvals=t, Lambdas=Lambdas, Basis=Basis,B =500,alpha=0.05,r=0.8,cp=17:112)
Del último conjunto de datos, conformado por las últimas 84 observaciones que presentan la misma media, se seleccionó el 80%, correspondiente a 76 observaciones, para la Fase I. Dentro de este conjunto, 37 observaciones se utilizaron para la estimación de los límites de control, mientras que las 20 observaciones restantes se destinaron a la Fase II, con el propósito de realizar el monitoreo del proceso.
A partir de la Fase I, el límite de control obtenido fue 2.163274
Figura 27: Carta de control funcional DFM Fase 1
Código
# Índices que NO se quieren considerarindices_excluir <-c( CL_DFM$indices, CL_DFM$removed_indices)# Índices válidosindices_validos <-setdiff(1:nrow(Scores_g3), indices_excluir)# Distancia funcional de Mahalanobis solo para índices válidosDFM_final_3 <-sqrt(rowSums( (Scores_g3[indices_validos, ]^2) /matrix( Eigenval_g3,nrow =length(indices_validos),ncol =length(Eigenval_g3),byrow =TRUE ) ))# Límite de controlCL_DFM_val <- CL_DFM$final_result$CL_DFM# Data frame con índices realesdf_g3 <-data.frame(obs = indices_validos,DFM = DFM_final_3)limit_color <-"#D62728"dfm_color <-"#1F77B4"ggplot(df_g3, aes(x = obs, y = DFM)) +geom_line(color = dfm_color,linewidth =0.9 ) +geom_point(color = dfm_color,size =1.6,alpha =0.85 ) +geom_hline(yintercept = CL_DFM_val,color = limit_color,linetype ="dashed",linewidth =1 ) +scale_x_continuous(labels =function(x) x +16 ) +labs(x ="Índice de observación",y ="Valor de la DFM" ) +theme_minimal(base_size =13) +theme(panel.grid.minor =element_blank(),plot.title =element_text(face ="bold",hjust =0.5 ) )
Figura 28: Carta de control funcional DFM Fase 2
Observaciones fuera de control según la DFM
Observación real
Valor DFM
104
2.202
109
2.598
3 MFPCA: Aplicación
3.1 Supuestos que requiere el MFPCA
Dado que el MFPCA se basa en la descomposición de Karhunen–Loève, se tiene que:
admite una representación finita de Karhunen–Loève si y solo si cada uno de los procesos univariantes \(X^{(j)}, \quad j = 1, \dots, p\) admite una representación finita de Karhunen–Loève.
Esto implica que cada proceso univariante pertenece a un espacio de Hilbert, en particular al espacio de funciones aleatorias cuadrado integrables \(L^2(\mathcal{T})\), y que el operador de covarianza asociado es de tipo Hilbert–Schmidt, autoadjunto (simétrico) y definido positivo.
Además, otro supuesto importante es que la función media multivariada sea constante, es decir, se quiere juzgar el sistema de hipótesis
\[
H_0: \mathbb{E}[\mathbf{X}_1(t)] = \cdots = \mathbb{E}[\mathbf{X}_N(t)]
\] donde
es la función media multivariada de la observación (i).
Bajo la hipótesis alternativa, se asume la existencia de al menos un punto de cambio (k^{}), tal que la media funcional multivariada cambia antes y después de dicho punto. Por tanto, el modelo puede escribirse como
\[
X_i(t) =
\begin{cases}
\mu^{(1)}(t) + \varepsilon_i(t), & 1 \leq i \leq k^{\ast}, \\[6pt]
\mu^{(2)}(t) + \varepsilon_i(t), & k^{\ast} < i \leq N,
\end{cases}
\]
donde (^{(1)}(t)) y (^{(2)}(t)) son funciones medias multivariadas, y (_i(t)) representa un término de error.
Para reducir la dimensión del problema, se aplica un análisis de componentes principales funcionales multivariado. Primero se estima la media funcional multivariada muestral como
donde \(d\) es el número de componentes principales retenidas, \(\boldsymbol{\psi}_{\ell}(t)\) es la \(\ell\)-ésima función propia multivariada y \(\eta_{i,\ell}\) es el score asociado a la observación \(i\) en la componente \(\ell\).
donde \(\hat{\lambda}_{\ell}\) es el valor propio asociado a la componente principal funcional multivariada \(\ell\), y \(\hat{\eta}_{i,\ell}\) son los scores estimados.
El estadístico global de prueba se obtiene acumulando la evidencia de cambio a lo largo de todos los posibles puntos \(k\):
Figura 29: Curvas observadas y funciones medias estimadas en el segmento 1
Figura 30: Curvas observadas y funciones medias estimadas en el segmento 13
3.2 Funciones propias multivariadas.
Para determinar las componentes principales funcionales multivariadas, se seguirá el enfoque propuesto por (Happ y Greven 2018), el cual permite realizar MFPCA incluso cuando los dominios de los procesos funcionales son diferentes.
En el presente caso, los dominios son iguales; no obstante, este enfoque resulta conveniente, ya que garantiza propiedades deseables del operador de covarianza del proceso funcional multivariado, tales como ser de tipo Hilbert–Schmidt, autoadjunto y definido positivo.
Dadas muestras \(\mathbf{\chi_1}, \dots, \mathbf{\chi_N}\) de \(\mathbf{\chi}\), el procedimiento de estimación propuesto para MFPCA consta de cuatro pasos:
Para cada elemento \(\chi^{(j)}\) se estima un FPCA univariante basado en las observaciones \(\chi^{(j)}_1, \dots, \chi^{(j)}_N\). Esto produce funciones propias estimadas \(\hat{\phi}^{(j)}_m\) y scores \(\hat{\xi}^{(j)}_{i,m}\), \(i = 1, \dots, N\), \(m = 1, \dots, M_j\),para soluciones de truncamiento elegidas adecuadamente \(M_j\).
Definir la matriz \(\Xi \in \mathbb{R}^{N \times M_+}\), donde cada fila \(\Xi_i\) contiene todos los scores estimados para una observación: \(\Xi_i = \big(\hat{\xi}^{(1)}_{i,1}, \dots, \hat{\xi}^{(1)}_{i,M_1}, \dots, \hat{\xi}^{(p)}_{i,1}, \dots, \hat{\xi}^{(p)}_{i,M_p}\big).\) Un estimador \(\hat{Z} \in \mathbb{R}^{M_+ \times M_+}\) de la matriz de bloques \(Z\) se obtiene como \(\hat{Z} = (N - 1)^{-1} \Xi^\top \Xi.\)
Realizar un análisis espectral de matrices para \(\hat{Z}\), obteniendo valores propios \(\hat{\nu}_m\) y vectores propios ortonormales \(\hat{\mathbf{c}}_m\), \(m = 1, \dots, M_+\).
Los estimadores elemento a elemento de las funciones propias multivariantes asociadas a \(\hat{\nu}_m\) están dados por: \(\hat{\psi}^{(j)}_m(t_j) = \sum_{n=1}^{M_j} [\hat{\mathbf{c}}_m]^{(j)}_n \, \hat{\phi}^{(j)}_n(t_j), t_j \in \mathcal{T}_j,\) y los scores multivariantes pueden calcularse como:
\[\rho_m = \sum_{j=1}^{p} \sum_{n=1}^{M_j} [\boldsymbol{c_m}]_{n}^{(j)} \xi_{n}^{(j)}\]Dado que se identificaron múltiples puntos de cambio, para el desarrollo de los siguientes análisis se seleccionará el segmento 1, el cual contiene 84 observaciones funcionales multivariadas
La cantidad máxima de componentes principales que se pueden tomar son 14, por lo tanto sea \(\mathbf\varepsilon_1, \mathbf \varepsilon_2, \dots, \mathbf \varepsilon_{14}\).
un vector de tamaño \(268 \times 1\), donde \(\varepsilon_{ij}\) es la proyección del vector de curvas del individuo \(i\) con la función propia \(j\).
La entrada \(ij\) del mapa de calor hace referencia a la correlación de los scores \(\varepsilon_i\) con \(\varepsilon_j\), dados por:
Figura 36: Correlación entre los scores estimados por MFPCA
Como se observa en Figura 36, los scores multivariados resultan no correlacionados bajo esta metodología. Sin embargo, al analizar las correlaciones entre los scores univariados, se evidencia en Figura 37 que estos sí son correlacionados.
Figura 37: Correlación entre los scores univariados estimados para los siete procesos
3.8 Graficos de dispersión de las realizaciones de los scores que conjuntamente explican el 90 % de la variación del proceso.
Figura 38: Gráfico de dispersión de los scores estimados que explican más del 90% de variabilidad
3.9 Descomposición de de Karhunen-Loève
En el caso multivariado, se tiene la descomposición de Karhunen–Loève, de forma que para el vector de curvas aleatorias, \(\mathbf{X} \in L^2( \mathcal{T}_1 ) \times \cdots L^2( \mathcal{T}_p)\), se tiene que
con \(\mathbf{t} = (t_1,\ldots,t_p)^t\). En este caso, se tiene un vector de funciones de tamaño \(p=7\), donde el dominio es el mismo para cada proceso, \(\mathcal{T_1}=\cdots=\mathcal{T_7} = [275, 560]\). De esta forma, se aproxima cada una de las observaciones muestrales de la siguiente manera:
3.10 Grafique las tres primeras observaciones muestrales Vs las aproximaciones obtenidas por la descomposición de Karhunen-Loève
Figura 39: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
Figura 40: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
Figura 41: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
Figura 42: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
Figura 43: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
Figura 44: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
Figura 45: Realizaciones de los procesos y sus aproximaciones mediante la descomposición de Karhunen-Loève con las estimaciones de las funciones propias que explican más del 90% de variabilidad
3.11 Carta de control usando MFPCA
Se construirá la carta de control para el proceso multivariado en el cual la funcion media se mantiene constante y que, además, contiene el mayor número de observaciones. En este caso, corresponde al segmento 1.
La división de los datos se realizará utilizando el 80% de las observacionesmultivariadas para la Fase I y el 20% restante para la Fase II. Finalmente, los límites de control serán estimados mediante un procedimiento de bootstrap.
Código
T2_Q_Multi_CL <-function(mfd_obj, M, alpha, B, seed, Basis, Lambdas, grid) { N <- funData::nObs(mfd_obj) p <-length(mfd_obj) all_T2 <-vector("numeric", B * N) all_Q <-vector("numeric", B * N)# CORRECCIÓN: Usar grid, que es el argumento de la función dt <-diff(grid) set.seed(seed)for (b inseq_len(B)) { idx <-sample(1:N, size = N, replace =TRUE) mfd_boot <- funData::extractObs(mfd_obj, obs = idx) uniExp_boot <-lapply(1:p, function(j) { fd_boot_j <-funData2fd(mfd_boot[[j]], basisobj = Basis, lambda = Lambdas[j]) pca_j <-pca.fd(fd_boot_j, nharm = M, centerfns =TRUE)list(type ="given", functions =fd2funData(pca_j$harmonics, argvals = grid),scores = pca_j$scores) }) res_mfpca <-MFPCA(mfd_boot, M = M, uniExpansions = uniExp_boot, fit =TRUE)# T2 Bootstrap Eigenval <- res_mfpca$values[1:M] all_T2[((b-1)*N +1):(b*N)] <-rowSums(sweep(res_mfpca$scores^2, 2, Eigenval, "/"))# Q Bootstrap: CORRECCIÓN MULTIVARIADA residuos <- mfd_boot - res_mfpca$fit Q_val_boot <-numeric(N)for(j in1:p) {# Extraemos la matriz de valores (X) de cada componente funcional err_sq <- (residuos[[j]]@X)^2 Q_val_boot <- Q_val_boot +apply(err_sq, 1, function(v) {sum((v[-1] + v[-length(v)]) /2* dt) }) } all_Q[((b-1)*N +1):(b*N)] <- Q_val_boot }# Limites de control CL_T2 <-quantile(all_T2, 1- alpha) CL_Q <-quantile(all_Q, 1- alpha)# Modelo con datos originales uniExp_final <-lapply(1:p, function(j) { fd_j <-funData2fd(mfd_obj[[j]], basisobj = Basis, lambda = Lambdas[j]) pca_j <-pca.fd(fd_j, nharm = M, centerfns =TRUE)list(type ="given", functions =fd2funData(pca_j$harmonics, argvals = grid),scores = pca_j$scores) }) res_final <-MFPCA(mfd_obj, M = M, uniExpansions = uniExp_final, fit =TRUE)# T2 final T2_final <-rowSums(sweep(res_final$scores^2, 2, res_final$values[1:M], "/"))# Q final: CORRECCIÓN MULTIVARIADA residuos_f <- mfd_obj - res_final$fit Q_final <-numeric(N)for(j in1:p) { err_sq_f <- (residuos_f[[j]]@X)^2 Q_final <- Q_final +apply(err_sq_f, 1, function(v) {sum((v[-1] + v[-length(v)]) /2* dt) }) }return(list(CL_T2 =as.numeric(CL_T2), CL_Q =as.numeric(CL_Q), T2 = T2_final, Q = Q_final,mfpca_obj = res_final, # Útil para Fase 2eigenvalues = res_final$values[1:M]))} clean_phaseI_Multi <-function(mfd_segmento, M =3, alpha =0.025, B =200, seed =123, Basis, Lambdas, grid) {# Separación inicial n_total <- funData::nObs(mfd_segmento) n_phase1 <-floor(0.8* n_total) mfd_fase1 <- funData::extractObs(mfd_segmento, obs =1:n_phase1)# Inicialización de control current_mfd <- mfd_fase1 indices_act <-1:n_phase1 removed_indices <-c()repeat {# Calcular estadísticos y límites sobre el conjunto actual res <-T2_Q_Multi_CL(mfd_obj = current_mfd,M = M, alpha = alpha, B = B, seed = seed,Basis = Basis, Lambdas = Lambdas, grid = grid )# Identificar fuera de control outliers <-which(res$T2 > res$CL_T2 | res$Q > res$CL_Q)# Condición de parada 1: No hay más outliersif(length(outliers) ==0) break removed_indices <-c(removed_indices, indices_act[outliers]) indices_act <- indices_act[-outliers]if(length(indices_act) <= M +1) break current_mfd <- funData::extractObs(mfd_fase1, obs = indices_act) }return(list(cleaned_mfd = current_mfd, final_result = res, removed_indices = removed_indices, indices_finales = indices_act ))}segmento_1 <- cpMulti[[idxSegMulti[1]]]$mFData_originalresultado <-clean_phaseI_Multi(mfd_segmento = segmento_1,M =3, alpha =0.025,B =100, Basis = Basis, Lambdas = Lambdas, grid=gri)
Del segmento 1, conformado por 84 observaciones que presentan la misma media, se seleccionó el 80%, correspondiente a 67 observaciones, para la Fase I. Dentro de este conjunto, 46 observaciones se utilizaron para la estimación de los límites de control, mientras que las 17 observaciones restantes se destinaron a la Fase II, con el propósito de realizar el monitoreo del proceso.
A partir de la Fase I, los límites de control obtenidos fueron 8.803182 para el estadístico \(T^2\) y 6086.679 para el estadístico \(Q\).
Figura 46: Cartas de control funcional (T² y Q) Fase 1 - Segmento 1
Figura 47: Cartas de control funcional (T² y Q) Fase 2 - Segmento 1
4 Simulaciones y Aplicaciones
En la sección 4 del artículo de (Happ y Greven 2018) se presentan varias simulaciones para medir el desempeño de su propuesta. Se tienen tres escenarios:
Observaciones densas de un proceso funcional bivariado en un mismo intervalo unidimensional.
Datos funcionales trivariados en distintos intervalos unidimensionales con diferentes niveles de dispersión de observaciones.
Datos funcionales bivariados en dominios de distinta dimensionalidad (imágenes y funciones).
En cada caso, se tienen 100 datasets con \(N=250\) observaciones: \[
\mathbf{x}_i(\mathbf{t}) = \sum_{m=1}^{M} \rho_{im}\psi_m(\mathbf{t}) + \boldsymbol{\varepsilon}_i(\mathbf{t}), \qquad \boldsymbol{\varepsilon}_i(\mathbf{t}) \overset{\mathrm{iid}}{\sim} \mathrm{N}_p(0, \sigma^2 \mathbf{I})
\] con \(\mathbf{t} \in \mathcal{T}\) e \(i=1,\ldots, N = 250\).
Además se tienen otras configuraciones:
Se tienen datos con y sin error de medición.
Los scores \(\rho_{im}\) son muestras independientes de una distribución normal con media 0 y varianza \(\nu_m\).
Los valores propios son drececientes lineal y exponencialmente. Esto es:
donde \(\nu_m\) es el valor propio verdadero y \(\hat{\nu}_m\) es el valor propio estimado. Valores pequeños de esta medida indican una buena estimación del valor propio correspondiente. Por otro lado, la precisión en la estimación de las autofunciones se evalúa mediante \[
\text{Err}(\hat{\psi}_m) =
||| \psi_m - \hat{\psi}_m |||^2,
\]
donde \(\psi_m\) corresponde a la función propia verdadera y \(\hat{\psi}_m\) a su estimación. Debido a que las funciones propias están definidas salvo un cambio de signo, se ajusta la orientación de la función propia estimada cuando \[
\langle\langle \psi_m, \hat{\psi}_m \rangle\rangle < 0.
\]
En ese caso, se reemplaza \(\hat{\psi}_m\) por \(-\hat{\psi}_m\), evitando considerar como error una diferencia que solo se debe a la orientación de la componente. Además de evaluar autovalores y autofunciones, las autoras analizan la calidad de reconstrucción de las observaciones originales. Para ello utilizan el error medio relativo cuadrático, definido como
En la primera configuración se tienen en cuenta las primeras \(M=8\) funciones de la base de Fourier en el intervalo \([0,1]\) para ambos procesos funcionales que forman el proceso bivariado de forma que \(\mathcal{T_1}=\mathcal{T_2}=[0,1]\).
Las obsevaciones se muestrean de un grid equidistante de \(S_1=S_2=100\) puntos y se usan \(M_1=M_2=8\) componentes principales funcionales univariadas para estimar las \(M=8\) componentes principales funcionales multivariadas. El método propuesto por los autores se compara con el método implementado en fda, que se denotará como \(\mathrm{MFPCA_{RS}}\), donde se realiza un suavizamiento previo con \(K=15\) splines cúbicos. La función pca.fd(), a diferencia de MFPCA(), devuelve la estimación de dos scores por observación bivariada y función propia estimada, de forma que se suman para poder compararlos con la nueva metodología.
La simulación se realiza mediante la función simMultiFunData() del paquete funData.
A continuación, se define el número de observaciones a simular, el error, el dominio sobre el cual se generan las observaciones y el número de componentes principales univariadas a estimar. Además, se muestra un ejemplo de un dataset generado con valores propios que decaen exponencialmente en sin y con error de medición en la Figura 48 y Figura 49. De igual forma, en la Figura 50 se muestran las funciones propias simuladas.
Figura 48: Ejemplo de un dataset simulado bajo la primera configuración sin error de medición
Figura 49: Ejemplo de un dataset simulado bajo la primera configuración con error de medición
Figura 50: Ejemplo de las funciones propias simuladas bajo la primera configuración
A continuación, se realiza la simulación de esta primera configuración \(B=100\) veces con ambos tipos de decaimiento de los valores propios (exponencial y lineal) y errores de medida (\(\sigma^2=0\) y \(\sigma^2=0.25\)).
Código
S1_exp_s0 <-Sim_Setting1(eValType ="exponential", s2 =0, seed =1, N = N, M =8, argvals = argvalsSetting1, argvalsfd = argvalsfd,uniExpansions = uniExpansions, B =100)S1_exp_s <-Sim_Setting1(eValType ="exponential", s2 = s2, seed =1, N = N, M =8, argvals = argvalsSetting1, argvalsfd = argvalsfd,uniExpansions = uniExpansions, B =100)S1_lin_s0 <-Sim_Setting1(eValType ="linear", s2 =0, seed =1, N = N, M =8, argvals = argvalsSetting1, argvalsfd = argvalsfd,uniExpansions = uniExpansions,B =100)S1_lin_s <-Sim_Setting1(eValType ="linear", s2 = s2, seed =1, N = N, M =8, argvals = argvalsSetting1, uniExpansions = uniExpansions, argvalsfd = argvalsfd,B =100)
(a) Error relativo de las estimaciones de los valores propios
(b) Error relativo de las estimaciones de las funciones propias
Figura 51: Resultados de la replicación de las simulaciones en el primer escenario
Tabla 4: MRSE promedio en porcentaje para las simulaciones con la primera configuración
Configuración
Método
\(\sigma^2 = 0\), \(\nu_m^{exp}\)
\(\sigma^2 = 0\), \(\nu_m^{lin}\)
\(\sigma^2 = 0.25\), \(\nu_m^{exp}\)
\(\sigma^2 = 0.25\), \(\nu_m^{lin}\)
1
MFPCA
1e-04
1e-04
0.2165
0.1246
1
MFPCARS
0e+00
0e+00
0.2150
0.1238
Como se puede ver, la propuesta presentada en el paper compite bastante con método de Ramsay y Silverman que se encuentra implementado en el paquete fda, dando resultados bastante similares. En el caso de los valores propios con decaimiento exponencial, en los casos en los que no hay error de medición se tienen los resultados más parejos, mientras que cuando se incorpora el error de medición, las estimaciones de los últimios valores propios tienen un mayor error relativo. En el caso de las funciones propias, las estimaciones tienen errores muy similares.
Por otro lado, el MRSE nos permite verificar que el error de las reconstrucciones mediante la descomposición de Karhúnen–Loéve truncada es similar, con diferencia hasta el tercer decimal.
4.1.2 Segunda escenario
Para la segunda configuración, se evalúa el rendimiento de la nueva propuesta para datos dispersos con las primeras \(M=8\) funciones en la base de Fourier. Se realiza la comparación sin dispersión (Full data), dispersión media (Medium sparsity) y dispersión alta (High sparsity). A diferencia de la configuración anterior, se consideran realizaciones de un proceso funcional trivariado con distintos dominios (\(\mathcal{T}_1=[-1,-0.5]\), \(\mathcal{T}_2=[0,1]\), \(\mathcal{T}_3=[1.5,2]\)) y número de puntos discretizados distintos (\(S_1=S3=50\) y \(S_2=100\)). Además, para cada opción de sparsity se tienen las siguientes aclaraciones:
Full data: no hay faltantes.
Medium sparsity: 50% a 70% de faltantes.
Full sparsity: 70% a 90% de faltantes (modificación por estabilidad numérica).
El MFPCA se calcula dependiendo de la dispersión. Para las simulaciones de datos completos y dispersión media se usan \(M_1=M_2=M_3=8\) componentes principales funcionales univariadas. Con dispersión alta, se usan \(M_1=M_3=3\) y \(M_2=5\) por estabilidad.
A continuación, en la Figura 52 y la Figura 53 se muestra un ejemplo de un dataset simulado con un decaimiento exponencial de los valores propios. Al igual que en el caso anterior, se hace uso de la función simMultiFunData(). Además, en la Figura 54 se muestran las funciones propias simuladas.
Y se realizan las respectivas simulaciones \(B=100\) veces, con ambos tipos de decaimiento de los valores propios, errores de medición y también los distintos niveles de sparsity.
(a) Error relativo de las estimaciones de los valores propios
(b) Error relativo de las estimaciones de las funciones propias
Figura 55: Resultados de la replicación de las simulaciones en el segundo escenario
Tabla 5: MRSE promedio en porcentaje para las simulaciones en el segundo escenario
Método
\(\sigma^2 = 0\), \(\nu_m^{exp}\)
\(\sigma^2 = 0\), \(\nu_m^{lin}\)
\(\sigma^2 = 0.25\), \(\nu_m^{exp}\)
\(\sigma^2 = 0.25\), \(\nu_m^{lin}\)
Full data
0.0062
0.0083
21.4450
12.3222
Medium sparsity
0.3253
0.2987
23.3041
13.5365
High sparsity
2.5808
2.0033
27.9791
16.9083
Como es posible ver en la Figura 55, para el escenario con los valores propios decayendo exponencialmente, hay mayor dificultar para estimar tanto los valores y funciones propias en el caso en el que hay una alta dispersión, teniendo los mayores errores relativos. Esto también ocurre en el caso de los valores propios con decaimiento lineal, pero se presentan menos dificultades en el proceso de estimación. Se puede ver que tanto en el escenario de los datos completos como de dipsersión media, se obtienen resultados muy similares. En general, el método mantiene un buen desempeño con datos completos y con dispersión moderada. Cuando la dispersión es alta, el error de reconstrucción aumenta, pero las primeras componentes principales siguen siendo estimadas de manera razonable. Esto es relevante porque en aplicaciones reales los datos funcionales suelen estar incompletos o ser observados de forma irregular.
Con respecto a la reconstrucción de las curvas, en la Tabla 5 es posible ver que el proceso de estimación tiene un mejor comportamiento cuando no se tiene error de medición, pues los valores error cuadrático medio relativo son bajos. No obstante, cuando se agrega error de medición, el método presenta mayor dificultad. Es posible evidenciar esto de una mejor forma en el escenario de los valores propios con decaimiento exponencial.
4.2 2) Sección 4.2
Para la tercera configuración se cuenta con imágenes y funciones. Por un lado, se tienen observaciones que fueron generadas de \(M=25\) componentes principales, donde las imágenes propias, \(\psi_m^{(1)}\), fueron formadas mediante productos tensoriales de funciones pertenecientes a la base de Fourier en el intervalo \(\mathcal{T}_1=[0,1]\times [0, 0.5]\). Por otro lado, las funciones propias asociadas a la segunda componente del vector de funciones se obtiene mediante polinomios de Legendre en \(\mathcal{T}_2=[-1,1]\). La idea es construir una base ortonormal en \(L^2(\mathcal{T}_1) \times L^2(\mathcal{T}_2)\) como combinaciones ponderadas de dichas bases, con un peso aleatorio \(\alpha\in(0,1)\) que se restringe a \(\alpha\in(0.2,0.8)\) para evitar pesos extremos. \[
\psi_m^{(1)}(s,t)
=
\sqrt{\alpha}\,
f_{m_1}^{(1,1)}(s)\cdot f_{m_2}^{(1,2)}(t),
\qquad
(s,t)\in \mathcal{T}_1 := [0,1]\times[0,0.5],
\]
Para esta tercera simulación, se comparan el MFPCA calculado con el algoritmo FCP–TPA y otro método basado en B–splines en el cual se calcula el MFPCA con \(M_1=20\) imágenes propias y \(M_2=15\) funciones propias univariadas. En el caso de la estimación general de las imágenes y funciones propias, se realizó mediante productos tensoriales de \(K_1=10\times12\) funciones de bases de B–splines y \(K_2=15\) funciones, respectivamente.
A continuación se muestran una observación provenientes del dataset simulado, junto con las funciones propias que generan dichas observaciones mediante la descompsición de Karhúnen-Loève y los valores propios con decaimiento exponencial.
En la Figura 60 se pueden ver los resultados obtenidos para esta tercer configuración.
(a) Error relativo de las estimaciones de los valores propios
(b) Error relativo de las estimaciones de las funciones propias
Figura 60: Resultados de la replicación de las simulaciones en el tercer escenario
Para la comparación de ambos métodos, se toman las primeras 12 componentes principales. Como se puede ver, en ambos escenarios (un decaimiento exponencial y lineal de los valores propios), el método de B–splines estima mucho mejor los valores e imágenes/funciones propias. En la presencia de error, los dos tienen resultados similares, pero el método de expansiones univariadas de B–splines se comporta mejor. Además, es posible ver que los últimos valores propios e imágenes/funciones propias son más difíciles de estimar con ambos enfoques.
4.3 3) Sección 5: Aplicación
En la quinta sección del paper se presenta una aplicación a un dataset que contiene curvas e imágenes relacionadas a un estudio ADNI (Alzheimer’s Disease Neuroimaging Initiative) que busca identificar biomarcadores que ayuden a la precisión de los diagnósticos de Alzheimer en una etapa temprana. Cada persona perteneciente al estudio tiene dos tipos de información:
Una trayectoria longitudinal de ADAS-Cog, que es una prueba neuropsicológica usada para seguir la progresión del Alzheimer. Valores más altos indican mayor deterioro cognitivo.
Una imagen cerebral FDG-PET al inicio del estudio, que representa mediciones del metabolismo de glucosa en el cerebro. Menor metabolismo, llamado hipometabolismo, suele asociarse con menor actividad neuronal.
Luego, por cada individuo se tiene asociado un vector \(\mathbf{X}_i=(X_i^{(1)}, X_i^{(2)})^t\) en el que la primera componente representa una trayetoria ADAS-Cog y la segunda una imágen cerebral FDG-PET.
Al intentar replicar el ejercicio realizado en el paper, se tuvo acceso a los datos de \(N=236\) participantes que tenían una imágen cerebral FDG-PET en la visita basal (una imagen cerebral al inicio del estudio) y almenos tres mediciones de ADAS-Cog durante el seguimiento. Debido a que las trayectorias no necesariamente estaban completas para todos los tiempos y todos los individuos, se tienen datos irregulares o sparse. Esto se muestra en la Figura 61.
Figura 61: Trayectorias ADAS-Cog para los participantes del estudio. En el eje x se presenta el número de datos disponibles por cada visita.
Por otro lado, también se muestra un ejemplo de una de las imágenes cerebrales FDG-PET.
Figura 62: Ejemplo de una de las imágenes cerebrales FDG-PET
Para realizar el análisis de estos datos, primero se crean los objetos funcionales con los cuales se trabajará.
Además, es importante ser conscientes de que los tipos de datos son bastante diferentes con respecto a la escala y dominio. Por lo tanto, es importante es tomar ponderaciones o una de las dos partes podría dominar artificialmente el análisis. Para ello, se usa el producto escalar ponderado \[
\langle\langle f,g\rangle\rangle_w =
\sum_{j=1}^{p}
w_j
\int_{T_j} f^{(j)}(t_j)g^{(j)}(t_j)\,dt_j
\] para dos funciones \(f,g \in \mathcal{H}\). Los autores realizan la ponderación de la siguiente forma: \[
w_j =
\left(
\int_{T_j}
\widehat{C}_{jj}(t_j,t_j)\,dt_j
\right)^{-1}
\] con \(j=1,2\), que correspondería a la variabilidad de cada uno de los elementos (trayectorias e imágenes cerebrales). Por lo tanto, los elementos reescalados \(\widetilde{X}^{(j)} = w_j^{1/2}X^{(j)}\) tienen varianza 1. A continuación se muestran los pesos:
De esta forma, se aplica la metodología propuesta en el paper. En el caso de las trayectorias, se realiza FPCA con \(M_1=3\) componentes principales que explican el 99% de la varianza. Para las imágenes, se usan productos tensoriales de \(20 \times 15\) B–splines.
Como se puede ver las dos primeras componentes ya explican más del 80% de la variabilidad ponderada, mientras que las cuatro primeras explican un poco más del 90%. Si nos concentramos en la primera componente que corresponde a un cambio en la media, entonces esta representa personas cuya función cognitiva empeora durante el seguimiento. Además, las personas asociadas positivamente con este componente tienden a mostrar menor actividad cerebral en regiones relacionadas con Alzheimer ya desde la visita basal.
Las imágenes de la primera función propia estimada \(\hat{\psi}_1\) se puede ver en la Figura 63. Es posible apreciar que la primera función propia presenta valores negativos en la componente ADAS-Cog durante todo el seguimiento. Esto quiere decir que sujetos con scores positivos se asocian con un menor deterioro cognitivo relativo (trayectorias ADAS-Cog por debajo de la media), mientras que sujetos con scores negativos se asocian con mayor deterioro cognitivo relativo (trayectorias por encima de la media). En cuanto a la componente FDG-PET, las regiones significativas positivas implican que los sujetos con scores negativos presentan menor señal FDG-PET relativa en dichas regiones.
(a) Componente ADAS-Cog
(b) Componente FDG-PET con regiones significativas al 95%
(c) Componente FDG-PET con regiones significativas al 90%
Figura 63: Estimación de la primera función propia \(\hat{\psi}_1\): componente ADAS-Cog y componente FDG-PET.
Por otro lado, en la Figura 64 es posible ver que los participantes con diagnóstico AD (personas con Alzheimer diagnosticado) tienen scores más negativos, es decir, un deterioro cognitivo mayor. Por otro lado, las personas sanas (Normal) tienden a tener scores positivos, es decir, un menor deterioro cognitivo. Por último, aquellos participantes con deterioro cognitivo leve (MCI) se ubica en una posición intermedia.
Figura 64: Boxplot de los scores estimados de la primera componente MFPCA según diagnóstico
En el caso de la estimación de la segunda función propia \(\hat{\psi}_2\) presente en la Figura 65, hay que tener en cuenta que las bandas de confianza de \(\hat{\psi}_1^{(1)}\) contienen al cero al 95% (y también 90%) de confianza. Es decir que no hay suficiente evidencia estadística para concluir que esta componente esté asociada con cambios importantes en ADAS-Cog (deterioro cognitivo). Por otro lado, en la segunda componente \(\hat{\psi}_1^{(2)}\) se puede ver que gran parte de la imágen propia tiene regiones significativas bastante extensas, sugiriendo que la segunda función propia está dominada principalmente por variación en las imágenes cerebrales FDG-PET.
(a) Componente ADAS-Cog
(b) Componente FDG-PET con regiones significativas al 95%
(c) Componente FDG-PET con regiones significativas al 90%
Figura 65: Estimación de la segunda función propia \(\hat{\psi}_2\): componente ADAS-Cog y componente FDG-PET.
Además, se presentan los scores estimados por género, asociados a la segunda componente principal en la Figura 66. De estos resultados es interesante ver la separación entre ambos grupos (Mujeres y Hombres) pues la mayoría de mujeres suele tener un score negativo, mientras que los hombres suelen tener scores positivos. En el paper, esto se asocia a las diferencias de registro o tamaño cerebral de los participantes en el estudio que se encuentra correlacionada con el género.
Figura 66: Boxplot de los scores de la segunda componente MFPCA según género
Referencias
Berkes, István, Robertas Gabrys, Lajos Horváth, y Piotr Kokoszka. 2009. «Detecting Changes in the Mean of Functional Observations». Journal of the Royal Statistical Society: Series B (Statistical Methodology) 71 (5): 927-46. https://doi.org/10.1111/j.1467-9868.2009.00713.x.
Happ, Clara, y Sonja Greven. 2018. «Multivariate Functional Principal Component Analysis for Data Observed on Different (Dimensional) Domains». Journal of the American Statistical Association 113 (522): 649-59. https://doi.org/10.1080/01621459.2016.1273115.
Horváth, Lajos, y Piotr Kokoszka. 2012. Inference for Functional Data with Applications. Springer Series en Statistics. New York: Springer. https://doi.org/10.1007/978-1-4614-3655-3.