Functional case

Fonctions

library(sm)
Package 'sm', version 2.2-6.0: type help(sm) for summary information
source('npfda.R')

#### 
ROC=function(z,p1)
{
  p=sort(unique(p1))
  lp=length(p)
  ROC=matrix(NA,lp,2)
  for (s in 1:lp)
  {
    ROC[s,1]=mean(p1[z==0]>p[s])
    ROC[s,2]=mean(p1[z==1]>p[s])  
  }
  AUC=sum(ROC[-lp,2]*(ROC[-lp,1]-ROC[-1,1]))
  
  colnames(ROC)=c("FPR","TPR")
  plot(ROC,type='l',main=paste('AUC =', AUC))
  return(list(ROC=ROC,AUC=AUC))
  }

#######
Classif_NP_fun=function(X,Y,X0=NA,...)
{
  X=as.matrix(X)
  n=length(Y)
  V=sort(unique(Y))
  n_V=length(V)
  Prob=matrix(NA,n,n_V)
  colnames(Prob)=V
  Class=rep(NA,n)
  if (!is.na(max(X0)))
  {
    X0=as.matrix(X0)
    P0=matrix(NA,nrow(X0),n_V)
    Class0=rep(NA,n)
  }
  for (v in 1:n_V)
  {
    z=as.numeric(Y==V[v])
    X1=X
    if (!is.na(max(X0))) {X1=X0}
    re=funopare.kernel.cv(z,X,X1,...)
    Prob[,v]=re$Estimated.values
    if (!is.na(max(X0))) {P0[,v]=re$Predicted.values}
  }
  if (n_V==2) {ROC(Y==V[2],Prob[,2])}
  Class=V[apply(Prob,1,which.max)]
  M_table=table(Y,Class)
  if (!is.na(max(X0))) {Class0=V[apply(P0,1,which.max)]}
  if (!is.na(max(X0))) {return(list(Class=Class, Prob=Prob, M_table=M_table, err=1-sum(diag(M_table))/n, Class0=Class0,Prob0=P0))}
  else {return(list(Class=Class, Prob=Prob, M_table=M_table, err=1-sum(diag(M_table))/n))}
}

Regression

Real world data

#tec=read.table('npfda-spectrometric.dat')
#X=tec[,1:100]
#Y=tec[,101]
load("Tecator.RData")
matplot(t(X),type='l')

par(mfrow=c(3,3))
for (j in 0:8)
{
re=funopare.kernel.cv(Y,X,X,q=j,nknot=10,range.grid=c(0,1))
plot(re$Estimated.values, Y)
title(main=paste('q=',j,' et CV=',signif(re$Mse,7),sep=''))
abline(0,1)
}

X=as.matrix(X)
par(mfrow=c(3,3))
for (j in 0:8)
{
re=funopare.kernel.cv(Y,X,X,semimetric='pca',qv=2:(j+2))
plot(re$Estimated.values, Y)
title(main=paste('qv=2:',j+2,' et CV=',signif(re$Mse,7),sep=''))
abline(0,1)
}

Classification

load("PHONEMES.RData")
learn=1:1000
test=1001:2000

X_learn=CURVES[learn,]
Y_learn=PHONEME[learn]
X_test=CURVES[test,]
Y_test=PHONEME[test]

par(mfrow=c(2,3))
ph=sort(unique(Y_learn))
for (j in ph) {matplot(t(X_learn[Y_learn==j,]),type='l',main=j)}

for (j in 1:10)
{
C_re=Classif_NP_fun(X_learn,Y_learn,X0=X_test,semimetric='mplsr', q=j)
cat(paste('q=',j,'   \n',sep=''))
cat('Qualité de la classification sur l\'échantillon test \n')
cat('matrice de confusion: ')
M0=table(Y_test, C_re$Class0)
err0=1-sum(diag(M0))/sum(M0)
print(M0)
cat('erreur:')
cat(err0)
cat('   \n')
cat('   \n')

}
q=1   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  146  54   0   0   0
   AO   55 144   1   0   0
   DCL   0   0 197   3   0
   IY    0   1   3 182  14
   SH    0   0   0   4 196
erreur:0.135   
   
q=2   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  153  47   0   0   0
   AO   38 162   0   0   0
   DCL   0   0 198   1   1
   IY    1   0   2 195   2
   SH    0   0   1   0 199
erreur:0.093   
   
