--- title: "TP_Chapitre_3.2" output: html_document date: "2025-01-28" --- ```{r, include=FALSE} knitr::opts_chunk$set(echo = TRUE,comment='',class.source="bg-info", class.output="bg-success") ``` # Functional case # Fonctions ```{r} library(sm) 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 ```{r} #tec=read.table('npfda-spectrometric.dat') #X=tec[,1:100] #Y=tec[,101] load("Tecator.RData") matplot(t(X),type='l') ``` ```{r} 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) } ``` ```{r} 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 ```{r} 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)} ``` ```{r} 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') } ``` ```{r} 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') } ```