• Non ci sono risultati.

VERIFICA D’IPOTESI DI “COERENZA”

4.7 Implementazione in SAS

4.7.3 Graduatoria ottenuta con la media

Si calcola la media di ogni riga della matrice iniziale X e si applica il metodo dei ranghi. Così facendo si ottiene la classifica finale.

proc iml;

-si utilizza il data set ncasuale dei dati creati-

use ncasuale;

-si definisce x la matrice kxn del data set ncasuale-

read all var _num_ into x;

-si utilizza il data set w (nx1) dei pesi-

use &w;

read all var _num_ into y;

-si calcola la somma di ogni riga della matrice del data set ncasuale-

m=(x*y);

quit; run;

data media; set med;

-si calcola la media aritmetica di ogni elemento della colonna Col1- classifica=(COL1)/(&n);

-si crea il data set medie prendendo solo la colonna classifica- data medie;

set media(keep = classifica);

-si applicano i ranghi al vettore delle medie - proc rank data=medie ties=high out=rankm; run;

4.7.4 Indice IS per l’NPC ranking

Per calcolare l’indice di Spearman IS:

IS= ) 1 ( * ) ( * 3 2 1 2

'

= k k k i i i

R

R

occorre confrontare il vettore della media di riferimento(&u) con il vettore ottenuto con l’NPC ranking di graduatorie ( rank1) :

proc iml;

-si richiama il vettore della media di riferimento e si definisce x - use &u;

read all var _num_ into x;

use rank1;

read all var _num_ into y;

-si calcola la differenza per riga degli elementi dei 2 vettori-

s=(y-x);

-si crea il data set s2 formato dal vettore delle differenze- create s2 from s;

append from s; quit;

run; proc iml;

- si richiama il data set s2 e lo si definisce x-

use s2;

read all var _num_ into x;

-si definisce il vettore x come dif2- dif2=x;

-si crea una matrice kx1 di tutti 0- quadr2=j(&k,1,0);

-si inizialiazza un ciclo for- do i=1 to &k;

-si sostituisce agli 0 della matrice quadr2 il quadrato delle differenze- quadr2[i,1]=dif2[i]*dif2[i];

end;

-si crea il data set dquad2 formato dal vettore con le differenze al quadrato-

create dquad2 from quadr2; append from quadr2;

quit; run; proc iml;

-si utilizza il data set dquad2 e lo si definisce q2 -

use dquad2;

sommap=3*sum(q2);

-si crea il data set s2a contenente il numeratore di Speraman- create s2a from sommap;

append from sommap; quit;

run;

-si definisce un nuovo data set sp2- data sp2;

set s2a;

-calcolo finale dell’indice di Spearman-

Spp=(COL1/(&k*(&k*&k-1))); data spearmanp;

set sp2(keep =Spp);

-si stampa il valore ottenuto dall’indice di Spearman- proc print data=spearmanp;

run;

4.7.5 Indice IS per la media

L’indice di Spearman IS viene calcolato confrontando il vettore della media di

riferimento (&u) con il vettore ottenuto con la media aritmetica (rankm):

IS= ) 1 ( * ) ( * 3 2 1 2

'

= k k k i i i

R

R

proc iml;

-si richiama il vettore della media di riferimento chiamandolo x- use &u;

-si richiama il vettore della classifica finale ottenuto con il metodo della media

chiamandolo y-

use rankm;

read all var _num_ into y;

-si calcola la differenza per riga degli elementi dei 2 vettori-

s=(y-x);

-si crea il data set s1 formato dal vettore delle differenze- create s1 from s; append from s; quit; run; proc iml; use s1;

read all var _num_ into x;

-si definisce il vettore x come dif1- dif=x;

-si crea una matrice kx1 di tutti 0- quadr=j(&k,1,0);

-si inizializza il ciclo for-

do i=1 to &k;

-si sostituisce agli 0 della matrice il quadrato delle differenze- quadr[i,1]=dif[i]*dif[i];

-chiudiamo il ciclo- end;

-si crea il data set dquad formato dal vettore con le differenze al quadrato-

create dquad from quadr; append from quadr; quit;

run; proc iml;

read all var _num_ into q1;

-si calcola il numeratore della formula di Spearman- sommam=3*sum(q1);

-si crea il data set s1a contenente il numeratore di Speraman- create s1a from sommam;

append from sommam; quit;

run; data sp1; set s1a;

-calcolo finale dell’indice di Spearman-

Spm=(COL1/(&k*(&k*&k-1))); data spearmanm;

set sp1(keep =Spm);

-si stampa il valore ottenuto dall’indice di Spearman-

proc print data=spearmanm; run;

4.7.6 Indicatore IPG per l’NPC ranking

Si applica la statistica test al vettore della media di riferimento (&u) ed al vettore ottenuto con l’NPC ranking ( rank1):

T({rk (x1)oss,...,rk (xn)oss}) =

[

+ +

]

n j i ij H ij k ij L ij k ij K 1 ) ( * ) ( ) ( * ) ( ) (

-si calcola la matrice K-

o (rk (xi)rif < rk (xj)rif ) e (rk (xi)oss > rk (xj)oss ),

0 altrimenti.

proc iml;

-si utilizza il vettore ottenuto dal metodo delle combinazioni non parametriche di

graduatorie ( rank1) chiamandolo x-

use rank1;

read all var _num_ into x;

-si crea una matrice k-1xk-1 di tutti 0- matp=j(&k-1,&k-1,0);

-si inizializzano due cicli for- do i=1 to &k-1;

do j=i+1 to &k;

-se l’elemento i del vettore x è > dell’elemento j del vettore x si inserisce 1 nella matrice

matp nel posto [i,j-1]-

if x[i]>x[j]

then matp[i,j-1]=1; -chiusura primo ciclo- end;

-chiusura secondo ciclo- end;

-si crea il data set Kp contenente la matrice K di 0 e 1- create Kp from matp;

append from matp; quit;

run;

-si crea la matrice L-

-si richiama il vettore della media di riferimento chiamandolo x- use &u;

read all var _num_ into x;

-si crea una matrice k-1xk-1 di tutti 0- matlp=j(&k-1,&k-1,0);

-si inizializzano due cicli for- do i=1 to &k-1;

do j=i+1 to &k;

-si calcola la distanza in valore assoluto –1 tra gli elementi del vettore x- matlp[i,j-1]=abs(x[i]-x[j])-1;

-chiusura primo ciclo- end;

-chiusura secondo ciclo- end;

-si crea il data set Lp contenente la matrice L - create Lp from matlp;

append from matlp; quit;

run;

-si crea la matrice H-

H (ij) = | rk (xi)oss– rk (xj)oss | - 1

proc iml;

-si utilizza il data set rank1 chiamandolo x- use rank1 ;

read all var _num_ into x;

-si crea una matrice k-1xk-1 di tutti 0- matH=j(&k-1,&k-1,0);

-si inizializzano due cicli for- do i=1 to &k-1;

do j=i+1 to &k;

-si calcola la distanza in valore assoluto –1 tra gli elementi del vettore x- math[i,j-1]=abs(x[i]-x[j])-1;

-chiusura primo ciclo- end;

-chiusura secondo ciclo- end;

-si crea il data set H contenente la matrice H - create H from math;

append from math; quit;

Dopo aver ricavato le matrici K, L e H si calcola la statistica test:

T({rk (x1)oss,...,rk (xn)oss}) =

[

+ +

]

n j i ij H ij k ij L ij k ij K 1 ) ( * ) ( ) ( * ) ( ) ( proc iml;

-si utilizza il data set Kp definendolo x- use Kp;

read all var _num_ into x;

-si utilizza il data set Lp chiamandolo y- use Lp;

read all var _num_ into y;

-si utilizza il data set H chiamandolo z-

use H;

read all var _num_ into z;

-si creano due matrici k-1xk-1 di tutti 0- mat1=j(&k-1,&k-1,0);

mat2=j(&k-1,&k-1,0);

v1=j(1,&k-1,1);

-si inizializzano due cicli for- do i=1 to &k-1;

do j=1 to &k-1;

-si calcola il prodotto dei singoli elementi di x e y e di x e z ed i risultati vengono

inseriti nelle matrici create precedentemente-

mat1[i,j]=x[i,j]*y[i,j]; mat2[i,j]=x[i,j]*z[i,j]; -si chiude il primo ciclo- end;

-si chiude il secondo ciclo- end;

-calcolo della statistica test-

T2=v1*x*v2+v1*mat1*v2+v1*mat2*v2; -si crea il data set Tp2 -

create Tp2 from T2; append from T2; quit;

run;

-si crea un nuovo data set per avere Tp come titolo della col1- data Tp1;

set Tp2; Tp=col1; run;

-si crea il data set Tp formato dalla sola colonna Tp essendo Tp1 formato da 2 colonne

uguali (la prima chiamata col1, la seconda chiamata Tp)-

data Tp;

set Tp1(keep=Tp); run;

IPG = 2 ) 1 ( * 3 ) 1 ( * k2 k k k T proc iml;

-si utilizza il data set Tp chiamandolo x- use Tp;

read all var _num_ into x;

-si calcola la prima parte del denominatore- den=(&k*(&k*&k-1))/3;

-si calcola la seconda parte del denominatore- deno=den-(&k*(&k-1)/2);

-calcolo dell’IPG-

max1=x/deno;

-si crea il data set maxp contenente l’indicatore IPG-

create maxp from max1; append from max1; quit;

4.7.7 Indicatore IPG per la media

Si applica la statistica test al vettore della media di riferimento (&u) ed al vettore ottenuto dalla media aritmetica ( rankm):

T({rk (x1)oss,...,rk (xn)oss}) =

[

+ +

]

n j i ij H ij k ij L ij k ij K 1 ) ( * ) ( ) ( * ) ( ) (

-si calcola la matrice K-

0 altrimenti.

proc iml;

-si utilizza il vettore ottenuto dalla media aritmetica ( rankm) chiamandolo x- use rankm;

read all var _num_ into x;

-si crea una matrice k-1xk-1 di tutti 0- matm=j(&k-1,&k-1,0);

-si inizializzano due cicli for-

do i=1 to &k-1; do j=i+1 to &k;

-se l’elemento i del vettore x è > dell’elemento j del vettore x si inserisce 1 nella matrice

matm nel posto [i,j-1]-

if x[i]>x[j]

then matm[i,j-1]=1; -si chiude il primo ciclo- end;

-si chiude il secondo ciclo-

end;

-si crea il data set Km contenente la matrice K- create Km from matm;

append from matm; quit;

run;

-si calcola la matrice L-

L (ij) = | rk (xi)rif– rk (xj)rif | - 1

proc iml;

use &u;

read all var _num_ into x;

-si crea una matrice k-1xk-1 di tutti 0- matlm=j(&k-1,&k-1,0);

-si inizilizzano due cicli for- do i=1 to &k-1;

do j=i+1 to &k;

-si calcola la distanza in valore assoluto –1 tra gli elementi del vettore x- matlm[i,j-1]=abs(x[i]-x[j])-1;

-si chiude il primo ciclo- end;

-si chiude il secondo ciclo- end;

-si crea il data set Lm contenente la matrice L- create Lm from matlm;

append from matlm; quit;

run;

-si calcola la matrice H-

H (ij) = | rk (xi)oss– rk (xj)oss | - 1

proc iml;

-si utilizza il data set rankm chiamandolo x- use rankm;

read all var _num_ into x;

-si crea una matrice k-1xk-1 di tutti 0- matH=j(&k-1,&k-1,0);

-si inizializzano due cicli for- do i=1 to &k-1;

-si calcola la distanza in valore assoluto –1 tra gli elementi del vettore x- math[i,j-1]=abs(x[i]-x[j])-1;

-si chiude il primo ciclo- end;

-si chiude il secondo ciclo-

end;

-si crea il data set H che contiene la matrice H- create H from math;

append from math; quit;

run;

Dopo aver ricavato le tre matrici si calcola la statistica test:

T({rk (x1)oss,...,rk (xn)oss}) =

[

+ +

]

n j i ij H ij k ij L ij k ij K 1 ) ( * ) ( ) ( * ) ( ) ( proc iml;

-si utilizza il data set Km definendolo x- use Km;

read all var _num_ into x;

-si utilizza il data set Lm definendolo y-

use Lm;

read all var _num_ into y;

-si utilizza il data set H definendolo z- use H;

read all var _num_ into z;

-si creano due matrici k-1xk-1 di tutti 0- mat1=j(&k-1,&k-1,0);

mat2=j(&k-1,&k-1,0);

-si creano due vettori di tutti 1 per poter operare la somma degli elementi all’interno di

v1=j(1,&k-1,1);

-si inizializzano due cicli for- do i=1 to &k-1;

do j=1 to &k-1;

-si calcola il prodotto dei singoli elementi di x e y e di x e z e si inserisce nelle matrici

create precedentemente-

mat1[i,j]=x[i,j]*y[i,j]; mat2[i,j]=x[i,j]*z[i,j]; -si chiude il primo ciclo- end;

-si chiude il secondo ciclo- end;

-calcolo della statistica test-

T2=v1*x*v2+v1*mat1*v2+v1*mat2*v2; -si crea il data set Tm2 -

create Tm2 from T2; append from T2; quit;

run;

-si crea un nuovo data set per avere Tm come titolo della col1- data Tm1;

set Tm2; Tm=col1; run;

-si crea il data set Tm formato dalla sola colonna Tm essendo Tm1 a sua volta formato

da 2 colonne uguali (la prima chiamata col1, la seconda chiamata Tm)-

data Tm;

set Tm1(keep=Tm); run;

IPG = 2 ) 1 ( * 3 ) 1 ( * k2 k k k T proc iml;

-si utilizza il data set Tm chiamandolo x- use Tm;

read all var _num_ into x;

-si calcola la prima parte del denominatore- den=(&k*(&k*&k-1))/3;

-si calcola la seconda parte del denominatore- deno=den-(&k*(&k-1)/2);

-calcolo dell’IPG-

max1=x/deno;

-si crea il data set maxm contenente l’indicatore IPG-

create maxm from max1; append from max1; quit;

run;