q=3   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  151  48   0   1   0
   AO   29 171   0   0   0
   DCL   0   0 198   1   1
   IY    2   0   1 197   0
   SH    0   0   0   0 200
erreur:0.083   
   
q=4   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  152  48   0   0   0
   AO   29 171   0   0   0
   DCL   1   0 199   0   0
   IY    0   0   0 200   0
   SH    0   0   0   0 200
erreur:0.078   
   
q=5   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  150  50   0   0   0
   AO   32 168   0   0   0
   DCL   1   0 199   0   0
   IY    0   0   0 200   0
   SH    0   0   0   0 200
erreur:0.083   
   
q=6   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  152  47   1   0   0
   AO   31 168   0   1   0
   DCL   1   0 199   0   0
   IY    0   0   0 200   0
   SH    0   0   0   0 200
erreur:0.081   
   
q=7   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  146  53   1   0   0
   AO   31 168   0   1   0
   DCL   2   1 197   0   0
   IY    0   0   0 200   0
   SH    1   0   0   0 199
erreur:0.09   
   
q=8   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  151  49   0   0   0
   AO   32 167   0   1   0
   DCL   0   2 198   0   0
   IY    1   0   2 196   1
   SH    1   0   0   0 199
erreur:0.089   
   
q=9   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  155  44   1   0   0
   AO   41 158   0   1   0
   DCL   2   1 197   0   0
   IY    1   0   1 197   1
   SH    1   0   0   0 199
erreur:0.094   
   
q=10   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  149  51   0   0   0
   AO   35 164   0   1   0
   DCL   2   1 197   0   0
   IY    0   0   2 197   1
   SH    1   0   0   0 199
erreur:0.094   
   
for (j in 1:10)
{
C_re=Classif_NP_fun(X_learn,Y_learn,X0=X_test,semimetric='pca', q=j)
cat(paste('q=',j,'   \n',sep=''))
cat('Qualité de la classification sur l\'échantillon test \n')
cat('matrice de confusion: ')
M0=table(Y_test, C_re$Class0)
err0=1-sum(diag(M0))/sum(M0)
print(M0)
cat('erreur:')
cat(err0)
cat('   \n')
cat('   \n')

}
q=1   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  SH
   AA  103  25   0  72
   AO   33  68   1  98
   DCL   0   4 195   1
   IY   40  44   0 116
   SH   47  39   0 114
erreur:0.518   
   
q=2   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  145  54   0   1   0
   AO   76 120   0   4   0
   DCL   0   0 196   3   1
   IY    0   3   0 186  11
   SH    0   0   0  18 182
erreur:0.171   
   
q=3   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  142  58   0   0   0
   AO   69 131   0   0   0
   DCL   0   0 198   1   1
   IY    0   0   0 197   3
   SH    0   0   0   2 198
erreur:0.134   
   
q=4   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  143  57   0   0   0
   AO   53 147   0   0   0
   DCL   0   0 198   1   1
   IY    0   0   0 197   3
   SH    0   0   0   1 199
erreur:0.116   
   
q=5   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  147  53   0   0   0
   AO   39 161   0   0   0
   DCL   0   0 198   1   1
   IY    0   0   0 197   3
   SH    0   0   0   0 200
erreur:0.097   
   
q=6   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  145  55   0   0   0
   AO   35 165   0   0   0
   DCL   0   0 197   2   1
   IY    0   0   0 198   2
   SH    0   0   0   0 200
erreur:0.095   
   
q=7   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  141  59   0   0   0
   AO   32 168   0   0   0
   DCL   0   0 197   2   1
   IY    0   0   0 198   2
   SH    0   0   0   0 200
erreur:0.096   
   
q=8   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  140  60   0   0   0
   AO   30 170   0   0   0
   DCL   0   0 198   1   1
   IY    0   0   0 198   2
   SH    0   0   0   0 200
erreur:0.094   
   
q=9   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  138  62   0   0   0
   AO   26 174   0   0   0
   DCL   0   0 197   2   1
   IY    0   0   0 198   2
   SH    0   0   0   0 200
erreur:0.093   
   
q=10   
Qualité de la classification sur l'échantillon test 
matrice de confusion:       
Y_test  AA  AO DCL  IY  SH
   AA  141  59   0   0   0
   AO   25 175   0   0   0
   DCL   0   0 198   1   1
   IY    0   0   0 198   2
   SH    0   0   0   0 200
erreur:0.088