Publicado el :
Estadística CREATION_INTERNE

Modelo de Punto de Cambio (Change Point Model) con PROC MCMC

Este código también está disponible en: Deutsch English Français
En espera de validación
El script implementa un modelo de punto de cambio para identificar un cambio estructural en la relación entre dos variables. Comienza creando un conjunto de datos interno, luego utiliza PROC MCMC para estimar los parámetros de un modelo lineal por partes, incluida la posición del punto de cambio 'cp'. Los resultados de la estimación (medias a posteriori) se almacenan posteriormente en macrovariables a través de un paso DATA _NULL_. Finalmente, PROC SGPLOT se utiliza dos veces: una primera vez para visualizar los datos brutos, y una segunda vez para superponer los datos, las líneas de regresión estimadas a ambos lados del punto de cambio, y la densidad a posteriori de la ubicación de este punto.
Análisis de datos

Type : CREATION_INTERNE


Los datos se generan completamente dentro del script utilizando un paso DATA con una instrucción DATALINES. No se necesitan datos externos.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea el conjunto de datos 'stagnant' a partir de datos internos (datalines). La opción ' @@' en la instrucción INPUT permite leer varias observaciones en la misma línea de datos.
¡Copiado!
1title 'Change Point Model';
2DATA stagnant;
3 INPUT y x @code_sas_json/8_SAS_Intro_ReadFile_MultiCol_@@.json;
4 ind = _n_;
5 DATALINES;
6 1.12 -1.39 1.12 -1.39 0.99 -1.08 1.03 -1.08
7 0.92 -0.94 0.90 -0.80 0.81 -0.63 0.83 -0.63
8 0.65 -0.25 0.67 -0.25 0.60 -0.12 0.59 -0.12
9 0.51 0.01 0.44 0.11 0.43 0.11 0.43 0.11
10 0.33 0.25 0.30 0.25 0.25 0.34 0.24 0.34
11 0.13 0.44 -0.01 0.59 -0.13 0.70 -0.14 0.70
12-0.30 0.85 -0.33 0.85 -0.46 0.99 -0.43 0.99
13-0.65 1.19
14;
15RUN;
2 Bloque de código
PROC SGPLOT
Explicación :
Visualización inicial de los datos brutos en forma de nube de puntos para inspeccionar la relación entre x e y.
¡Copiado!
1 
2PROC SGPLOT
3DATA=stagnant;
4scatter x=x y=y;
5RUN;
6 
3 Bloque de código
PROC MCMC
Explicación :
Núcleo del análisis. Se utiliza PROC MCMC para ajustar un modelo bayesiano. El código define los parámetros (alpha, cp, beta1, beta2, s2), sus distribuciones a priori, y el modelo lineal que estipula que la pendiente (beta) cambia en función de la posición de x con respecto al punto de cambio 'cp'. El procedimiento genera muestras de la distribución a posteriori de los parámetros.
¡Copiado!
1PROC MCMC DATA=stagnant outpost=postout seed=24860 ntu=1000
2 nmc=20000;
3 ods select PostSumInt;
4 ods OUTPUT PostSumInt=ds;
5 
6 array beta[2];
7 parms alpha cp beta1 beta2;
8 parms s2;
9 
10 prior cp ~ unif(-1.3, 1.1);
11 prior s2 ~ uniform(0, 5);
12 prior alpha beta: ~ normal(0, v = 1e6);
13 
14 j = 1 + (x >= cp);
15 mu = alpha + beta[j] * (x - cp);
16 model y ~ normal(mu, var=s2);
17RUN;
4 Bloque de código
DATA STEP
Explicación :
Este paso DATA de tipo _NULL_ (no crea una tabla) lee las medias a posteriori calculadas por PROC MCMC (almacenadas en la tabla 'ds') y las asigna a macrovariables (ej: &cp, &beta1, &beta2) para su uso posterior.
¡Copiado!
1DATA _null_;
2 SET ds;
3 call symputx(parameter, mean);
4RUN;
5 Bloque de código
DATA STEP Data
Explicación :
Crea un conjunto de datos 'b' para trazar las líneas de regresión del modelo ajustado. Utiliza las macrovariables (&cp, &alpha, &beta1, &beta2) para calcular los valores predichos de y1.
¡Copiado!
1DATA b;
2 missing A;
3 INPUT x1 @code_sas_json/8_SAS_Intro_ReadFile_MultiCol_@@.json;
4 IF x1 eq .A THEN x1 = &cp;
5 IF _n_ <= 2 THEN y1 = &alpha + &beta1 * (x1 - &cp);
6 ELSE y1 = &alpha + &beta2 * (x1 - &cp);
7 DATALINES;
8 -1.5 A 1.2
9;
10RUN;
6 Bloque de código
PROC KDE Data
Explicación :
Utiliza el procedimiento KDE (Kernel Density Estimation) sobre la salida de MCMC para estimar la distribución de probabilidad a posteriori del parámetro 'cp' (el punto de cambio).
¡Copiado!
1 
2PROC KDE
3DATA=postout;
4univar cp / out=m1 (drop=count);
5RUN;
6 
7 Bloque de código
DATA STEP Data
Explicación :
Este bloque ajusta (escala y desplaza) el valor de la densidad calculada por PROC KDE para que pueda superponerse de manera legible en el gráfico final.
¡Copiado!
1DATA m1;
2 SET m1;
3 density = (density / 25) - 0.653;
4RUN;
8 Bloque de código
DATA STEP Data
Explicación :
Combina los datos originales ('stagnant'), las líneas del modelo ajustado ('b') y los datos de densidad del punto de cambio ('m1') en un único conjunto de datos para el gráfico final.
¡Copiado!
1DATA all;
2 SET stagnant b m1;
3RUN;
9 Bloque de código
PROC SGPLOT
Explicación :
Genera el gráfico final completo que superpone: la nube de puntos original, los dos segmentos de recta del modelo de punto de cambio, y la curva de densidad de la distribución a posteriori del parámetro 'cp'.
¡Copiado!
1PROC SGPLOT DATA=all noautolegend;
2 scatter x=x y=y;
3 series x=x1 y=y1 / lineattrs = graphdata2;
4 series x=value y=density / lineattrs = graphdata1;
5RUN;
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 : S A S S A M P L E L I B R A R Y