El script primero crea un conjunto de datos manual. Calcula la diferencia de media observada a través de un PROC TTEST clásico. Luego, utiliza PROC IML para generar 1000 permutaciones de la variable respuesta ('Money') mientras mantiene fijos los grupos ('School'). Estas permutaciones son analizadas masivamente por PROC TTEST para generar una distribución nula de las diferencias de medias. Finalmente, el script compara la diferencia observada con esta distribución para estimar un p-valor empírico.
Análisis de datos
Type : CREATION_INTERNE
Los datos se definen directamente en el código a través de un Paso DATA que utiliza DATALINES (variables School y Money).
1 Bloque de código
DATA STEP Data
Explicación : Creación del conjunto de datos 'cash' que contiene las observaciones para dos escuelas (School 0 y 1) y los montos asociados.
Explicación : Ejecución del t-test inicial sobre los datos reales para obtener la estadística observada (la diferencia de media real).
¡Copiado!
proc ttest data=cash;
class School;
*may need to convert School to numeric;
var Money;
run;
1
PROC TTESTDATA=cash;
2
class School;
3
*may need to convert School to numeric;
4
var Money;
5
RUN;
3 Bloque de código
PROC IML Data
Explicación : Uso del lenguaje matricial IML para leer los datos, generar 1000 permutaciones aleatorias de la columna 'Money' (función ranperm) y guardar el resultado en una tabla ancha 'newds'. Las salidas ODS están deshabilitadas para mejorar el rendimiento.
¡Copiado!
ods output off;
ods exclude all;
*borrowed code from internet ... randomizes observations and creates a matrix ... one row per randomization ;
proc iml ;
use cash;
read all var{School Money} into x;
*change varibale names here ... make sure it is class then var ... in that order.;
p=t(ranperm(x[, 2], 1000));
*Note that the "1000" here is the number of permutations. ;
paf=x[, 1]||p;
create newds from paf;
append from paf;
quit;
*calculates differences and creates a histogram;
ods output conflimits=diff;
1
ods OUTPUT off;
2
ods exclude all;
3
*borrowed code from internet ... randomizes observations and creates a matrix ... one row per randomization ;
4
5
PROC IML ;
6
use cash;
7
read all var{School Money} into x;
8
*change varibale names here ... make sure it is class then var ... in that order.;
9
p=t(ranperm(x[, 2], 1000));
10
*Note that the "1000" here is the number of permutations. ;
11
paf=x[, 1]||p;
12
create newds from paf;
13
append from paf;
14
QUIT;
15
*calculates differences and creates a histogram;
16
ods OUTPUT conflimits=diff;
4 Bloque de código
PROC TTEST Data
Explicación : Ejecución masiva de t-tests en las 1000 columnas permutadas. La tabla 'newds' contiene la clase en col1 y las permutaciones en col2-col1001. Los resultados (límites de confianza/diferencias) se capturan en la tabla 'diff' a través del 'ods output conflimits=diff' declarado anteriormente.
¡Copiado!
proc ttest data=newds plots=none;
class col1;
var col2 - col1001;
run;
ods output on;
ods exclude none;
1
PROC TTESTDATA=newds plots=none;
2
class col1;
3
var col2 - col1001;
4
RUN;
5
6
ods OUTPUT on;
7
ods exclude none;
5 Bloque de código
PROC UNIVARIATE
Explicación : Análisis de la distribución de las diferencias de medias simuladas (almacenadas en la variable 'mean' de la tabla 'diff') para visualizar la distribución nula.
¡Copiado!
proc univariate data=diff;
where method="Pooled";
var mean;
histogram mean;
run;
1
PROC UNIVARIATEDATA=diff;
2
where method="Pooled";
3
var mean;
4
histogram mean;
5
RUN;
6 Bloque de código
DATA STEP Data
Explicación : Cálculo del p-valor empírico: se filtran las iteraciones donde la diferencia simulada (en valor absoluto) es mayor o igual a la diferencia realmente observada (codificada aquí como 114.6).
¡Copiado!
data numdiffs;
set diff;
where method="Pooled";
if abs(mean) >=114.6;
*if abs(mean) >=44.0667;
*you will need to put the observed difference you got from t test above here. note if you have a one or two tailed test.;
run;
1
DATA numdiffs;
2
SET diff;
3
where method="Pooled";
4
5
IF abs(mean) >=114.6;
6
*if abs(mean) >=44.0667;
7
*you will need to put the observed difference you got from t test above here. note IF you have a one or two tailed test.;
8
RUN;
7 Bloque de código
PROC PRINT
Explicación : Visualización de los casos extremos identificados para verificación.
¡Copiado!
proc print data=numdiffs;
where method="Pooled";
run;
1
2
PROC PRINT
3
DATA=numdiffs;
4
where method="Pooled";
5
RUN;
6
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.