Prueba de Permutación (Aleatorización) para la comparación de medias

Este código también está disponible en: Deutsch English Français
Nivel de dificultad
Principiante
Publicado el :
Este script realiza una prueba de aleatorización (prueba de permutación) para evaluar la diferencia de edad entre los empleados despedidos (Fired) y no despedidos. Primero, calcula la diferencia observada mediante PROC TTEST. Luego, utiliza PROC IML para generar 1000 permutaciones aleatorias de los datos. Estos conjuntos de datos permutados son analizados masivamente por PROC TTEST para construir la distribución nula de la diferencia de las medias. Finalmente, se estima un p-valor empírico comparando la estadística observada con la distribución generada.
Análisis de datos

Type : CREATION_INTERNE


Los datos se crean directamente en el script mediante un paso DATA con la instrucción DATALINES (variables Status y Age).

1 Bloque de código
DATA STEP Data
Explicación :
Creación del conjunto de datos inicial 'discriminate' que contiene el estado y la edad de los individuos a través de datos internos (datalines).
¡Copiado!
1DATA discriminate;
2 INPUT STATUS Age;
3 
4/* Status = 0 = Fired
5 Status = 1 = Not Fired */
6 
7DATALINES;
80 34
90 37
10...
111 54
12;
13RUN;
2 Bloque de código
PROC TTEST
Explicación :
Ejecución de la prueba T de Student sobre los datos reales para obtener la diferencia de media observada (referencia).
¡Copiado!
1PROC TTEST DATA=discriminate;
2 class STATUS;
3 *may need to convert School to numeric;
4 var Age;
5RUN;
3 Bloque de código
PROC IML Data
Explicación :
Uso del lenguaje matricial IML para generar 1000 permutaciones aleatorias de la variable 'Age'. Creación de una tabla ancha 'newds' donde la primera columna es el estado y las siguientes son las permutaciones.
¡Copiado!
1ods OUTPUT off;
2ods exclude all;
3PROC IML ;
4 use discriminate;
5 read all var{STATUS Age} into x;
6 p=t(ranperm(x[, 2], 1000));
7 paf=x[, 1]||p;
8 create newds from paf;
9 append from paf;
10 QUIT;
4 Bloque de código
PROC TTEST Data
Explicación :
Ejecución masiva de pruebas T sobre las 1000 columnas permutadas (col2 a col1001) contra el estado (col1). Las salidas ODS se suprimen por rendimiento, excepto la tabla 'conflimits' que se guarda en 'diff'.
¡Copiado!
1ods OUTPUT conflimits=diff;
2 
3PROC TTEST DATA=newds plots=none;
4 class col1;
5 var col2 - col1001;
6RUN;
7 
8ods OUTPUT on;
9ods exclude none;
5 Bloque de código
PROC UNIVARIATE
Explicación :
Análisis de la distribución de las diferencias de medias generadas aleatoriamente (método Pooled) y visualización de un histograma.
¡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 :
Filtrado de los resultados para contar cuántas permutaciones produjeron una diferencia absoluta mayor o igual al valor observado (aquí codificado a 1.9238, que debería corresponder al resultado del primer PROC TTEST).
¡Copiado!
1DATA numdiffs;
2 SET diff;
3 where method="Pooled";
4 
5 IF abs(mean) >=1.9238;
6RUN;
7 Bloque de código
PROC PRINT
Explicación :
Visualización de las permutaciones extremas para permitir el cálculo manual del p-valor (número de observaciones extremas / 1000).
¡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.
Información de copyright : Mención 'borrowed code from internet' presente en los comentarios.


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.