Matlab esercizi PDF

Title Matlab esercizi
Course Organizzazione e sviluppo delle risorse umane
Institution Università telematica Universitas Mercatorum di Roma
Pages 37
File Size 1 MB
File Type PDF
Total Downloads 48
Total Views 138

Summary

esempi di codici...


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=matrice{:,:} 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 ismissing(X)--> 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 ~X--> ~ è 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=’pluto’--> b= ‘topolino’--> {c b}-->

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 []

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

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

save nome--> load nome--> clear--> clc--> format long--> format short--> format bank-->

DESKTOP MANAGEMENT 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)--> 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(:,{‘…’,’…’,’….’})--> [xrig,xcol]=size(x)--> [xMax,idx]-->max(x) matrice flip(X)-->

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 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 ….. 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 calcola il massimo di x e la sua corrispondente posizione nella

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”)--> sum(X,1)--> sum(X,2)-->

somma di tutti gli elementi di X 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 val 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% 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 disp(X)-->

strcat(matrice1,matrice2)--> concatenamento orizzontale di array,cell array, string array sort(X)--> ordina gli elementi in ordine crescente abs(X)--> valore assoluto randn(r,c)--> generatore di numeri casuali ,in questo caso un matrice di r righe e colonne skewness(X)--> indice di asimmetria kurtosis(X)--> indice curtosi di X round(X)--> arrotonda ogni elemento al numero intero più vicino

