Implementación en SAS del método de Agresti y Caffo

Introducción

El análisis de riesgo en el sector financiero requiere no solo precisión, sino también un dominio sobre las herramientas estadísticas que permitan evaluar y comparar la fiabilidad de los modelos predictivos a lo largo del tiempo. Entre estas herramientas se encuentran los intervalos de confianza, que permiten una interpretación más completa y contextualizada de los resultados en comparación con un simple «sí» o «no» de los contrastes de hipótesis. En la sección de Estadística hemos explicado la estimación estadística por intervalos de confianza para la diferencia de proporciones de Agresti y Caffo, proporcionando una comprensión teórica y práctica de esta herramienta con un ejemplo sencillo.

A continuación, exploraremos cómo implementar este método utilizando el lenguaje de programación SAS, esencial para quienes trabajan con grandes volúmenes de datos financieros. Para aquellos que utilizan SAS fuera de su puesto de trabajo, recomendamos Altair SLCTM como una solución eficaz que facilita la ejecución de análisis estadísticos complejos. Si aún necesitas configurar Altair SLCTM, puedes encontrar una guía detallada para instalarlo de forma gratuita en tu equipo en nuestra sección: Descargar e instalar de forma 100% gratuita Altair SLC

A lo largo de esta exploración, te proporcionamos código SAS listo para usar, diseñado para integrarse sin inconvenientes en tu entorno y permitirte aplicar estos métodos directamente. Sumérgete en el dominio de los intervalos de confianza con nosotros y eleva tus habilidades analíticas al próximo nivel.

Ejemplo Práctico

En el análisis estadístico del sector bancario, es común comparar las tasas de aprobación de préstamos entre diferentes sucursales. Esta comparación nos ayuda a entender mejor el desempeño de cada sucursal y a identificar posibles áreas de mejora. Una forma robusta de realizar esta comparación es mediante la estimación de intervalos de confianza para la diferencia de proporciones.

En este ejemplo, vamos a comprobar si existen diferencias entre las proporciones de aprobación de préstamos de dos sucursales bancarias. Utilizaremos una base de datos simulada con los siguientes datos:

SucursalAprobadoTotal
A400500
B350600
Tabla 1.1: Datos de ejemplo

Puedes descargar la base de datos en formato CSV para utilizarla en tus propios análisis. Haz clic en el siguiente enlace para descargar el archivo:

Importación de datos

Realizamos la importación de datos en SAS:

/* Importar los datos desde el archivo CSV */
PROC IMPORT DATAFILE = "C:\Users\user\Desktop\BBDD_Agresti_Caffo_SASdesdeCero.csv"
	OUT = PRESTAMOS
	DBMS = CSV
	REPLACE;
	GETNAMES = YES;
	DELIMITER = ';';
RUN;
SAS
👇🏻¿Dudas con alguna parte del código?
  1. PROC IMPORT DATAFILE = «C:\Users\user\Desktop\BBDD_Agresti_Caffo_SASdesdeCero.csv»
    • PROC IMPORT: Indica el inicio del procedimiento de importación de datos.
    • DATAFILE = "C:\Users\user\Desktop\BBDD_Agresti_Caffo_SASdesdeCero.csv": Especifica la ruta completa y el nombre del archivo CSV que se va a importar. En este caso, el archivo se llama BBDD_Agresti_Caffo_SASdesdeCero.csv y se encuentra en el escritorio del usuario.
  2. OUT = PRESTAMOS
    • OUT = PRESTAMOS: Define el nombre del conjunto de datos SAS que se creará a partir de la importación del archivo CSV. En este caso, el conjunto de datos resultante se llamará PRESTAMOS.
  3. DBMS = CSV
    • DBMS = CSV: Indica el tipo de archivo que se está importando. Aquí se especifica que el archivo es un CSV (Comma-Separated Values).
  4. REPLACE
    • REPLACE: Esta opción le dice a SAS que reemplace cualquier conjunto de datos existente con el mismo nombre (PRESTAMOS) en la biblioteca de trabajo si ya existe. Esto asegura que la importación actual sobrescribirá cualquier conjunto de datos previo con el mismo nombre.
  5. GETNAMES = YES
    • GETNAMES = YES: Indica que la primera fila del archivo CSV contiene los nombres de las variables. SAS utilizará esta primera fila para los nombres de las variables en el conjunto de datos importado. Si se establece en NO, SAS asignará nombres genéricos a las columnas, como VAR1, VAR2, etc.
  6. DELIMITER = ‘;’
    • Especifica que el delimitador de los campos en el archivo CSV es un punto y coma (DELIMITER).
  7. RUN;
    • Ejecuta el bloque de código PROC IMPORT. Esta instrucción hace que SAS procese el código y realice la importación del archivo CSV.

