%% Dataset wafer X=readtable('wafer.txt','ReadRowNames',true); % grafico in coordinate parallele parallelplot(X) % Matrice dei diagrammi di dispersione spmplot(X) plo=struct; plo.label=X.Properties.RowNames; % spmplot con etichette % spmplot(X,'plo',plo,'selunit',1:n) outWafer=pcaFS(X); % 6) Verificare che la somma dei quadrati delle correlazioni coincide con % il rispettivo autovalore. disp('Primi due autovalori di R partendo dalla correlazioni tra CP e var originarie') disp(sum(outWafer.loadings.^2,1)) % Vedi anche %outWafer.explained(1:2,1) % 8) calcolare gli scores non normalizzati Z*V. Verificare che gli scores % non normalizzati possono essere ottenuti come % (sqrt(n-1)*U*Gamma) [U,Gammastar,V]=svd(Z,'econ'); sqn1=sqrt(n-1); Gamma=Gammastar/sqn1; Score=Z*V; Scorechk=sqn1*U*Gamma; max(abs(Score-Scorechk),[],'all') % Qual è la matrice di varianze e covarianze delle prime due colonne della % matrice Z*V? % Le CP sono tra loro incorrelate e presentano come matrice di varianze e % covarianze la matrice degli autovalori della matrice R % (\Lambda=\Gamma*\Gamma) disp('Matrice di correlazione delle prime due componenti principali') disp(Gamma(1:2,1:2).^2) disp(cov(Score(:,1:2))) %% Analisi del dataset delle lavatrici Y=readtable('lavatrici.xlsx','Sheet','dati','Range','A1:G17','ReadRowNames',true,'Format','auto'); outLavatrici=pcaFS(Y); % Verificare empiricamente utilizzando la funzione di matlab fitlm che la % comunalità per la variabile "cons" non è altro che l'R2 nella % regressione in cui la variabile dipendente è cons e le variabili % esplicative sono le prime due componenti principali. Reg=fitlm(outLavatrici.score,Y.cons); disp(Reg) disp(['Valore di R2 =' num2str(Reg.Rsquared.Ordinary)]) % Estraggo la communalità della variabile consumo (quota di varianza % spiegata dalla prime due CP) outLavatrici.communalitiesT('cons',3) % Rappresentare graficamente gli scores (non standardizzati) delle prime % due componenti principali ed aggiungere al grafico le etichette delle % lavatrici x=outLavatrici.score(:,1); y=outLavatrici.score(:,2); figure scatter(x,y) text(x,y,Y.Properties.RowNames) set(gca,'XAxisLocation','origin','YAxisLocation','origin') title('Rappresentazione score non standardizzati') % Corrisponde ai punti nel biplot quando omega=1 e alpha=1 [U,Gammastar,V]=svd(Z,'econ'); sqn1=sqrt(n-1); Gamma=Gammastar/sqn1; Zcappello=U(:,1:2)*Gammastar(1:2,1:2)*V(:,1:2)'; % La somma dei quadrati delle differenze tra i valori Z % e i valori della matrice Z cappello non è altro che la somma degli % ultimi p-2 autovalori della matrice (n-1)*R =Z'Z Perdita=sum((Z-Zcappello).^2,'all'); sum(diag(Gammastar(3:end,3:end)).^2) disp(Perdita) disp(sum(diag(Gammastar(3:end,3:end)).^2)) % La somma dei quadrati delle differenze divisa per (n-1) tra i valori Z % e i valori della matrice Z cappello non è altro che la somma degli % ultimi p-2 autovalori della matrice R =Z'Z/(n-1) PerditaDivisonminus1=sum((Z-Zcappello).^2,'all')/(n-1); disp(PerditaDivisonminus1) disp(sum(diag(Gamma(3:end,3:end)).^2)) %% Dataset scrittori Xtable=readtable('scrittori.xlsx','ReadRowNames',1,'Range','A1:G17','VariableNamingRule','preserve'); % Osservazione l'opzione 'VariableNamingRule','preserve' funziona solo con % MATLAB 2020b % grafico in coordinate parallele parallelplot(Xtable) % Matrice dei diagrammi di dispersione spmplot(Xtable) outScrittori=pcaFS(Xtable);