MvB=function(n,p)
{
# Retourne une matrice de taille n*p (X_i(t_j)) i=1,...,n, j=1,...,p
# tel que X_i est un mouvement brownien standard.
X=rnorm(n*p)/sqrt(p-1)
X=matrix(X,ncol=p)
MvB=matrix(0,ncol=p,nrow=n)
for (i in 1:n)
{
MvB[i,]=cumsum(X[i,])
}
MvB
}
n = 500
p = 300
X = MvB(n,p)
t = seq(0,1,length.out = p)
plot(c(0,1),range(X),type='n',xlab='t',ylab=expression(X[i](t)),main='n mouvements browniens sur [0,1]')
for (i in 1:n){
points(t,X[i,],type='l',col=i)
}
sigma = 0.1
epsilon = rnorm(n,0,sigma)
betas = function(t){sin(10*t)}
Y = X%*%betas(t)/p + epsilon
mmax = 100
Dmax = 2*mmax+1
phiX = matrix(NA,n,Dmax) # matrice contenant <X_i,phi_k>
phi = matrix(1,Dmax,p) # matrice contenant phi_k(t_l)
phiX[,1] = rowMeans(X)
for (j in 1:mmax){
phiX[,2*j] = (sqrt(2)/p)*X%*%cos(2*pi*j*t)
phiX[,2*j+1] = (sqrt(2)/p)*X%*%sin(2*pi*j*t)
phi[2*j,] = sqrt(2)*cos(2*pi*j*t)
phi[2*j+1,] = sqrt(2)*sin(2*pi*j*t)
}
G = crossprod(phiX)/n
hatb = crossprod(phiX,Y)/n
m1 = 1
hata1 = hatb[1]/G[1,1]
hatbeta1 = rep(hata1,p)
m2 = 5
hata5 = solve(G[1:m2,1:m2],hatb[1:m2])
hatbeta5 = hata5%*%phi[1:m2,]
m3 = 31
hata31 = solve(G[1:m3,1:m3],hatb[1:m3])
hatbeta31 = hata31%*%phi[1:m3,]
plot(t,betas(t),col="darkgreen",type='l',lwd=2,lty=2)
abline(h=hata1, col='blue')
points(t,hatbeta5,type='l',col="green")
points(t,hatbeta31,type='l',col="red")
legend('bottomleft',c(paste(expression(beta),'*'),expression(hat(beta)[1]),expression(hat(beta)[5]),expression(hat(beta)[31])),lty=c(2,rep(1,3)),lwd=c(2,rep(1,3)),col=c('darkgreen','blue','green','red'))
\[ m\mapsto \gamma_n(\widehat\beta_m)\left(1+\kappa\frac{m}n\right). \] Puis tracer les estimateurs obtenus en sélectionnant \(m\) par les deux critères de sélection de modèle (variance connue et inconnue).
kappa = 2.5
gamma = rep(0,Dmax)
for (m in 1:Dmax){
hatam = solve(G[1:m,1:m],hatb[1:m])
hatbetam = hatam%*%phi[1:m,]
gamma[m] = mean((Y-tcrossprod(X,hatbetam)/p)^2)
}
plot(gamma,col='blue',type='b',pch=16,xlab='m',ylab='crit(m)')
points(gamma+kappa*sigma^2*(1:Dmax)/n,col='green',type='l')
points(gamma*(1+kappa*(1:Dmax)/n),col='orange',type='l')
legend('topright',c(expression(gamma[n](hat(beta)[m])),'crit1','crit2'),lty=rep(1,3),col=c('blue','green','orange'))
hatm1 = which.min(gamma+kappa*sigma^2*(1:Dmax)/n)
hatm1
## [1] 6
hatm2 = which.min(gamma*(1+kappa*(1:Dmax)/n))
hatm2
## [1] 6
hatahatm1 = solve(G[1:hatm1,1:hatm1],hatb[1:hatm1])
hatbetahatm1 = hatahatm1%*%phi[1:hatm1,]
hatahatm2 = solve(G[1:hatm2,1:hatm2],hatb[1:hatm2])
hatbetahatm2 = hatahatm2%*%phi[1:hatm2,]
plot(t,betas(t),col="darkgreen",type='l',lwd=2,lty=2)
points(t,hatbetahatm1,type='l',col="green",lwd=2)
points(t,hatbetahatm2,type='l',col="orange")
legend('bottomleft',c(expression(beta),expression(hat(beta)[hat(m)[1]]),expression(hat(beta)[hat(m)[2]])),lty=c(2,1,1),lwd=c(2,2,1),col=c('darkgreen','green','orange'))
Nous allons étudier appliquer la méthode d’estimation à l’a préd’estimation de la concentration en nitrates des eaux usées. Ces données sont celles étudiées dans l’article
H.N. Pham et al. Estimation simultanée et en ligne de nitrates et nitrites par identification spectrale UV en traitement des eaux usées, L’eau, l’industrie, les nuisances, n. 335, p. 61-69, 2010.
Nous commençons par charger et centrer les données. Les données
concernant la variable à prédire sont enregistrées dans la première
colonne du fichier Y.dat
.
Xnc <- read.table("X.dat")
Ync <- read.table("Y.dat")
Ync <- Ync[,1]
n <- length(Ync)
# Representation des donnees selon la valeur de Y
palette(rainbow(14,start=0,end=4/6))
plot(c(0,1),range(Xnc),type='n',xlab='wavelength',ylab='absorbance')
for (i in 1:n){
points(seq(0,1,length.out=ncol(Xnc)),Xnc[i,],type='l',col=floor(Ync[i]))
}
ry = range(Ync)
legend("topright",paste(floor(ry[1]):floor(ry[2]),'<=Y<',floor(ry[1]+1):floor(ry[2]+1)),col=1:9,lty=rep(1,9))
## Centrage des données
Xbar <- colMeans(Xnc)
points(1:ncol(Xnc),Xbar,col=2,type='l')
X <- scale(Xnc,scale=F)
plot(c(1,ncol(Xnc)),range(X),type='n',xlab='wavelength',ylab='',main="Données centrées")
for (i in 1:n){
points(1:ncol(Xnc),X[i,],type='l',col=floor(Ync[i]))
}
Y1 <- Ync-mean(Ync)
Appliquer la méthode d’estimation de l’exercice précédent et proposer une méthode de prédiction de la variable Y.