Preparación de los datos

Una vez tenemos nuestro conjunto de datos «PRESTAMOS» cargado en SAS procedemos a preparar los datos. El siguiente código divide los datos en dos grupos basados en la variable «SUCURSAL». Asigna los valores de «TOTAL» y «APROBADO» a nuevas variables («N1», «X1» para la sucursal A y «N2», «X2» para la sucursal B) que representan el tamaño de muestra y el número de éxitos, respectivamente.

/* Preparación de los datos */
DATA AJUSTE_AGRESTI_CAFFO;
	SET PRESTAMOS;
	IF SUCURSAL = 'A' THEN DO;
		N1 = TOTAL;
		X1 = APROBADO;
	END;
	ELSE IF SUCURSAL = 'B' THEN DO;
		N2 = TOTAL;
		X2 = APROBADO;
	END;
RUN;
SAS
👇🏻¿Dudas con alguna parte del código?
  1. DATA AJUSTE_AGRESTI_CAFFO;
    • Esta línea inicia la creación de un nuevo conjunto de datos llamado AJUSTE_AGRESTI_CAFFO.
  2. SET PRESTAMOS;
    • La instrucción SET PRESTAMOS especifica que los datos del conjunto de datos PRESTAMOS se utilizarán para crear el nuevo conjunto de datos AJUSTE_AGRESTI_CAFFO.
  3. IF SUCURSAL = ‘A’ THEN DO;
    • Esta línea inicia una condición que se aplica cuando la variable SUCURSAL es igual a ‘A’.
  4. N1 = TOTAL;
    • Si la condición anterior se cumple, se asigna el valor de la variable TOTAL a una nueva variable llamada N1. Esto representa el total de observaciones para la sucursal ‘A’.
  5. X1 = APROBADO;
    • Si la condición anterior se cumple, se asigna el valor de la variable APROBADO a una nueva variable llamada X1. Esto representa el número de aprobaciones para la sucursal ‘A’.
  6. END;
    • Finaliza el bloque de instrucciones que se ejecutan si SUCURSAL es igual a ‘A’.
  7. ELSE IF SUCURSAL = ‘B’ THEN DO;
    • Esta línea inicia una condición alternativa que se aplica cuando la variable SUCURSAL es igual a ‘B’.
  8. N2 = TOTAL;
    • Si la condición anterior se cumple, se asigna el valor de la variable TOTAL a una nueva variable llamada N2. Esto representa el total de observaciones para la sucursal ‘B’.
  9. X2 = APROBADO;
    • Si la condición anterior se cumple, se asigna el valor de la variable APROBADO a una nueva variable llamada X2. Esto representa el número de aprobaciones para la sucursal ‘B’.
  10. END;
    • Finaliza el bloque de instrucciones que se ejecutan si SUCURSAL es igual a ‘B’.
  11. RUN;
    • Ejecuta el bloque de código DATA.

A continuación, extraemos los valores máximos de las variables de interés y las almacenamos en macro variables. Esto es útil para facilitar el uso de estos valores en cálculos posteriores sin necesidad de referirse constantemente al conjunto de datos original.

/* Recoger los valores en macro variables */
PROC SQL;
	SELECT MAX(N1) INTO :N1 FROM AJUSTE_AGRESTI_CAFFO;
	SELECT MAX(N2) INTO :N2 FROM AJUSTE_AGRESTI_CAFFO;
	SELECT MAX(X1) INTO :X1 FROM AJUSTE_AGRESTI_CAFFO;
	SELECT MAX(X2) INTO :X2 FROM AJUSTE_AGRESTI_CAFFO;
QUIT;
SAS
👇🏻¿Dudas con alguna parte del código?
  1. PROC SQL;
    • Esta línea inicia el procedimiento SQL en SAS, que se utiliza para manipular y consultar datos.
  2. SELECT MAX(N1) INTOFROM AJUSTE_AGRESTI_CAFFO;
    • Esta línea selecciona el valor máximo de la variable N1 del conjunto de datos AJUSTE_AGRESTI_CAFFO y lo almacena en la macro variable N1.
    • MAX(N1) obtiene el valor máximo de la columna N1.
    • INTO :N1 almacena el resultado en la macro variable N1.
  3. SELECT MAX(N2) INTOFROM AJUSTE_AGRESTI_CAFFO;
    • Esta línea selecciona el valor máximo de la variable N2 del conjunto de datos AJUSTE_AGRESTI_CAFFO y lo almacena en la macro variable N2.
  4. SELECT MAX(X1) INTOFROM AJUSTE_AGRESTI_CAFFO;
    • Esta línea selecciona el valor máximo de la variable X1 del conjunto de datos AJUSTE_AGRESTI_CAFFO y lo almacena en la macro variable X1.
  5. SELECT MAX(X2) INTOFROM AJUSTE_AGRESTI_CAFFO;
    • Esta línea selecciona el valor máximo de la variable X2 del conjunto de datos AJUSTE_AGRESTI_CAFFO y lo almacena en la macro variable X2.
  6. QUIT;
    • Esta línea finaliza el procedimiento SQL.