Y=prctile(X,p)-->

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 categorical(X,valueset)--> crea una categoria per ciascun valore in valueset..per la variabile X crea 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à probabilità in una variabile casuale t di Student con n gradi di libertà di ottenere un valore inferiore a tobs….restituisce la funzione di distribuzione cumulativa della distribuzione t di Student - Se dopo non 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).^2) 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 help plot plot(X)--> grafico a linee plot3(X)--> grafico a linee 3D help area area(X)--> grafico ad 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)--> rappresentazione 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 Y=tcdf(tobs,gdl)-->

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 rosse tratteggiate 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 la dimensione del marker text(matrice (colonne di riferimento),matrice.Properties.RowNames)฀aggiunge le etichette ai punti STANDARDIZZAZIONE DEI DATI Xd=X{:,:} Xdst=zscore(Xd) disp(‘matrice scostamenti standardizzati’) disp(Xdst) -verifica che le colonne hanno media=0 e varianza=1 disp(mean(Xdst)) disp(var(Xdst)) -rappresentazione grafica  dst’) bar(categorical(X.Properties.RowNames),Xdst,’DisplayName’,’X -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 & retrboxplot  sulla diagonale principale spmplot(Xd,’dispopt’, nomi=X.Properties.VariableNames; plo=struct; aggiungo i nomi delle plo.nameY=nomi varibaili spmplot(Xd,’dispopt’,’box’,’plo’,plo FUNZIONE DI DENSITA’ E DI RIPARTIZIONE -funzione densità della v.c. normale N(3,4) x=(….) media=mean(x) varianza=var(x) figure ypdf=normpdf(x,media,varianza);-->funzione di densità della distribuzione normale standard plot(x,ypdf)  ,’ num2str(varianza) ‘)’]) title([‘Funzione di densità:N’ num2str(media) ‘ ylabel(‘f(x)’) figure ycdf=normcdf(x,media,varianza)-->funzione di ripartizione plot(x,cdf) title(([‘Funzione di ripartizione:N’ n  um2str(media) ‘,’  num2str(varianza) ‘)’]) DENSITA’ NORMALE UNIVARIATA implementaizone manuale 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

DENSITA’ NORMALE BIVARIATA Imposto uno slider di rho che va da -1 a 1 seqx=(sequenza di valori da inserire sull’asse x)’

seqy=seqx’-->vettore  riga dens=(1/(2*pi*sqrt(1-rho^2))*exp(-(1/(2*(1-rho^2)))*(seqx.^2+seqy.^2-2*rh o*seqx*seqy)) surf(dens) DISTRIBUZIONE TEST SULL’ASSENZA DI CORRELAZIONE quantili n=dato dal testo nsimul=numero di simulazioni test=zeros(nsimul,1)-->conterrà in posizione i il test sul coeff di correlazione basato sulla simulazione Rall=zeros(nsimul,1)-->conterrà in posizione i il valore del coeff di correlazione per la simulazione For i=1:nsimul X=randn(n,2) R=corr(X) R=R(1,2) Test(i)=(R/sqrt(1-R^2)*sqrt(n-2)) Rall(i)=R end Testsor=sort(Test)-->valori ordinati -calcolo quantili empirici con quelli teorici Empirici=Testsor(round(nsimul*quant)); Teorici=tinv(quant,gdl); plot(Empirici,Teorici,'o') -Pvalue empirici e teorici della distribuzione N(0,1) TeoriciN=norminv(quant); plot(Empirici,TeoriciN)

supponendo di aver estratto un campione casuale bivariato di 10 elementi e che il test sulla correlazione (H_0:\rho=0) sia risultato pari a -2.6. Calcolare il p value empirico e teorico del numero -2.6 in presenza di: -ipotesi alternativa bilaterale H_1 rho≠0 pvalEmpiricoH1bil=sum(abs(Test)>2.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 rhoesclusione   pairwise -matrice di correlazione con le intestazioni Rlistwisetable=array2table(Rlistwise,’RowNames’,….,’VariableNames’,….) In alternativa può essere fatto tramite l’apposita app Clean Missing Data

PROBABILITA’ E QUANTILI -probabilità di ottenere un valore minore di 1.2 disp(‘P(Xse  contiene valori vicini allo zero rifiuto l’ipotesi nulla di assenza di cograduazione tra le diverse coppie di variabili Rtable=array2tabel(R,’RowNames’,….,’VariableNames’,…) Pvaltabe=array2table(Pval,’RowNames’,….,’  VariableNames’,….) disp(Rtable) disp(Pvaltable)

ANALISI DEI DATI MANCANTI E VALORI ESTREMI(boxplot) -conto il numero di missing per ogni colonna nummis=zeros(1,3) nummiss(1)=sum(ismissing(X(:,1))) nummiss(2)=sum(ismissng(X(:,2))) nummiss(3)=sum(ismissing(X:,3))) disp(nummiss)

-implementazione tramite cicli for nummiss1=zeros(3,1)-->numero  valoro mancanti per ogni colonna meas=nummiss1-->medie omettendo i missing values sigmas=meas-->std omettendo i missing values outsup=meas-->outlier superiori outinf=meas-->outlier inferiori for j=1:3 nummiss(j)=sum(ismissing(X) meas(j)=mean(Xj,’omitnan’) sigmas(j)=std(Xj,’omitnan’) perc=prctile(Xj,[25 85]) PTsup=perc(2)+1.5*(perc(2)-perc(1)) PTinf=perc(1)-1.5*(perc(2)-perc(1))) Outsup(j)=sum(Xjsenzamissing>PTsum) Outinf(j)=sum(Xjsenzamissingtrovo il numero di righe della table X percmiss=100*nummiss1/n฀p  ercentuale valori mancanti per ogni colonna -calcolo degli istogrammi e dei boxplot For j=1:3 subplot(2,3,j) Xjsenzamissing=Xj(~ismissing(X)) boxplot(Xjsenzamissing) title(X.Properties.VariableNames(j)) subplot(2,3,j+3) hisotgram(Xjsenzamissing) title(X.Properties.VariableNames(j)) end BOXPLOT Importo la table senza trasformarla Xsel=X(:,{‘…’,’….’,’…’}-->  contiene le variabili classificatorie (es. sesso,titolo di studio ecc..) e la variabile su cui si vuole calcolare la media la media (numerica) Groupstats={‘…’,’…’}--> contiene le variabili classificatorie Xtab=grpstats(Xsel,groupstats,’mean’) boxplot(X.variabile,X.variabilediraggruppamento) concatena=strcat(X.vardiraggruppamento1,X.vardiraggruppamento2) boxplot(X.variabile,concatena)-->fa un boxplot tra la variabile numerica (assey) e le variabili di r...


Similar Free PDFs