% Alberto Lusoli % Regressione Multipls % Dataset "CPU Performance" % Prima di eseguire il file necessario importare il dataset. % Preparazione dei dati prest=data(:,7); % vettore colonna variabile dipendente spec=data(:,(1:6)); % preparo la matrice delle spec_ott=ones(209,7); % variabili indipendenti includendo spec_ott(:,(2:7))=spec(:,(1:6)); % una colonna di 1 for i=1:6 results = ols(prest,spec_ott(:,1:i+1));% calcolo il coeff. r2_jpvl(i)=results.rsqr; % di determinazione aggiungendo r2_corretto(i)=results.rbar; % una variabile alla volta end r2_jpvl r2_corretto figure('Name','Andamento R2, Residui e Outliers') subplot(4,1,1) plot(r2_jpvl,'b+'); % disegno il grafico dll'andamento di r2 title('Andamento R2 e R2 corretto') hold plot(r2_corretto,'rx'); % alla quale sovrappongo quello di r2 subplot(4,1,2) % corretto prt(results) % visualizzo coefficienti e significativit spec_fin=zeros(209,6); spec_fin(:,(1:5))=spec_ott(:,(1:5)); % elimino la variabile 6 non significativa spec_fin(:,6)=spec_ott(:,7); clear spec_ott; clear r2_jpvl; % azzero le variabili r2_jpvl e r2_corretto clear r2_corretto; spec_ott=spec_fin; for i=1:5 results = ols(prest,spec_ott(:,1:i+1)); % ricalcolo il coeff. r2_jpvl(i)=results.rsqr; % di determinazione del modello corretto aggiungendo r2_corretto(i)=results.rbar; % una variabile alla volta end r2_jpvl r2_corretto prt(results) % visualizzo nuovi coefficienti e significativit subplot(4,1,2) plot(r2_jpvl,'b+'); % disegno il grafico dll'andamento di r2 title('Andamento R2 e R2 corretto nel modello finale') hold plot(r2_corretto,'rx'); % alla quale sovrappongo quello di r2 corretto subplot(4,1,3) plot(results.resid,'o'); % grafico dei residui title('Dispersione residui') [b,bint,r,rint,stats] = regress(prest,spec_ott); % con regress ottengo il valore dellla statistica f stats subplot(4,1,4) rcoplot(r,rint) % visualizzo osservazioni outliers title('Outliers') figure('Name','Grafici andamento reale Vs stimato') plt(results) % grafico andamento valori reali e valori stimati lillie=lillietest(r) % primo test di normalit jarque = jbtest(r) % secondo test di normalit jarquelog = jbtest(log(r)) % trasformazione logaritmica dei residui per normalit figure('Name','Grafici analisi residui') subplot(3,2,1) hist(r) % istogramma distribuzione residui title('Distribuzione residui') subplot(3,2,2) hist(log(r)) % istogramma distribuzione logaritmi dei residui title('Distribuzione logaritmo residui') subplot(3,2,3) normplot(r) % evidenzio non normalit dei risidui specnuovo=spec_ott(:,(2:6)); for i=1:5 % multicollineait, calcolo r2 parziale spec_parz=specnuovo; spec_parz(:,i)=1; % nella matrice delle variabilli indipendenti sostituisco uns vsriabile results = ols(specnuovo(:,i),spec_parz);% con uns colonns di 1. Ls variabile eliminata dalla vif(i)= 1/(1-results.rbar); % matrice viene messa in un vettore end % e si esegue la regressione tra vettore e matrice vif res2=r.*r; % calcolo RSS per l'intera regressione. elevo al quadrato i residui RSS_tot=0; for m=1:209 RSS_tot=RSS_tot+res2(m,1); % eseguo la somma e ottengo il totale end [b_c1,bint_c1,r_c1,rint_c1,stats_c1] = regress(prest((1:104),:),spec_ott((1:104),:)); % regressione primo sotto periodo RSS_c1=0; res2_c1=r_c1.*r_c1; % elevo al quadrato i residui del primo sottoperiodo for m=1:104 RSS_c1=RSS_c1+res2_c1(m,1); % eseguo la somma e ottengo il totale end [b_c2,bint_c2,r_c2,rint_c2,stats_c2] = regress(prest((105:209),:),spec_ott((105:209),:)); %regressione secondo sotto periodo RSS_c2=0; res2_c2=r_c2.*r_c2; % elevo al quadrato i residui del secondo sottoperiodo for m=1:105 RSS_c2=RSS_c2+res2_c2(m,1); % eseguo la somma e ottengo il totale end RSS_tot RSS_c1 RSS_c2 chow=(RSS_tot-(RSS_c1+RSS_c2))/(RSS_c1+RSS_c2)*((209-12)/5) P_chow= finv(0.95,5,197) % trovo il il valore limite per chow. Se chow > P_chow rifiuto l'ipotesi di stabilit dei parametri