Test de Levene con SAS

7 May

El Test de Levene se aplica para la igualdad de varianzas. Es un análisis de la varianza de las desviaciones de los valores muestrales respecto a una medida de tenedencia central. Parte de la hipótesis nula de igualdad de varianzas. Para realizar este test en SAS emplearemos el PROC GLM en combinación con la opción HOVtest. En la línea habitual vemos un ejemplo:


data datos;
 input presion @@;
 if _n_<=5 then grupo=1;
 else if _n_<=10 then grupo=2;
 else if _n_<=15 then grupo=3;
 else if _n_<=20 then grupo=4;
 else grupo=5;
cards;
180 172 163 158 147 173 158 170
146 152 175 167 158 160 143 182
160 162 171 155 181 175 170 155 160
;
run;
 Proc GLM Data=datos ;
  Class grupo;
  Model presion = grupo;
  Means grupo/HOVTest;
  ODS select HOVFTest;
 Quit;

Vemos que se trata de un código sencillo donde modelizamos con GLM la variable dependiente con la variable grupo y en MEANS indicamos con HOVtest que deseamos que se realice el test de Levene, con ODS seleccionamos sólo esa salida. Este código podemos parametrizarlo y crear una macro que nos permita replicar el código:

%Macro Levene(datos,grupo,variable);
Proc GLM Data=&datos ;
Class &grupo;
Model &variable=&grupo;
Means &grupo/HOVTest;
ODS select HOVFTest;
Quit;
%Mend Levene;
%levene(datos,grupo,presion);

Espero que sea de vuestra utilidad. Saludos.

8 respuestas a «Test de Levene con SAS»

  1. Hola Raúl,

    Suelo leer ti blog, q me resulta de bastante utilidad.
    Estoy intentando aprender el uso del el procedimiento de regresión logística en SAS. Tengo una duda sencilla:

    He hecho una prueba con un datasets sencillo en el que la variable contrata marca si ha contratado un producto determinado de cosmética o no. Las variables de las que depende esta compra son sexo, edad y compras en los datos que introduzco se ve claremente que las mujeres jóvenes que han comprado un número de otros productos e cosmética (no el del estudio) alto (variable compras) son más proclives a comprar, pero no acabo de ver esta evidencia en el resumen que saca SAS. ¿En qué parámetros debo fijarme de la salida que da SAS?, ¿está correcta la llama a el procedimiento regresión logística?.

    Incluyo abajo todos los datos.

    Muchas gracias, un saludo,

    /* Contrata dice si se ha contratado un producto.
    Los datos muestran que los q han contratado el producto,son mujeres, jóvenes y que han comprado ya otros productos */
    /* La variable contrata indica si se ha contratado o no */

    data clientes;
    edad=20;
    sexo = ‘H’; /* hembra */
    compras = 50;
    contrata = 1;
    output;
    edad=21;
    sexo = ‘H’;
    compras = 60;
    contrata = 1;
    output;
    edad=23;
    sexo = ‘H’;
    compras = 45;
    contrata = 1;
    output;
    edad=59;
    sexo = ‘V’; /* varon */
    compras = 5;
    contrata = 0;
    output;
    edad =64;
    sexo = ‘V’;
    compras = 10;
    contrata = 0;
    output;
    edad =61;
    sexo = ‘V’;
    compras = 7;
    contrata = 0;
    output;
    run;

    proc logistic data=clientes outmodel=model1;
    class sexo;
    model contrata=edad sexo compras;
    quit;

    Salida del proc logistic:

    The SAS System 22:20 Tuesday, February 14, 2012 9

    The LOGISTIC Procedure

    Model Information

    Data Set WORK.CLIENTES
    Response Variable contrata
    Number of Response Levels 2
    Model binary logit
    Optimization Technique Fisher’s scoring

    Number of Observations Read 6
    Number of Observations Used 6

    Response Profile

    Ordered Total
    Value contrata Frequency

    1 0 3
    2 1 3

    Probability modeled is contrata=0.

    Class Level Information

    Design
    Class Value Variables

    sexo H 1
    V -1

    Model Convergence Status

    Complete separation of data points detected.

    WARNING: The maximum likelihood estimate does not exist.
    WARNING: The LOGISTIC procedure continues in spite of the above warning. Results shown are based on the last maximum
    likelihood iteration. Validity of the model fit is questionable.

    Model Fit Statistics

    Intercept
    Intercept and
    Criterion Only Covariates

    AIC 10.318 8.001
    SC 10.110 7.168
    -2 Log L 8.318 0.001

    Testing Global Null Hypothesis: BETA=0

    Test Chi-Square DF Pr > ChiSq

    Likelihood Ratio 8.3166 3 0.0399
    Score 6.0000 3 0.1116
    Wald 0.0512 3 0.9970

  2. Hola Jorge,

    Para ayudarte a comprender mejor los resultados de una logística puedes emplear la estimación de los parámetros. Para ello te recomiendo que tramifiques tus variables independientes.

    La ecuación de tu modelo será a grandes rasgos Estimación = intercept + B1·sexo + B2·edad1 +B3·edad2 + B4·compra1 + B5·compra2 Cuando no tienes parámetros es porque multiplicas por 0. De este modo cuanto mayor sea tu parámetro en valor absoluto más influirá en tu estimación. Si es positivo influye positivamente y si es negativo más disminuye la probabilidad de que se cumpla el evento. Con tu ejemplo:

    proc logistic data=clientes outmodel=model1;
    class sexo;
    model contrata = sexo;
    quit;

    Sólo modelizamos el sexo, para no liarnos a tramear el resto de variables. Entre las salidas obtenemos la estimación por máxima verosimilitud:

    Analysis of Maximum Likelihood Estimates
    Parameter DF Estimate Standard
    Error Wald
    Chi-Square Pr > ChiSq
    Intercept 1 9.52E-18 40.6740 0.0000 1.0000
    sexo H 1 -9.2027 40.6740 0.0512 0.8210

    Es decir, si eres hombre tienes una menor probabilidad de contratar porque el parámetro es negativo. Espero que te ayude.

    Sin quererlo te has adelantado a la siguiente entrega de esta entrada con el proc genmod.

  3. Hola Raul,

    Le ha dado otra vuelta a los datos.
    Tipificando en niveles cada variables (dicotómicas).

    data clientes;
    edad=20;
    sexo = ‘H’;
    compras = 50;
    tipo_edad = ‘J’; /* joven */
    nivel_compras = ‘A’; /* alto */
    contrata = 1;
    output;
    edad=21;
    sexo = ‘H’;
    compras = 60;
    tipo_edad = ‘J’; /* joven */
    nivel_compras = ‘A’; /* alto */
    contrata = 1;
    output;
    edad=23;
    sexo = ‘H’;
    compras = 45;
    tipo_edad = ‘J’; /* joven */
    nivel_compras = ‘A’; /* alto */
    contrata = 1;
    output;
    edad=59;
    sexo = ‘V’;
    compras = 5;
    tipo_edad = ‘A’; /* adulto */
    nivel_compras = ‘B’; /* bajo */
    contrata = 0;
    output;
    edad =64;
    sexo = ‘V’;
    compras = 10;
    tipo_edad = ‘A’; /* adulto */
    nivel_compras = ‘B’; /* bajo */
    contrata = 0;
    output;
    edad =61;
    sexo = ‘V’;
    compras = 7;
    tipo_edad = ‘A’; /* adulto */
    nivel_compras = ‘B’; /* bajo */
    contrata = 0;
    output;
    run;

    proc logistic data=clientes outmodel=model1;
    class sexo tipo_edad nivel_compras;
    model contrata=sexo tipo_edad nivel_compras;
    quit;

    No entiendo bien los resultados obtenidos en el caso nivel_compra = ‘A’, sale un parámetro con valor 0, cuando yo esperaba un parámetro positivo.

    Analysis of Maximum Likelihood Estimates

    Standard Wald
    Parameter DF Estimate Error Chi-Square Pr > ChiSq

    Intercept 1 8.84E-17 40.6740 0.0000 1.0000
    sexo H 1 -9.2027 40.6740 0.0512 0.8210
    tipo_edad A 0 0 . . .
    nivel_compras A 0 0 . . .

    Por otra parte, ¿por qué no muestra parámetros estaimados para el otros posible valor de la variable?.

    Un saludo, gracias,

  4. Jorge, parámetro 0 implica que es un nivel base. En el ejemplo del sexo:

    Sexo=V parámetro 0 exp(0)=1
    Sexo=H parámetro -9.2 exp(-9.2)=0.0001

    luego si sexo=H se incrementa tu probabilidad de compra. El ejemplo es muy burdo y por eso el resultado no se puede extrapolar, pero es como debes interpretar el parámetro.

  5. Estimado Raul,
    estoy con un problemita con el SAS. Hice un ensayo con animales en donde medi el consumo de alimento durante 30 dias. Estoy armando el modelo en el SAS como medidas repetidas en el tiempo pero quiero usar como covariable el peso de los animales. La pregunta es al peso lo debo incluir en class o directamente lo escribo en el modelo o en ambos??.
    Muchas gracias,

  6. Hola Raul,
    tengo una pregunta sobre el SAS, estoy haciendo mi tesis en tecnología de alimentos y el estudio que hice fue mejorar el yogurt. Entonces hice análisis sensoriaal y fisicoquímicos en los dias 1, 15 y 30 con un diseño completamente al azar con 5 tratamientos. Mi pregunta es ¿cómo debo introducir el input al sas?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *