Publicado el :
Général CREATION_INTERNE

Sans titre

Este código también está disponible en: Deutsch English Français
En espera de validación
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.
¡Copiado!
1DATA cash;
2 INPUT School Money;
3 
4/* School = 0 = SMU
5 School = 1 = Seattle U */
6 
7DATALINES;
80 34
90 1200
100 23
110 50
120 60
130 50
140 0
150 0
160 30
170 89
180 0
190 300
200 400
210 20
220 10
230 0
241 20
251 10
261 5
271 0
281 30
291 50
301 0
311 100
321 110
331 0
341 40
351 10
361 3
371 0
38;
2 Bloque de código
PROC TTEST
Explicación :
Ejecución del t-test inicial sobre los datos reales para obtener la estadística observada (la diferencia de media real).
¡Copiado!
1PROC TTEST DATA=cash;
2 class School;
3 *may need to convert School to numeric;
4 var Money;
5RUN;
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!
1ods OUTPUT off;
2ods exclude all;
3*borrowed code from internet ... randomizes observations and creates a matrix ... one row per randomization ;
4 
5PROC 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!
1PROC TTEST DATA=newds plots=none;
2 class col1;
3 var col2 - col1001;
4RUN;
5 
6ods OUTPUT on;
7ods 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!
1PROC UNIVARIATE DATA=diff;
2 where method="Pooled";
3 var mean;
4 histogram mean;
5RUN;
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!
1DATA 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.;
8RUN;
7 Bloque de código
PROC PRINT
Explicación :
Visualización de los casos extremos identificados para verificación.
¡Copiado!
1 
2PROC PRINT
3DATA=numdiffs;
4where method="Pooled";
5RUN;
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.