Estimación de Agresti y Caffo

El intervalo de confianza propuesto por Agresti y Caffo es:

\left[{(\tilde{p}_1 - \tilde{p}_2) \pm Z_{1- \alpha/2} \sqrt{\frac{\tilde{p}_1(1 - \tilde{p}_1)}{n_1+2} + \frac{\tilde{p}_2(1 - \tilde{p}_2)}{n_2+2}}}\right]

donde:

\tilde{p}_1 = \frac{X_1 + 1}{n_1 + 2}
\tilde{p}_2 = \frac{X_2 + 1}{n_2 + 2}

siendo:

  • \tilde{p}_1 y \tilde{p}_2 las proporciones ajustadas para la sucursal A y B.
  • X_1 y X_2 el número de préstamos aprobados en cada sucursal.
  • n_1 y n_2 el tamaño total de las muestras de la sucursal A y B.
  • Z_{1- \alpha/2} es el valor crítico de la Distribución Normal para el nivel de confianza deseado.

Antes de proceder al cálculo del intervalo, debemos establecer un nivel de confianza. Consideraremos un nivel de confianza del 95% por lo que buscaremos el valor de Z que corresponda a la cola superior de la distribución normal estándar en un intervalo de confianza bilateral. Esto significa que hay un 2,5% de probabilidad en cada cola (inferior y superior), lo que corresponde a una probabilidad acumulada de 0,975 para el límite superior.

Procedemos al cálculo del intervalo de confianza para la diferencia de proporciones de Agresti y Caffo:

/* Aplicar la corrección de Agresti y Caffo */
DATA RESULTADOS;
/* Calcular las proporciones ajustadas */
	P1_ADJ = (&X1 + 1) / (&N1 + 2);
	P2_ADJ = (&X2 + 1) / (&N2 + 2);
/* Calcular la diferencia de proporciones ajustadas */
	DIFF = P1_ADJ - P2_ADJ;
/* Calcular la varianza y el error estándar */
	VAR = (P1_ADJ * (1 - P1_ADJ) / (&N1 + 2)) + (P2_ADJ * (1 - P2_ADJ) / (&N2 + 2));
	SE = SQRT(VAR);
/* Calcular los límites del intervalo de confianza del 95% */
	Z_VALUE = PROBIT(0.975);
	LOWER_BOUND = DIFF - Z_VALUE * SE;
	UPPER_BOUND = DIFF + Z_VALUE * SE;
RUN;
SAS
👇🏻¿Dudas con alguna parte del código?
  1. DATA RESULTADOS;
    • Esta línea inicia la creación de un nuevo conjunto de datos llamado RESULTADOS.
  2. /* Calcular las proporciones ajustadas */
    • Comentario que indica que el siguiente bloque de código calcula las proporciones ajustadas.
  3. P1_ADJ = (&X1 + 1) / (&N1 + 2);
    • Calcula la proporción ajustada para la sucursal A (P1_ADJ) usando la fórmula de Agresti y Caffo, que añade 1 al numerador (número de aprobaciones) y 2 al denominador (total de observaciones).
  4. P2_ADJ = (&X2 + 1) / (&N2 + 2);
    • Calcula la proporción ajustada para la sucursal B (P2_ADJ) de la misma manera.
  5. /* Calcular la diferencia de proporciones ajustadas */
    • Comentario que indica que el siguiente bloque de código calcula la diferencia entre las proporciones ajustadas.
  6. DIFF = P1_ADJ – P2_ADJ;
    • Calcula la diferencia entre las proporciones ajustadas (DIFF).
  7. /* Calcular la varianza y el error estándar */
    • Comentario que indica que el siguiente bloque de código calcula la varianza y el error estándar.
  8. VAR = P1_ADJ * (1 – P1_ADJ) / (&N1 + 2) + P2_ADJ * (1 – P2_ADJ) / (&N2 + 2);
    • Calcula la varianza de la diferencia entre las proporciones ajustadas (VAR).
  9. SE = SQRT(VAR);
    • Calcula el error estándar (SE) como la raíz cuadrada de la varianza.
  10. /* Calcular los límites del intervalo de confianza del 95% */
    • Comentario que indica que el siguiente bloque de código calcula los límites del intervalo de confianza del 95%.
  11. Z_VALUE = PROBIT(0.975);
    • Calcula el valor crítico de Z para un intervalo de confianza del 95% utilizando la función PROBIT, que devuelve el valor z correspondiente a la probabilidad acumulada. PROBIT(0.975) corresponde aproximadamente a 1.96.
  12. LOWER_BOUND = DIFF – Z_VALUE * SE;
    • Calcula el límite inferior del intervalo de confianza (LOWER_BOUND).
  13. UPPER_BOUND = DIFF + Z_VALUE * SE;
    • Calcula el límite superior del intervalo de confianza (UPPER_BOUND).
  14. RUN;
    • Ejecuta el bloque de código DATA.

