Análisis de la Intensidad de Fluorescencia del Azúcar

Autor/a

Camilo Gómez

1 Datos de Fluorescencia

En (Bro 1999) se encuentra la información sobre un experimento que se realizó durante el otoño de 1995. Cada observación pertenenciente a una muestra representa la medición de intensidad de fluorescencia en una longitud de onda en concreto. Se cuenta con \(N=268\) muestras y \(n=571\) longitudes de onda (de 275 a 560 nm en intervalos de 0.5 nm) a siete longitudes de onda de excitación (230, 240, 255, 290, 305, 325, 340 nm). La fluorescencia es la capacidad que poseen ciertos productos y sustancias para absorber luz a cierta longitud de onda y emitirla tras absorber radiación, a una longitud de onda mayor.

A continuación se realiza la lectura de los datos y su correspondiente representación gráfica:

file <- read.mat("data.mat")

data <- file$X

t <- file$EmAx

wvl <- list()

for (i in 1:7) {
  start <- 571 * (i - 1) + 1
  end <- 571 * i
  wvl[[i]] <- t(data[,start:end])
}

wvl <- rev(wvl)

Se tienen 7 procesos funcionales, \(\mathbb{Y}_1, \mathbb{Y}_2, \ldots, \mathbb{Y}_7\) donde \(\mathcal{T}=[275, 560]\) y \(t_1 = 275, t_2 = 275.5, \ldots, t_{571}=560\):

2 Suavizado Spline

Ahora, se obtienen las bases de funciones de splines cúbicos para poder ajustar las curvas. Para la elección de los nodos, se sigue un teorema mencionado en (Ramsay y Silverman 2005) donde se dice que la curva que minimiza la \(\mathrm{PENSSE} (\lambda | \mathbf{c})\) es un spline cúbico con los nodos ubicados en cada \(t_j\). Para el tamaño de la base \(K\), se sigue a (Ramsay, Hooker, y Graves 2009) de forma que

\[\text{número de funciones base} = \text{orden}\; + \; \text{número de nodos interiores}\]

donde los nodos interiores son aquellos que están posicionados en los breakpoints sin incluir el inicial ni el final en \(\mathcal{T}\).

Código
Basis <- create.bspline.basis(rangeval = c(275, 560), 
                              norder = 4, breaks = t) 

Como se estiman las curvas por suavizado spline, se debe elegir el \(\lambda\) adecuado. Por lo tanto, se hace una grilla y se elige \(\lambda_i\) (\(i=1,\ldots,7\)) que minimice el \(\mathrm{GCV}(\lambda_i)\).

Código
par(mfrow = c(1,1), 
    bg = "white",
    mar = c(4,4,3,1))

Lambdas <- NULL

for (i in 1:7) {
  loglam <- seq(-3,10,0.25)
  nlam <- length(loglam)
  dfsave <- rep(NA,nlam)
  gcvsave <- rep(NA,nlam)
  
  for (ilam in 1:nlam) {
  lambda <- 10^loglam[ilam]
  fdParobj <- fdPar(Basis, lambda = lambda)
  smoothlist <- smooth.basis(t, wvl[[i]], fdParobj)
  dfsave[ilam] = smoothlist$df
  gcvsave[ilam] = sum(smoothlist$gcv)
  }
  
  plot(loglam, gcvsave, 
       xlab = bquote(log[10](lambda[.(i)])), 
       ylab = bquote(GCV(lambda[.(i)])),
       main= paste0("Parámetros de suavizamiento\nversus GCV (",nms[i],")"), 
       type="b", cex=0.7, pch = 16, col = "black")
  
  Lambdas[i] <- 10^loglam[which.min(gcvsave)]
  
}

En la Tabla 1 se muestran los resultados.

Tabla 1: Valores seleccionados del parámetro de suavizado mediante GCV

3 Curvas Ajustadas

Con este conjunto de estimaciones de los parámetros de suavizamiento, se realiza el ajuste de las curvas espectrométricas:

Código
fits <- list()

for (i in 1:7) {
  
  fdParobj <- fdPar(fdobj = Basis, Lfdobj = 2, lambda = Lambdas[i])
  
  fits[[i]] <- smooth.basis(t, wvl[[i]], fdParobj)

}

Y se presentan a continuación:

4 Referencias

Bro, Rasmus. 1999. «Exploratory study of sugar production using fluorescence spectroscopy and multi-way analysis». Chemometrics and Intelligent Laboratory Systems 46: 133-47.
Ramsay, J. O., Giles Hooker, y Spencer Graves. 2009. Functional Data Analysis with R and MATLAB. Springer.
Ramsay, J. O., y B. W. Silverman. 2005. Functional Data Analysis. 2.ª ed. Springer.