# effacer les objets en mémoire rm(list=ls()) # se mettre dans le repertoire de travaille setwd("D:/TP-AFC") # lire le fichier X=read.csv("tachesmaison.csv", header=T,sep=";",dec=",");X # supprimmer la premiere colonne X=X[,-1];X # rendre le tableau comme une matrice (pour fair les calculs) X=as.matrix(X);X #supprimer la premiere ligne colnames(X)<-NULL;X #renomer la matrice X en N-etoile (pour recpecter les notations du cours) Ns=X;Ns # dimension de la matrice d=dim(Ns);d # nombre de ligne p=d[1];p # nombre de colonnes q=d[2];q #l'effectif total n=sum(Ns);n # test d'indépendance de khi-deux test=chisq.test(Ns);test #khi-deux observe KHO=test$statistic;KHO # l'écart a l'indépendance phi2=KHO/n; phi2 # matrice des fréquences observées "N" N=Ns/n;N # fréquence marginale lignes et colonnes FL=rowSums(N);FL FC=colSums(N);FC # centres de gravité des lignes et des colonnes gr=as.matrix(FC);gr gc=as.matrix(FL);gc # Matrices diagonales lignes et colonnes Dr=diag(FL);Dr Dc=diag(FC);Dc # Inverse des Matrices diagonales lignes et colonnes Mr=solve(Dc);Mr Mc=solve(Dr);Mc # Matrices des profils-lignes et profiis-colonnes Xr=Mc%*%N;Xr Xc=Mr%*%t(N);Xc # Vecteur indentité 1p Idp=as.matrix(rep(1,p));Idp # Matrice des profils-lignes centrée Yr=Xr-Idp%*%t(gr);Yr # Matrices des variances-covariances des profils-lignes Vr=t(Yr)%*%Dr%*%Yr;Vr # Matrices d'dinerties des profils-lignes Zr=Vr%*%Mr;Zr # Valeurs propres des profils-lignes lamdaZr=eigen(Zr)$values;lamdaZr # Vecteurs propores des profils-lignes VectZr=eigen(Zr)$vectors;VectZr #s=sign(gr[1,1])*sign(VectZr[1,4]);s #VectZr=s*VectZr;VectZr #****************************************************************** # Vérification: #le centre de gravité est un vecteur propre de Zr # associé a la valeur propre nulle k=Zr%*%gr; k # Les valeurs propres non-null de Zr lamda=lamdaZr[lamdaZr>1e-5];lamda #Rang de la matrice Zr thau=length(lamda);thau #matrice des vecteurs propres associes aux val. propres non-nulls de Zr Ur=VectZr[,1:thau];Ur # les axes principaux des profils-lignes fr=function(v){v/sqrt(sum(t(v)%*%Mr%*%v))} UrN=apply(Ur,2,fr);UrN # calcul des axes principaux des profils-colonnes #: formule de transition DL=diag(1/sqrt(lamda));DL UcN=t(Xc)%*%UrN%*%DL;UcN #..et inversement UrN=t(Xr)%*%UcN%*%DL;UrN #Matrice des facteurs princiaux des profils-lignes et profils-colonnes wr=Mr%*%UrN;wr wc=Mc%*%UcN;wc #Composantes principale des profils-lignes et profils-colonnes cpr=Xr%*%wr;cpr cpc=Xc%*%wc;cpc # Vérification: relations quasi-barycentriques cpc2=Xc%*%cpr%*%DL;cpc2 cpr2=Xr%*%cpc%*%DL;cpr2 # Forumule de reconstitution des données Yrr=matrix(nrow=p,ncol=q) S=c() for (i in 1:p){ for (j in 1:q){ for (k in 1:thau){ S[k]=DL[k,k]*cpr[i,k]*cpc[j,k]} Yrr[i,j]=Dc[j,j]*sum(S[1:thau]) } }