formulario matlab - analisi dati marketing PDF

Title formulario matlab - analisi dati marketing
Author Luca Allero
Course Analisi dei Dati per il Marketing
Institution Università degli Studi di Parma
Pages 38
File Size 876.9 KB
File Type PDF
Total Downloads 21
Total Views 90

Summary

IMPORTARE UN FILEX= readtable (‘filename’,’Sheet’,’selezionare il foglio’,’Range’,’A1:D20’(sono i dati da importare),’ReadVariableNames’,true/false (se importare i nomi delle colonne (true) ,altrimenti (false),’ReadRowNames’true/false(se importare i nomi delle righe (true) altrimenti (false)) BASIC ...


Description

IMPORTARE UN FILE X=readtable(‘filename’,’Sheet’,’selezionare il foglio’,’Range’,’A1:D20’(sono i dati da importare),’ReadVariableNames’,true/false (se importare i nomi delle colonne (true) ,altrimenti (false),’ReadRowNames’true/false(se importare i nomi delle righe (true) altrimenti (false)) BASIC SYNTAX Aggiungendo il ; alla fine di un comando non lo vedo nel command window ma solo nel workspace,mentre se non metto il ; vedo il comando sia nel command window sia nel workspace Nomevariabile=espressione creare una variabile X=array2table(matrice) mi trasforma la matrice in table Xd=table2array(matrice) mi trasforma la table in matrice Oppure Xd=matrcie{:,:} X=zscore(matrice) dalla matrice originale passa alla matrice degli scostamenti standardizzati ovvero si toglie la media e si divide per la std media=0 e std=1 X=zscoreFS(matrice) standardizzazione robusta ovvero si tolgono le mediane e si divide per il mad. la mediana e il mad non risentono dei valori anomali [Y,idx]=rmmissing(X,1/2)rimuove le voci mancanti da un array o table. (remove missing entries) - 1 se si vuole eliminare tutte le righe che contengono almeno un missing value. - 2 se si vuole eliminare le colonne che contengono almeno un missing value ismissing(X)

~X  c=’pluto’ b= ‘topolino’ {c b}

x.a=[12 45] x.b=’aaaa’

dice quali elementi sono dei missing di una table o array. (find missing values) - 1 indica la presenza in un NaN in quella posizione - 0 nessun missing value ~ è il NOT, ha la funzione di negazione,ovvero darà una matrice che darà 1(vero) dove X è 0 e darà 0(falso) dove X≠0 c prenderà il nome pluto b prende il nome topolino concatenamento dei dati categorici avviene con {} - Ans= {‘pluto’} {‘topolino’} chiamate cell array - Concatenamento dei dati numerici invece avviene con [] È una struct (contenitore che può avere varie tipologie di dati), ovvero nel workspace viene salvata solo la x e all’interno si trova x.a e x.b

ELIMINARE RIGHE/COLONNE, SOSTITUZIONE NUMERI IN UNA MATRICE X(:,{‘…’ ‘…’})=[] elimina le righe che contengono le parole ‘….’ e ‘….’ X({‘….’ ‘….’},:)=[] elimina le colonne che contengono le parole ‘….’ e ‘….’ X([….],:) riordinamento delle righe della matrice X, dentro alle [] metto i numeri delle colonne in base all’ordine che voglio X(3,1)=100 nella matrice X alla terza riga e prima colonna il valore lo sostituisco con 100 X(2,:)=5 i valori della seconda riga in una matrice li sostituisco con 5 DESKTOP MANAGEMENT

save nome load nome clear clc format long format short format bank

salva il workspace in ‘nome’ carica le variabili del file ‘nome’ nel workspace cancella tutte le variabili dal workspace cancella il testo dal Command Window tante cifre dopo la virgola poche cifre dopo la virgola 2 cifre dopo la virgola

4 [3 4] [1;3] [1 2 3;4 5 6] rand(n) zeros(2,3) ones(2,3) 1:4 1:0.5:4 linspace(1,10,5)

help format

ARRAY TYPES scalare vettore riga vettore colonna matrice crea una matrice quadrata nxn matrice di zeri con 2 rige e 3 colonne matrice di 1 con w righe e 3 colonne crea una sequenza da 1 a 4 spaziato di 1 Es 1 2 3 4 crea una sequenza da 1 a 4 spaziato di 0.5 Es 1 1.5 2 2.5 3 3.5 4 crea un vettore di 5 elementi da 1 a 10

X(2,: ) X(1:3,: ) X(2,[3 6]) X([3 6],1) X(2,3)=11 [1 1;1 1].*[2 2;2 2] Y=X(:,{‘…’,’…’,’….’})

tutti gli elementi della riga 2 tutti gli elementi delle prime 3 righe elementi riga 2 e solo colonne 3 e 6 elementi della 3 e 6 riga ,solo della 1 colonna cambia l’elemento posizionato nella 2 riga e 3 colonna in 11 element-wise multiplication (moltiplica elemento per elemento) mi prende solo i valori numerici della matrice X delle variabili(colonne) che si chiamano ….. [xrig,xcol]=size(x) salva il numero delle righe in xrig e il numero delle colonne in xcol es: se X matrice 3x4 size(X) resituisce xrig=3. xcol=4 [xMax,idx]max(x) calcola il massimo di x e la sua corrispondente posizione nella matrice flip(X) resistuisce l’array Y della stessa dimensione di X ma con l’ordine degli elementi invertito es: X=diag([10 20 30]) saranno sulla diagonale principale Y=flip(X) i valori saranno sulla diagonale secondaria X=[3 4 5]’ trasposizione A=5 B=3 C=A+B somma C=A+2 a tutti i numeri della matrice A aggiunge 2

sum(X,”all”)

somma di tutti gli elementi di X

sum(X,1) sum(X,2)

somma degli elementi per colonna somma degli elementi per riga

mean(X,”all”) mean(X,1) mean(X,2) mean(X,’omitnan’) std(X) median(X)

media di tutti i valori media degli elementi per colonna somma degli elementi per riga media senza tenere conto dei missing value deviazione standard mediana

help datafun

visualizza il valore della variabile X senza stampare il nome della variabile a=grpstats(table,{‘….’ ‘….’},{’mean’/’std’} ecc..,’Alpha’,’[0 1]) help grpstats - «ovvero indico il nome della table e su quali colonne voglio operare» - {‘etichetta della variabile di raggruppamento’},se è una sola metto la racchiudo tra gli apici senza parentesi, se sono più di una metto apici e graffe - whichstat «ovvero quali statistiche voglio media,varianza,min,max ecc {‘mean’ ‘max’ ‘std’}»)per ogni etichetta delle variabili di raggruppamento avrò un’unica media/std… - se utilizzo ‘meanci’ o ‘predci’(intervallo di confidenza per la media) posso utilizzare ‘Alpha’ per specificare l’intervallo di confidenza di un valore compreso tra 0 e 1. Se specifico il valore α,grpstats resituisce 100x(1- α)% mentre se non lo specifico l’intervallo di default sarà 95% disp(X)

a=randsample(n «numeri totali da estrarre »,k «quanti numeri estrarre», false «estrazione senza ripetizione»/true «estrazione con ripetizione») rng(seed) per fare in modo che gli indici da estrarre siano esattamente gli stessi fisso un «seed dei numeri casuali», ovvero una volta fissato rng e generato i numeri causali tramite randsample ,questi numeri casuali saranno gli stessi per quell’ rng fissato es rng(2) x=randsample(5,2,false) mi darà per esempio x=1 8 e se ripeto ancora la sequenza mi uscirà lo stesso risultato di x…invece se non fisso rng mi genera numeri casuali di volta in volta strcat(matrice1,matrice2) sort(X) abs(X) randn(r,c) skewness(X) kurtosis(X) round(X) Y=prctile(X,p)

concatenamento orizzontale di array,cell array, string array ordina gli elementi in ordine crescente valore assoluto generatore di numeri casuali ,in questo caso un matrice di r righe e c colonne indice di asimmetria indice curtosi di X arrotonda ogni elemento al numero intero più vicino restituisce i percentili degli elementi in un vettore di dati o una matrice per le percentuali p nell’’intervallo [0,100] Oss.--> p riguarda i percentili e può essere sia uno scalare sia un vettore

nomematrice.Properties.RowNames prende solo i nomi delle righe nomematrice.Properties.VariableNames prende solo i nomi delle colonne categorical fornisce una comoda manipolazione dei dati non numerici pur mantenendo nomi significativi per i valori es: ho una matrice X e voglio mettere in un grafico a barre i nomi delle righe…usando X.Properties.RowNames devo vedere innanzitutto se i nomi sono una cell array, in tal caso faccio categorical(X.Properties.RowNames) per poterli inserire nel grafico a barre categotical(X,valueset) crea una categoria per ciascun valore in valueset..per la variabile X crei una categoria per ognuna delle modalità presente in valueset es valueset. Vset={‘a’,’b’,’c’,’d’,’e’} l’ideale sarebbe creare una nuova colonna con dentro i Vset X.nomenuovacolonna=categorical(X,Vset) tiedrank(X) calcola i ranghi dei valori nel vettore X cov(X) covarianza corr(X) correlazione [rho,Pvalues]=corr(matrice)calcola sia la matrice di correlazione sia la matrice dei Pvalues [rho,Pval]=corr(X,’Type’,’Spearman’)  calcolo cograduazione+ implementazione manuale 1-6*sum((g(xi)-g(yi)).^2)/(n*(n^2-1))g(xi) e g(yi) sono i ranghi delle variabili(colonne) usando un ciclo FOR  n è il numero di unità statistiche(ovvero numero di righe) normpdf(x,mu,sigma) funzione di densità della distribuzione normale standard normcdf(x,mu,sigma) funzione di ripartizione(cumulativa) della distribuzione normale norminv(prob,mu,sigma) quantili es: norminv(0.975). ans=1.96 è il valore che lascia alla sua sx in una distribuzione normale standardizzata il 97.5% dei casi y=exp(-0.5*((x-mu)./sigma).^2)./(sqrt(2*pi).*sigma) implementazione manuale della funzione di densità normale univariata…prima definisco x,mu,sigma isequal(A,B) 1 se A=B mentre da 0 se A≠B y=tpdf(x,gdl) restituisce la funzione di densità di probabilità della distribuzione t di Student con gdl gradi di libertà,valutata ai valori in x chi2rnd(gdl,r,c) generare dati da una distribuzione chi2 con gdl(gradi di libertà) r(righe) e c(colonne) crosstab(X,Y) crea la tabella di contingenza num2str(…) converte una matrice numerica in una matrice di caratteri che rappresenta i numeri..è utile per etichettarei valori e assegnare titoli a grafici con valori numerici tabulate(X) riproduce una tabella di frequenze dei dati nel vettore X.Per ogni valore la funzione di tabulazione mostra il numero di istanze e la percentuale di quel vettore in X [Pval,anovatab,stats]=anova1(matrice,variabilediraggruppamento) test ANOVA es: gdl lo fisso ad 8 per es.  legend({‘Normale’ [‘Student t con ‘ num2str(gdl) ‘gradi di libertà’]}) il risultato sarà nella legenda -Normale -Student t con 8 gradi di libertà Y=tcdf(tobs,gdl) probabilità in una variabile casuale t di Student con n gradi di libertà di ottener un valore inferiore a tobs….restituisce la funzione di distribuzione cumulativa della distribuzione t di Student

-

Se dopo nu metto ‘upper’ calcola la probabilità di ottenere valori superiori id tobs, ovvero i valori a dx pippo=tinv(quant,gdl)es: tinv(0.975,8) mi trova il valore che mi lascia alla dx il 2,5% e perciò 5% nelle due code Valore soglia di rhosqrt( pippo./(gdl+pippo)) oss. Gdl+Pippo devo elevarlo al quadrato .^ RAPPRESENTAZIONI GRAFICHE figure mi crea una nuova finestra della figura scatter(X,Y) diagramma di dispersione scaterhist(X,Y) scatter con istogrammi ai margini scatterboxplot(X,Y) scatter con boxplot ai margini scatter3(X,Y) scatter 3D bar(X) grafico a barre help bar barh(X) grafico a barre orizzontali help barh bar(X,Y,’stacked’) grafico a barre sovrapposte plot(X) grafico a linee help plot plot3(X) grafico a linee 3D area(X) grafico ad area help area funnelplot(X) grafico ad imbuto help funnelplot surf(X) grafico a superficie 3D help surf histogram(X) grafico a istogrammi help histogram boxplot(X) boxplot help boxplot boxplotb(X) boxplot bivariato boxplot(matrice.Colonna,matrice.Colonna) boxplot solo di quelle colonne boxplot(x,g) g è la variabile di raggruppamento lsline aggiunge la reta di regressione per inserire una riga con n diverso tratteggio ax=lsline e dopo ax.LineStyle=’--' parallelplot(X,’obslabels’,…) grafico in coordinate parallele glyphplot(X,’glyph’,’face’,’obslabels’) rappresentazione tramite facce glyphplot(X,’glyph’,’star’,’obslabels’) rappresentazione tramite stelle andrewsplot(X) rappresentaione tramite curve trigonometriche spmplot(X) crea la matrice dei diagrammi di dispersione spmplot(X,’dispopt’,’box’) sulla diagonale principale inserisce i boxplot sulla diagonale principale…se ci metto ‘hist’ inserisce gli istogrammi sulla diagonale principale corrcoef(X1,X2) grafico coefficiente di correlazione title(‘….’) aggiunge un titolo al grafico xlabel(‘….’) nome asse x ylabel(‘….’) nome asse y xticklabels({‘…’,’…’}) etichette asse x xticks([…]) imposta i valori dell’asse x xtickangle(…) ruota le etichette dell’asse x di quanti gradi specifichiamo xlim([….]) limiti dell’asse x subplot(n,m,p) divide una figura su piu assi…n rappresenta il numero di righe, m rappresenta il numero di colonne,p in quale pannello vogliamo far vedere il grafico es: subplot(2,2,1) mi creerà 4 grafici e 1 indica il pannello in alto a sx es:subplot(2,2,2) mi creerà 4 grafici e 2 indica il pannello in alto a dx In un qualsiasi grafico posso aggiungere inoltre lynestyle/marker/color LINESTYLE dashed line (--) solid line (-) dotted line(:) dash-dot line (-.)

MARKER Cirle(‘o’) plus sign(‘+’) asterisk(‘*’) Vertical line(‘|’) diamond(‘d’)

point(‘.’)

cross(‘x’)

square(‘s’)

COLOR Yellow(y) magenta(m) cyan(c) red(r) green(g) blue(b) white(w) Black(k) Es:plot(x,y,’r--x’) fa un grafico a linee rossetratteggiate con il marker x grid on attiva la griglia grid off disattiva la griglia legend(‘…’,’…’,’….’,’location’,’…’) aggiunge una legenda al grafico e tramite la funzione location posso decidere dove posizionare la legenda..inoltre se voglio mettere solo il testo ‘…’ mentre se voglio estrarre i numeri da una stringa di testo devo aggiungere le graffe {‘…’,’…’} ‘MarkerEdgeColor’cambia il colore del contorno del marker ‘MarkerFaceColor’cambia il colore dell’area del marker ‘MarkerSizecambia ola dimensione del marker text(matrice (colonne di riferimento),matrice.Properties.RowNames)aggiunge le etichette ai punti STANDARDIZZAZIONE DEI DATI Xd=X{:,:} disp(sxore(Xd))standardizz Xdst=zscore(Xd) azione tradizionale disp(‘matrice scostamenti standardizzati’) disp(Xdst) disp(zscoreFS(Xd))standar -verifica che le colonne hanno media=0 e varianza=1 dizzazione robustanon disp(mean(Xdst)) risente del valore anomalo disp(var(Xdst)) -rappresentazione grafica bar(categorical(X.Properties.RowNames),Xdst,’DisplayName’,’Xdst’) -trasformo la matrice in table Xdsttable=array2table(Xdst,’RowNames’,X.properties.RowNames,’VariableName s’,X.Properties.VariableNames) disp(Xdsttable) STATISTICHE DESCRITTIVE Xd=X{:,:} -calcolo varianze campionarie disp('Varianze campionarie') disp(var(Xd))

-calcolo indici di asimmetria disp('Indici di asimmetria') disp(skewness(Xd,0))il secondo argomento indica che vogliamo la versione corretta (non distorta) dell’indice

-calcolo indice di curtosi disp('Indici di crutosi') disp(kurtosis(Xd,0)) indica che vogliamo la versione corretta (non distorta) -calcolo indici MAD (non normalizzati) e normalizzati disp(' Calcolo degli indici MAD (non normalizzati)') disp(mad(Xd,1)) disp(' Calcolo degli indici MAD (normalizzati)') disp(1.4826*mad(Xd,1)) -calcolo medie ponderate Medie_ponderate=sum(Xd.*w)/sum(w) -calcolo scostamenti quadratici medi ponderati

Stdweighted=sqrt(sum(((Xd-medie_ponderate).^2).*w)/sum(w)) -trasformo le medie ponderate e std in table e mostro i risultati meanT=array2table(Medieponderate,’VariableNames’,X.Properties.VariableNames(4:end)) disp(meanT) stdT=array2table(stdweighted,'VariableNames',X.Properties.VariableNames(4:end)); disp(stdT)

STATISTICHE DESCRITTIVE PER SOTTOGRUPPI DI UNITA’ disp(grpstats(X(:,[variabili su cui calcolare le statistiche descrittive]),{‘nome variabile di raggruppamento’},{‘mean’ ‘max’ ‘min’ ‘std’}) CAMPIONE CASUALE rng(3434)fisso un punto indicidaestrarre=randsample(1500,30,false)30 numeri che vanno da 1 a 1500 senza ripetizioni Ycamp=Y(indicidaestrarre) disp(Ycamp) GRAFICI UNIVARIATI subplot(3,2,1)suddivide la finestra in 3 righe e 2 colonne e 1 indica il pannello del grafico bar(X{:,1}) set(gca,’xticklabel’,X.Properties.RowNames’) title(‘grafico a barre verticali’) DISTRIBUZIONE DI FREQUENZE E TABELLA A DOPPIA ENTRATA -creazione distribuzione di frequenze e delle etichette Retrclassi=cell(length(retr),1) Eti=({‘2200’}) Freq=zeros(5,1) Boo=retr=1000 & retr2.6)/nsimul; pvalTeoricoH1bil=tcdf(abs(-2.6),n-2,'upper')*2; -ipotesi alternativa unilaterale destra H_1 rho>0 pvalEmpiricoH1dx=sum(Test>-2.6)/nsimul; pvalTeoricoH1dx=tcdf(-2.6,n-2,'upper'); -ipotesi alternativa unlaterale destra H_1 rho0.95^p -correlazione tra le variabili e le prime 2CP Matrcomp=Coeff(:,1:2).*sqrt(latent(1:2)’) disp(array2table(-Matrcomp(:,1),’rowNames’,colnam,’VariableNames’, {‘corr_withPC1’})) disp(array2table(-Matrcomp(:,1),’rowNames’,colnam,’VariableNames’,{ ‘corr_withPC1’ , ‘corr_withPC2’}))

-comunalità disp(array2table(sum(Matrcomp.^2,2),’RowNames’,Colnam,’VariableNames’, {‘Comun’}))

-rappresentare punti riga come le CP standardizzate Matrcomp(:,1)= -Matrcomp(:,1) Score(:,1)= -Score(:,1) Puntiriga=zscore(Score) Figure plot(Puntiriga(:,1),Puntiriga(:,2),’o’) text(Puntiriga(:,1),Puntiriga(:,2),Xtable,Properties.RowNames) hold on Punticolonna=Matrcomp Zeroes=zeros(p,1) quiver(zeroes,zeroes,Punticolonna(:,1),Punticolonna(:,2)) varlabs=Xtable.Properties.VariableNames dx=0; dy=0; text(Punticolonna(:,1)+dx,Punticolonna(:,2)+dy,varlabs,’Color’,’black’) -aggiungo gli assi tramite la funzione line -biplot tramite svd [U,Gammastar,V]=svd(Z,’econ’) sqn1=sqrt(n-1) Gamma=Gmmastar/sqn1 Omega=1; alpha=0; Puntirigasvd=sqn1^omega*U(:,1:2)*Gama(1:2,1:2)^alpha) Punticolonnasvd=V(:,1:2)*Gamma(1:2,1:2)^(1-alpha))*sqn1^(1-alpha) plot(Puntirigasvd(:,1),Puntirigasvd(:,2),’o’) text(Puntirigasvd(:,1),Puntirigasvd(:,2),Xtable.Properties.RowNames) Zeroes=zeros(p,1) quiver(zeroes,zeroes,Punticolonnasvd(:,1),Punticolonnasvd(:,2)) varlabs=Xtable.Properties.VariableNames dx=0; dy=0; text(Punticolonna(:,1)+dx,Punticolonna(:,2)+dy,varlabs,’Color’,’black’) -aggiungo gli assi tramite la funzione line commentare angoli title(‘biplot costruito tramite la svd’) -verifico che i unti riga (Z*V*\Lambda^(-1/2) sono uguali a quelli tramite svd disp(‘controllo sui punti riga trovati con i due metodi’) max(abs(Puntiriga(:,1:2)-Puntirigasvd,[],’all’) - verifico che i unti riga (V*\Lambda^(-1/2) sono uguali a quelli tramite svd max(abs((Punticolonna(:,1:2)-Punticolonnasvd,[],’all’) -applico la cluster analysis kmedie sui 3 gruppi [idx,C]=kmeans(Z,3,’Replicates’,100) spmplot(X,idx)

-centroidi dei 3 gruppi disp(‘centroidi in forma di scostamenti standardizzati’) disp(C) disp(‘centroidi in termini di dati originari’) disp(C.*Sigma+mu) centroidiproiettati=C*V(:,.1:2)*(sqn1^(omega-1))*Gamma(1:2,1:2)^(alpha-1) plot(centroidiproiettati(:,1),centroidiproietati(:,2),’k+’) sc=size(C,1) centrlabels=[repmat(‘C’,sc,1) num2str((1:sc)’)] text(centroidiproiettati(:,1),centroidiproietati(:,2)+0.04,centrlabels) -calcolo distanza euclidea e mahalanobis dal centroide generale mu=mean(X) dmahalnobis=zeros(n,1) deuclidea=dmhalanobis invSIgma=inv(cov(X)) for i=1:n dmahalanobis(i)=sqrt((X(i,:)-mu)*invSigma*(X(i,:)-mu)’) deuclidea(i)=sqrt((X(i,:)-mu)*(X(i,:)-mu)’) end figure corr(dmahalnobis,deuclidea,’type’,’spearman’) plot(dmahalanobis,deuclidea,’o’)

PROCEDURA 3 Y=readtable Out=pcaFS(Y) plo=struct; plo.labels=Y.Properties.RowNames spmplot(Y,’plo’,plo,’selunit’,1:n) paralellplot(Y)

ANALISI DELLE CORRISPONDENZE PROCEDURA 1 Creare tabella di contingenza ([N,chi2,pvalchi2,labels]=crosstab) Riordinare le modalità di riga Riordinare le modalità di colonna in modo tale da seguire un ordine specificato Trasformare matrice contenete tabella di contingenza in formato table Calcolare la matrice delle corrispondenze P che contiene le frequenze relative Calcolare vettori r e c che contengono le masse di riga e colonna Costruire le matrici Dr e Dc che contengono i profili medi di colonna e riga sulla diag. princ. Calcolare le matrici dei profili riga e profili colonna Verificare che le masse di colonna sono i profili medi di riga le masse di riga sono i profili medi di colonna 10) Costruire matrice S(scostamenti standardizzati) S=Dr^(-1/2)*(P-r*c’)*Dc^(-1/2) 11) Partendo dalla matrice S calcolare l’inerzia totale discutendo la relazione con l’indice di Cramer

1) 2) 3) 4) 5) 6) 7) 8) 9)

12) Mostrare che l’inerzia totale si può ottenere anche con somma ponderata delle distanze di ciascun profilo riga dal profilo medio oppure somma ponderata di ciascun profilo colonna dal profilo medio 13) Scomposizione in valori singolari della matrice S+trovare coordinate punti riga e colonna 14) Giudizio sulla bontà dell’analisi calcolando il contributo della componente i-esima all’inerzia totale 15) Calcolare score di riga e colonna delle prime 3 dimensioni latenti 16) Calcolare i contributi di ogni punto (riga o colonna) all’inerzia della dimensione e i contributi della dimensione all’inerzia dei punti riga e colonna 17) Rappresentare in un di...


Similar Free PDFs