Por último, mostramos los resultados del cálculo de las proporciones ajustadas, la diferencia entre estas proporciones, y el intervalo de confianza del 95%.

/* Mostrar los resultados */
PROC PRINT DATA = RESULTADOS NOOBS;
	VAR P1_ADJ P2_ADJ DIFF LOWER_BOUND UPPER_BOUND;
RUN;
SAS
👇🏻¿Dudas con alguna parte del código?
  1. PROC PRINT DATA = RESULTADOS NOOBS;
    • Esta línea inicia el procedimiento PRINT, especificando que los datos a imprimir provienen del conjunto de datos RESULTADOS.
    • La opción NOOBS se utiliza para suprimir la columna de números de observación en la salida impresa.
  2. VAR P1_ADJ P2_ADJ DIFF LOWER_BOUND UPPER_BOUND;
    • Esta línea especifica las variables que se imprimirán en la salida: P1_ADJ, P2_ADJ, DIFF, LOWER_BOUND, y UPPER_BOUND.
  3. RUN;
    • Ejecuta el bloque de código PROC PRINT.

El resultado del código anterior es el siguiente:

Resultado prueba Agresti y Caffo

El intervalo de confianza calculado para la diferencia de proporciones de aprobación de préstamos entre la sucursal A y la sucursal B es:

\left[{0.1630\text{, }0.2684}\right]

Resultados

El análisis realizado sobre las tasas de aprobación de préstamos en dos sucursales bancarias utilizando el método de Agresti y Caffo nos proporciona información valiosa sobre la diferencia en el desempeño de estas dos sucursales. Los resultados obtenidos son los siguientes:

  1. Proporciones Ajustadas:
    • Sucursal A: La proporción ajustada de aprobación de préstamos es aproximadamente 0,799.
    • Sucursal B: La proporción ajustada de aprobación de préstamos es aproximadamente 0,583.
  2. Diferencia de Proporciones Ajustadas:
    • La diferencia ajustada de proporciones de aprobación entre la Sucursal A y la Sucursal B es aproximadamente 0,216. Esto indica que, después de aplicar el ajuste de Agresti y Caffo, la Sucursal A tiene una proporción de aprobaciones significativamente mayor que la Sucursal B.
  3. Intervalo de Confianza del 95%:
    • Límite Inferior: 0,163
    • Límite Superior: 0,268

Conclusiones

Los resultados obtenidos nos permiten obtener las siguientes conclusiones:

  • La diferencia positiva en las proporciones ajustadas y el hecho de que el intervalo de confianza no incluye el valor 0 sugieren que la Sucursal A tiene una tasa de aprobación de préstamos significativamente mayor que la Sucursal B.
  • El intervalo de confianza relativamente estrecho indica que la estimación de la diferencia de proporciones es bastante precisa. Esto refuerza la conclusión de que existe una diferencia significativa en las tasas de aprobación de préstamos entre las dos sucursales.
  • Esto significa que, con un nivel de confianza del 95%, podemos estar seguros de que la sucursal A aprueba entre un 16,3% y un 26,8% más préstamos que la sucursal B.

El análisis utilizando el método de Agresti y Caffo ha proporcionado una evaluación clara y precisa de la diferencia en las tasas de aprobación de préstamos entre dos sucursales. Este enfoque no solo ayuda a identificar áreas de mejora, sino que también asegura que las decisiones se basen en datos sólidos y análisis estadísticos rigurosos.

Tabla de contenidos
Compartir artículo

Deja una respuesta

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

Información básica sobre protección de datos Ver más

  • Responsable: Jorge Carballo Álvarez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Dreamhost que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad