domingo, 20 de abril de 2014

Ejemplo de proc logistic (regresión logística en SAS)

A continuación mostramos un sencillo ejemplo realizado en SAS de regresión logística. El objetivo del post no es realizar una regresión logística exhaustiva dando los pasos estadísticos formales, sino emplear el procedimiento de SAS para regresiones logísticas (proc logistic) para obtener una primera aproximación de la influencia de determinadas variables en un suceso determinado, que en nuestro ejemplo será la probabilidad de compra en base a variables tales como edad, sexo y compras anteriores.

Para empezar, una breve definición de regresión logística:


En estadística, la regresión logística es un tipo de análisis de regresión utilizado para predecir el resultado de una variable categórica (una variable que puede adoptar un número limitado de categorías) en función de las variables independientes o predictoras. Es útil para modelar la probabilidad de un evento ocurriendo como función de otros factores.

Partimos del conjunto de datos creado más abajo, en el que se utilizan las siguientes variables:

sexo: 'H' (hembra), 'V' (varón).
edad: edad.
tipo_edad: edad tramitificada, sólo toma dos valores 'A' (adulto) y 'J' (joven).
compras: número de compras realizadas con anterioridad.
nivel_compras: variable anterior tramificada, sólo toma dos valores 'A' (alto) y 'B' (bajo).
contrata: Indica si se ha comprado o el producto. 1 (realiza compra), 0 (no realiza compra).

El código es el siguiente:

data clientes;
edad=20;sexo = 'V' /* varon */ ;compras = 50; tipo_edad = 'J'; /* joven */ nivel_compras = 'A' /* alto */;  contrata = 1;
output;
edad=21;sexo = 'H' /* hembra */;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;
edad =54;sexo = 'V';compras = 30;tipo_edad = 'A'; /* adulto */ nivel_compras = 'A'; /* alto */ contrata = 1;
output;
edad =25;sexo = 'H';compras = 8;tipo_edad = 'J'; /* joven */ nivel_compras = 'B'; /* bajo */ contrata = 1;
output;
run;

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


Dentro del procedimiento proc logistic se añade la claúsula descending para estudiar la probabilidad del valor 1 (compra), ya que por defecto, en nuestro ejemplo,  nos daría la probabilidad del valor 0.

Sólo incluimos las variables tramificadas en el modelo (sexo, tipo_edad, nivel_compras). La sentencia class indica que son variables que toman valores discretos (no continuos).

En la sentencia model indicamos que queremos obtener la probabilidad de la variable contrata en base a las variables sexo, tipo_edad y nivel_compras.

La salida del modelo trabaja con valores odds. Si p es una probabilidad entonces p/(1 − p) es el correspondiente odds. Concretamente el modelo trabaja con el logit de p, que es el log(p/(1-p)).
Teniendo en cuenta que trabajamos con una regresión lineal tenedremos en la salida algo de este tipo:

  log[p/(1-p)] = b0 + b1*sexo + b2*tipo_edad + b3 *nivel_compras


El objetivo del ejemplo es simplemente ver el efecto positivo o negativo en la probabilidad de compra de las variables de estudio, lo cual queda reflejado en el valor de los coeficientes b1, b2 y b3.

Para obtenerlos nos fijamos en el output del procedimiento, concretamente en el apartado ' Analysis of Maximum Likelihood Estimates'.

  
Parameter
DF
Estimate
Intercept
1
7.6828
sexo
H
1
7.2866
tipo_edad
A
1
-0.8052
nivel_compras
A
1
8.0919


En el cuadro anterior vemos que el sexo = 'H' (hembra), tiene un efecto positivo sobre la probabilidad de compra, de forma similar la variable nivel_compras = 'A' (nivel de compras anteriores alto), tiene también un efecto positivo sobre la probabilidad, sin embargo el tipo_edad = 'A' (adulto) tiene un efecto negativo sobre la probabilidad.

Lógicamente el resultado del post es simplemente una primera aproximación y un análisis más detallado requeriría de un mayor trabajo de inspección sobre los datos de entrada (los del ejemplo son sólo una muestra que no tendría volumen suficiente), comprobar la bondad del ajuste y realizar análisis conjuntos e individualizados de las variables, así como comparaciones de probabilidad entre distintos valores de una variable determinada.


  Formación SAS

No hay comentarios:

Publicar un comentario