Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Document PDF
Document PDF
Trabajo de Investigación
ESTIMACIÓN PENALIZADA
CON DATOS FUNCIONALES
ESTIMACIÓN PENALIZADA
CON DATOS FUNCIONALES
Vo Bo V o Bo
Fdo. Ana Ma Aguilera del Pino Fdo. Ma del Carmen Aguilera Morillo
Prólogo
1. Introducción 1
1.1. ¿Qué son los datos funcionales? . . . . . . . . . . . . . . . . 1
1.2. Ejemplos reales y aplicaciones con datos funcionales . . . . . 2
1.3. Objetivos del ADF . . . . . . . . . . . . . . . . . . . . . . . 7
5. Aplicaciones con R 37
5.1. Ejemplo simulado . . . . . . . . . . . . . . . . . . . . . . . . 37
5.1.1. Caso I (150 nodos de observación) . . . . . . . . . . . 38
5.1.2. Caso II (50 nodos de observación) . . . . . . . . . . . 41
5.2. Suavizado de las curvas de temperaturas en Andalucı́a . . . 42
i
ii Estimación penalizada con datos funcionales
5.3. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6. Lı́neas abiertas 49
7. Referencias bibliográficas 51
Introducción
1
2 Estimación penalizada con datos funcionales
15
10
5
0 20 40 60 80 100 120
mes
Estudios paleontológicos
Hay estudios paleontológicos, como el que se cita a continuación, en
los cuales es evidente la presencia de datos funcionales. La paleon-
tologı́a estudia enfermedades de la historia de la humanidad, tomando
información principalmente de los restos de esqueletos humanos.
Introducción 7
Obtención de la forma
funcional
9
10 Estimación penalizada con datos funcionales
1. Bases de B-splines
0.8
0.8
0.4
0.4
0.0
0.0
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
x x
0.8
0.8
0.4
0.4
0.0
0.0
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
x x
p = 1, 2, . . . ; j = −1, 0, . . . , m − p + 4.
xi (tik ) = c0 +c1 sin(wtik )+c2 cos(wtik )+c3 sin(2wtik )+c4 cos(2wtik )+. . .
1
T0 (t) =
T 1/2
µ ¶1/2 µ ¶
2 2πjt
T2j−1 (t) = sin
T T
µ ¶1/2 µ ¶
2 2πjt
T2j (t) = cos j = 1, . . . .
T T
3. Bases de Wavelets
Las wavelets se usan como funciones básicas para representar otras
funciones tal y como se hace con las funciones seno y coseno en la
transformada de Fourier. A diferencia de la transformada de Fourier,
en el análisis con wavelets no se asume que los datos sean periódicos,
por lo tanto es posible estudiar datos no periódicos utilizando muchas
menos funciones wavelets básicas que las que se necesitarı́an si se
utilizaran funciones seno y coseno para alcanzar una aproximación
adecuada de la forma funcional.
El análisis con wavelets permite definir una función prototipo o wavelet
madre que no siempre es la misma, es decir, las funciones base no
siempre son iguales a diferencia de lo que ocurre en la transformada
de Fourier, donde las funciones base son siempre el seno y el coseno.
Las wavelets madre se pueden diseñar dependiendo de los gustos y
1
Φi = (φj (tik ))mi ×p
14 Estimación penalizada con datos funcionales
5. Bases polinomiales
Sea una base polinomial
xik = xi (tik ) k = 0, . . . , mi , , i = 1, . . . , n,
17
18 Estimación penalizada con datos funcionales
2)
siendo Bj (t) la segunda derivada del j-ésimo B-spline en el tiempo t. Re-
solviendo esta ecuación matricial obtenemos la matriz A de coeficientes
base para todas las trayectorias muestrales, dada por A = XI (B 0 )−1 .
Estimación aproximada de los coeficientes básicos 19
en forma matricial
xi (tik ) = a0i φ (tik ) ,
donde ai = (ai1 , . . . , aip )0 y φ (t) = (φ1 (t) , . . . , φp (t))0 .
Como consecuencia y considerando
y
xi = (xi1 , xi2 , . . . , ximi )0 ,
los valores estimados por el modelo en los nodos de observación serán de la
forma
xi = Φai .
Los coeficientes de la expansión básica, aij , se determinan por el criterio
de mı́nimos cuadrados, y en forma matricial se tiene que
Y la curva ajusta es
x̂i (t) = â0i φ (t) .
La aproximación por mı́nimos cuadrados es adecuada cuando asumimos
que los residuos sobre la verdadera curva son independientes e igualmente
distribuidos con media cero y varianza constante.
Estimación aproximada de los coeficientes básicos 21
W = Σ−1
e .
s2 = (xik − x̂ik )2 , i = 1, . . . , n.
n − p k=0
de modo que los pesos wik serán relativamente grandes para valores mues-
trales tik próximos al valor fijado tij .
Ahora buscamos métodos de suavizado que hagan explı́cito este prin-
cipio de ponderación localizada. Las ponderaciones wik se construyen me-
diante un cambio de origen y escala de una función núcleo con valores
kern (u) . Esta función kernel está diseñada para tener la mayorı́a de su
masa concentrada próxima a cero, y o decaer rápidamente, o desaparece
por completo para p u p> 1. Algunos de los kernels más usados son
se tiene que valores grandes de wik (t) se concentran en los tik próximos a tij .
El grado de concentración se controla mediante el parámetro h (conocido
con el nombre de ancho de ventana bandwidth). Valores pequeños de h
implican que sólo las observaciones cercanas a t (punto en el que se estima)
tiene peso significativo en la estimación.
Para un estudio más detallado de distintos estimadores núcleo ver Ram-
say y Silverman (2005).
24 Estimación penalizada con datos funcionales
Capı́tulo 4
25
26 Estimación penalizada con datos funcionales
usando splines de regresión, x̂i (t) = â0i φ (t), dependen del tamaño de la
base (φ (t)). Cuanto mayor es la base, menos suave es la curva. Cuando
el número de nodos es igual al número de datos se obtiene una curva que
interpola los datos.
En la figura ( 4.1) vemos el efecto que tiene el tamaño de la base en la
curva ajustada.
Splines de regresión
f(t)
5 nodos
15 nodos
2
25 nodos
1
f(t)=cos(2*pi*t)
0
−1
−2
las bases de polinomios truncados y los que utilizan los B-splines. De ahora
en adelante, y al igual que en el ajuste sin penalización, nos centraremos
en los últimos.
A continuación se enumeran algunas de las razones por las que utilizar
los P-splines:
Z
= a0i Dm φ (s) Dm φ0 (s) ai ds
Z
= a0i [ Dm φ (s) Dm φ0 (s) ds]ai
28 Estimación penalizada con datos funcionales
Z
0
ECM P EN2 (xi , λi |ai ) = (xi − Φi ai ) (xi − Φi ai )+λi a0i ( D2 φ (s) D2 φ0 (s) ds)ai ,
(4.5)
y el vector de coeficientes estimados es
µ Z ¶−1
0 2 2 0
âi = Φi Φi + λi ( D φ (s) D φ (s) ds) Φ0i xi (4.6)
R = L0 L
· ¸
x
x̃i = i
0
30 Estimación penalizada con datos funcionales
donde el vector 0 tiene la misma longitud que ai . Ası́, podemos igualar este
vector respuesta generalizado con la matriz de diseño generalizada
· ¸
Φ
Φ̃i = √ i
λi L
4.3. P-splines
La novedad que introducen los P-splines es que la penalización es discre-
ta y que se penalizan los coeficientes básicos de las curvas directamente, en
lugar de penalizar la curva, lo que reduce la dimensionalidad del problema.
El tipo de penalización depende del tipo de base que se utilice. Eilers y
Marx (1996) utilizan una penalización basada en las diferencias de orden d
entre los coeficientes adyacentes de la base de B-splines. Este tipo de pe-
nalización es más flexible, ya que es independiente del grado del polinomio
utilizado para construir los B-splines. Además, es una buena aproximación
discreta de la integral de la d-ésima derivada al cuadrado. La penalización
se añade a la función de mı́nimos cuadrados, dando lugar a una función de
mı́nimos cuadrados penalizados
cuya solución es
−1
âi = (Φ0i Φi + λi Pd ) Φ0i xi , (4.8)
¡ ¢0
con Pd = 4d 4d . Si d = 0 obtenemos una penalización ridge.
En general, se utiliza d = 2, aunque se pueden utilizar órdenes superiores
o inferiores, dependiendo de la variabiliad de la curva y de la cantidad de
ruido en los datos. Una penalización de orden dos equivale a
donde
1 −2 1 0 ···
0 1 −2 1 · · ·
D = 0 0 1 −2 · · ·
.. .. .. .. . .
. . . . .
f(t)
Splines de regresión
2
Splines de suavizado
P−splines
1
f(t)=cos(2*pi*t)
0
−1
−2
¡ ¢
`R σu2i , σε2i =
1 1 ³ ¡ ¢−1 0 −1 ´
= − log |Xi0 Vi−1 Xi | − x0i Vi−1 − Vi−1 Xi Xi0 Vi−1 Xi Xi Vi xi ,
2 2
donde Vi = σu2i Zi Zi0 + σi2 I.
34 Estimación penalizada con datos funcionales
donde
1 ³ ¡ 0 ¡ 2 2¢ ¢−1 0 ´
V̂i−1 = 2 I − Zi Zi Zi σ̂i /σ̂ui Ip−2 Zi .
σi
−k)
donde x̂ik son los valores de la i-ésima trayectoria muestral estimados en
el instante de tiempo tik siguiendo los siguientes pasos
2
1
f(t)=cos(2*pi*t)
0
−1
f(t)
lamba=0.005
−2
lamba=5
lamba=50
lamba=300
−3
lamba=3000
mi −1 ECM
GCV (λi ) =
[mi −1 traza (I − Sφ,λi )]2
donde Sφi ,λi = Φi (Φ0i Φi + λi R)−1 Φ0i , R viene dada por la expresión (4.2) y
36 Estimación penalizada con datos funcionales
kxi − Φi âi k2
σ̂i2 = ,
mi − df (λi )
donde
−1
Hi = Φi (Φ0i Φi + λi Pd ) Φ0i .
Para los splines de suavizado la matriz Hi se sustituye por la matriz Sφ,λi .
Capı́tulo 5
Aplicaciones con R
x (t) = cos (2 ∗ π ∗ t)
37
38 Estimación penalizada con datos funcionales
3
f(t) f(t)
5 nodos 5 nodos y lambda=0.01
15 nodos y lambda=0.013
2
2
15 nodos
25 nodos 25 nodos y lambda=0.013
1
1
f(t)=cos(2*pi*t)
f(t)=cos(2*pi*t)
0
0
−1
−1
−2
−2
−3
−3
−4
−4
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
t t
f(t) f(t)
5 nodos y lambda=2 5 nodos
15 nodos y lambda=0.70
2
15 nodos
25 nodos y lambda=1.20 25 nodos
2
1
f(t)=cos(2*pi*t)
f(t)=cos(2*pi*t)
0
0
−1
−2
−2
−3
−4
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
t t
f(t) f(t)
5 nodos 5 nodos y lambda=0.004
15 nodos 15 nodos y lambda=0.005
2
2
25 nodos 25 nodos y lambda=0.006
1
1
f(t)=cos(2*pi*t)
f(t)=cos(2*pi*t)
0
0
−1
−1
−2
−2
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
t t
f(t)
5 nodos y lambda=2 f(t)
15 nodos y lambda=0.10 5 nodos
2
1
f(t)=cos(2*pi*t)
f(t)=cos(2*pi*t)
0
0
−1
−1
−2
−2
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
t t
1.0
Curva Media Curva Media
C.Media de Splines Regresión C.Media de Splines Regresión
C.Media Splines de suavizado C.Media Splines de suavizado
C.Media de P−splines C.Media de P−splines
0.5
0.5
C. Media Modelos Mixtos C. Media Modelos Mixtos
f(t)=cos(2*pi*t)
f(t)=cos(2*pi*t)
0.0
0.0
−0.5
−0.5
−1.0
−1.0
0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0
t t
m=150 m= 50
Figura 5.3: Comparación de la función original con las curvas medias de
las curvas ajustadas mediante Splines de regresión, Splines de suavizado, P-
splines y P-splines como modelos mixtos, usando 5 nodos en la construcción
de las bases.
0.6
0.30
0.5
0.25
0.4
ECM
ECM
0.20
0.3
0.15
0.2
0.10
0.1
0.05
m=150 m= 50
Figura 5.4: Diagramas de cajas con bigotes para el ECM de las curvas
ajustadas con Splines de regresión, Splines de suavizado, P-splines y P-
splines como modelos mixtos, usando 5 nodos para las bases y λi = 2, 0,01
respectivamente para P-splines y Splines de suavizado.
ferentes diagramas de cajas y bigotes para estos errores. Se puede ver como
las metodologı́as con Splines de regresión y P-splines tienen distribuciones
muy similares. Es de destacar que en esta aplicación los ajustes con splines
de suavizado presentan mayores errores cuadráticos medios.
Finalmente, en la figura (5.7) se presentan las 13 curvas ajustadas me-
diante P-splines como modelos mixtos, para las trayectorias muestrales con
120 observaciones, utilizando 40 nodos para las bases de B-splines.
44 Estimación penalizada con datos funcionales
40
xi(t) xi(t)
5 nodos 5 nodos
15 nodos 15 nodos
20 nodos 20 nodos
30
30
Temperatura
Temperatura
20
20
10
10
0
0
5 10 15 20 5 10 15 20
Mes Mes
30
xi(t)
xi(t) C.Media de Splines Regresión
5 nodos C.Media Splines de suavizado
15 nodos C.Media de P−splines
20 nodos
30
25
f(t)=cos(2*pi*t)
Temperatura
20
20
10
15
10
0
5 10 15 20 5 10 15 20
Mes t
10.0
9.5
9.0
8.5
ECM
8.0
7.5
7.0
6.5
Figura 5.6: Diagramas de cajas con bigotes para el ECM de las curvas
ajustadas con Splines de regresión, Splines de suavizado y P-splines, usando
5 nodos para las bases y λi = 0,001, 0,000014 respectivamente para P-
splines y Splines de suavizado.
5.3. Conclusiones
El objetivo principal de este trabajo era comprobar la efectividad de
los ajustes con penalización. En la teorı́a se han expuesto diferentes formas
de penalizar motivando su uso en referencia a algunas de sus ventajas. En
los ejemplo simulados, sobre todo en la simulación con 50 observaciones, se
puede ver como mejoran los ajustes cuando utilizamos P-splines, Splines de
suavizado o P-splines como modelos mixtos. En el caso de las temperaturas
para las diferentes zonas geográficas de Andalucı́a, como se observa en la
distribución de los ECM, los splines de regresión parecen hacer un ajuste
adecuado, pero hay que tener en cuenta que las observaciones de temper-
46 Estimación penalizada con datos funcionales
aturas no tienen mucho error y tal vez por eso no sea necesario utilizar
un suavizado. Otra cuestión a tener en cuenta es que dada la periodici-
dad de estos datos, lo más adecuado serı́a trabajar con bases de fourier,
cuestión que se considera para posteriores estudios. No obstante, hay que
destacar que el ajuste de los P-splines como modelos mixtos proporciona
buenos ajustes tanto para los datos simulados como para las observaciones
reales(caso con m = 120). Además, esta forma de ajuste de los P-splines
no depende del número de nodos básicos y selecciona de forma automática
el parámetro de suavizado óptimo.
En conclusión, se comprueba que en los casos en que se dispone de datos
con ruido, el uso de suavizado mejora el ajuste de las curvas. Además, se
han observado mejoras en los ajuste cuando se utilizan las metodologı́as de
ajuste de P-splines, es decir usando una penalización discreta basada en las
diferencias entre los coeficientes básicos adyacentes.
La metodologı́a sobre P-splines como modelos mixtos presenta muchas
ventajas desde el punto de vista computacional. En trabajos como Wen-
sheng, G. (2004) se ha comprobado la efectividad de estos modelos en el
terreno de los datos longitudinales. No obstante, queda como objetivo para
próximos trabajos el estudio de dicha técnica con mayor profundidad.
Aplicaciones con R 47
15
10
5
0 20 40 60 80 100 120
Mes
Lı́neas abiertas
49
50 Estimación penalizada con datos funcionales
Capı́tulo 7
Referencias bibliográficas
51
52 Estimación penalizada con datos funcionales
Anexo: Funciones
implementadas en R
library(splines)
Parámetros de la función
x: dominio de estudio
xl: valor próximo a ”x”, pero fuera del dominio por la izquierda
55
56 Estimación penalizada con datos funcionales
xr: valor próximo a ”x”, pero fuera del dominio por la derecha
Parámetros de la función
y: vector de temperaturas medias mensuales recogidas para una de
las zonas geográficas.
library(splines)
bspline <- function(x, xl, xr, ndx, bdeg){
dx <- (xr-xl)/ndx
knots <- seq(xl-bdeg*dx, xr+bdeg*dx, by=dx)
B <- spline.des(knots,x,bdeg+1,0*x)$design
Funciones implementadas en R 57
B
}
Variables
te <- datos[,1]
y<- datos[,2]
w <- datos[,30]
bdeg<-3
m<-150
lambda<-c(0.1,0.15,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,
0.80,0.85,0.90,0.95,1,1.1,1.15,1.20,1.25,1.30,1.35,1.40,1.45,1.50,1.55,1.60,
1.65,1.70,1.75,1.80,1.85,1.90,1.95,2)
valor<-matrix(0,ncol=1,nrow=m)
ECM<-matrix(0,ncol=35,nrow=length(lambda))
for (i in 3:35){
for (p in 1: length(lambda)){
suma=0
for(k in 1:m){
x<-te[-k]
xl<-min(x)-0.0001
xr<-max(x)+0.0001
z<-w[-k]
B=bspline(x,xl,xr,i,bdeg) Base de splines cbicos
d=ncol(B)
D1=diff(diff(diag(d)))
P=t(D1)%*%D1
lam=lambda[p]
a=solve(t(B)%*%B+lam*P)%*%t(B)%*%z
curva<- B%*%a
58 Estimación penalizada con datos funcionales
B2<-bspline(te[k],te[k]-0.0001,te[k]+0.0001,i,bdeg)
valor[k]<-B2%*%a
suma<-suma+(y[k] - valor[k])^2
}
ECM[p,i]<- sqrt(suma/m)
}
}
CV<-data.frame(ECM)
write.table(CV,file="CrossValidation_ejemplo.txt",sep=" ",col.names=TRUE,
row.names=FALSE)
datos<-data.frame(te,y,f) write.table(datos,
file="datos_ejemplo.txt", sep=" ", col.names=TRUE, row.names=FALSE)
Cargamos los datos datos <-read.table(file="datos_ejemplo.txt",
header=TRUE)
Variables
z<-seq(0,1,length=200)
x <- datos[,1] y <- datos[,2]
library(splines)
bspline <- function(x, xl, xr, ndx, bdeg){
dx <- (xr-xl)/ndx
knots <- seq(xl-bdeg*dx, xr+bdeg*dx, by=dx)
B <- spline.des(knots,x,bdeg+1,0*x,outer.ok=TRUE)$design
B}
#-------------------------------------------------------------------------------
#Plot
plot(x,w,pch=".",cex=3, main=paste("Splines de regresi\’{o}n"), xlab="t",
ylab="f(t)=cos(2*pi*t)", col.main="black")
lines(x,y,col=1,lwd=2) # f(t)=cos(2*pi*t).
lines(z,curva1,col=2,lwd=2) #Curva ajustada con 5 nodos.
lambda=2
a7=solve(t(BBB7)%*%BBB7+lambda*P7)%*%t(BBB7)%*%w #coeficientes estimados
B<- bspline(z,xl,xr,5,bdeg)
curva7<- B%*%a7
#Plot
plot(x,w,pch=".",cex=3, main=paste("P-splines"), xlab="t",
ylab="f(t)=cos(2*pi*t)", col.main="black")
lines(x,y,col=1,lwd=2) #f(x)=cos(2*pi*x).
lines(z,curva7,col=2,lwd=2) #Curva ajustada con 15 nodos.
#Par\’{a}metros
n=100
m=150
x<- datos_mxm$x_mxm
y<- datos_mxm$trayectorias_mxm
zona<- datos_mxm$cual_tray_mxm
ndx<-25
bdeg<-3
xl <- min(x)-0.00001
xr <- max(x)+0.00001
#-------------------------------------------------------------------------------
Funciones implementadas en R 63
library(splines)
bspline <- function(x, xl, xr, ndx, bdeg){
dx <- (xr-xl)/ndx
knots <- seq(xl-bdeg*dx, xr+bdeg*dx, by=dx)
B <- spline.des(knots,x,bdeg+1,0*x)$design
B
}
library(nlme)
#Con B-splines
mixed.model.B<-function (x,xl,xr,ndx,bdeg)
{B=bspline(x,xl,xr,ndx,bdeg)
pord<-bdeg-1
m=ncol(B)
D=diff(diag(m),differences=pord)
#svd: descomposici\’{o}n en valores singulares
P.svd=svd(t(D)%*%D)
U=(P.svd$u)[,1:(m-pord)]
d=(P.svd$d)[1:(m-pord)]
Delta=diag(1/sqrt(d))
Z=B%*%U%*%Delta
X=NULL
for(i in 0:(pord-1)){X=cbind(X,x^i)}
list(X,Z)}
model<- lme(y~X[,-1],data=data.fr,random=Z.block)
d=ncol(model$fitted)
fit.model=model$fitted[,d]
64 Estimación penalizada con datos funcionales
#Creamos una matriz "Y" cuyas columnas son las curvas ajustadas
Y<-matrix(0,nrow=m,ncol=n)
for(i in 1:n){
Y[,i]=fit.model[zona==i]
}
curvas1_mxm<-data.frame(Y)
MM=mixed.model.B(x,min(x)-0.00001,max(x)+0.00001,15,3)
Z=MM[[2]]
X=model.matrix(y~x)
Id=factor(rep(1,length(y)))
Z.block<-list(Id=pdIdent(~Z-1), zona=pdSymm(~x))
data.fr<- groupedData( y ~ X[,-1] | Id,data =data.frame(y,X,Z,zona,x))
model<- lme(y~X[,-1],data=data.fr,random=Z.block)
d=ncol(model$fitted)
fit.model=model$fitted[,d]
Q<-matrix(0,nrow=m,ncol=n)
for(i in 1:n){
Q[,i]=fit.model[zona==i]
}
curvas2_mxm<-data.frame(Q)
write.table(curvas2_mxm, file="curvas_15_nodos_mxm_ejemplo.txt", sep=" ",
col.names=TRUE, row.names=FALSE)
#Curva correspondiente a la trayectoria muestral 28 ajustada con 15 nodos
curva1_2<-curvas2_mxm[,28]
Funciones implementadas en R 65
MM=mixed.model.B(x,min(x)-0.00001,max(x)+0.00001,25,3)
Z=MM[[2]]
X=model.matrix(y~x)
Id=factor(rep(1,length(y)))
Z.block<-list(Id=pdIdent(~Z-1), zona=pdSymm(~x))
data.fr<- groupedData( y ~ X[,-1] | Id,data =data.frame(y,X,Z,zona,x))
model<- lme(y~X[,-1],data=data.fr,random=Z.block)
d=ncol(model$fitted)
fit.model=model$fitted[,d]
G<-matrix(0,nrow=m,ncol=n)
for(i in 1:n){
G[,i]=fit.model[zona==i]
}
curvas3_mxm<-data.frame(G)
write.table(curvas3_mxm, file="curvas_25_nodos_mxm_ejemplo.txt", sep=" ",
col.names=TRUE, row.names=FALSE)
#Curva correspondiente a la trayectoria muestral 28 ajustada con 25 nodos
curva1_3<-curvas3_mxm[,28]
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#Guardamos las curvas ajustadas por diferentes m\’{e}todos
ajuste_n_curvas<-function (n,m,bdeg,x,y,w,nodos,lambda){
for (i in 1:n) {
pord=bdeg-1
#Spline de regresi\’{o}n
BBB2=bspline(x,xl,xr,nodos,bdeg)
a2=solve(t(BBB2)%*%BBB2)%*%t(BBB2)%*%w[,i]
curva_reg[,i]<- BBB2%*%a2
#Spline de suavizado
curva5<- smooth.spline(x, w[,i], spar=NULL,cv=FALSE, all.knots=FALSE,
nknots=nodos)
pred<-predict(curva5, x)
curva_smth[,i]<-pred$y
Funciones implementadas en R 67
#P-spline
BBB8=bspline(x,xl,xr,nodos,bdeg)
d8=ncol(BBB8)
D8=diff(diff(diag(d8)))
P8=t(D8)%*%D8
a8=solve(t(BBB8)%*%BBB8+lambda*P8)%*%t(BBB8)%*%w[,i]
curva_P[,i]<- BBB8%*%a8
}
return(curva_reg,curva_P,curva_smth) } #Guardamos las trayectorias
para cada ajuste #Llamamos a la funci\’{o}n
n_curvas<-ajuste_n_curvas(n,m,bdeg,x,y,w,nodos,lambda) #Curvas
ajustadas por splines.Reg
write.table(data.frame(n_curvas$curva_reg),
file="ncurvas_5_nodos_reg_ejemplo.txt",sep=" ",col.names=TRUE,
row.names=FALSE)
suma_reg<-matrix(0,ncol=1,nrow=m) suma_suav<-matrix(0,ncol=1,nrow=m)
68 Estimación penalizada con datos funcionales
suma_p<-matrix(0,ncol=1,nrow=m) suma_p_mxm<-matrix(0,ncol=1,nrow=m)
media_reg<-matrix(0,ncol=1,nrow=m)
media_suav<-matrix(0,ncol=1,nrow=m) media_p<-matrix(0,ncol=1,nrow=m)
media_mxm<-matrix(0,ncol=1,nrow=m) ECM_reg<-matrix(0,ncol=1,nrow=n)
ECM_suav<-matrix(0,ncol=1,nrow=n) ECM_p<-matrix(0,ncol=1,nrow=n)
ECM_p_mxm<-matrix(0,ncol=1,nrow=n)
for (i in 1:n){
suma_reg<-suma_reg+curv_regresion[,i]
suma_suav<-suma_suav+curv_suavizado[,i]
suma_p<-suma_p+curv_P[,i]
suma_p_mxm<-suma_p_mxm+curv_P_mxm[,i]
}
plot(x,y,pch="",ylab="f(t)=cos(2*pi*t)",xlab="t",
main="Funciones medias")
lines(x, y, col=1,lwd=2)
lines(x, media[,1],col=2,lwd=2)
lines(x, media[,2],col=3,lwd=2)
lines(x, media[,3],col=4,lwd=2)
lines(x, media[,4],col=6,lwd=2)
legend(0.2,0.7, c("Curva Media","C.Media de Splines Regresi\’{o}n",
"C.Media Splines de suavizado","C.Media de P-splines",
"C. Media Modelos Mixtos"),col=c(1,2,3,4,6) ,lty = c(1, 1, 1,1),yjust=0.5,
Funciones implementadas en R 69
bty="n")