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 iR
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 iR
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;