PROC FASTCLUS se utilza para aplicar el algoritmo k-means para agrupamiento (cluster) de observaciones. Todas las observaciones en el data set de entrenamiento son asignadas a grupos basado en las variables incluidas en el data set. Calificar o puntuar nuevas observaciones puede ser todo un reto ya que las reglas de asignación dependen de los valores de las nuevas observaciones.
Lo anterior se puede lograr usando la opcion SEED en Proc FASTCLUS.
/*Grupos o clusters en el data set de entrenamiento */
%let indsn = input; *data set the entrada (entrenamiento);
%let nclus = maxclus; *número de cluster-grupos a calcular usando k-means;
%let indvars = varlist; *lista de variables a utlizar en el proceso de agrupamiento;
%let valid = val_data; *data set que queremos califcar o puntuar;
proc fastclus data=&indsn maxclusters = &nclus outseed= clusterSeeds;
var &indvars;
run;
/*Puntuando el nuevo data set*/
proc fastclus data=&valid out=&valid._scored seed = clusterSeeds maxclusters = &nclus maxiter = 0;
var &indvars;
run;
Referencia:
“Data Preparation for Analytics Using SAS” By Gerhard Svolba, Gerhard Svolba, Ph.D.
SASludos,
Alberto
El muestreo sistemático consiste en la elección de una muestra a partir de los elementos de una lista según un orden determinado, o recorriendo la lista a partir de un número aleatorio determinado. Esta es la definición más sencilla de muestreo sistemático sin tener que profundizar mucho.
Un pequeño ejemplo de como realizar un muestreo sistemático usando el Proc SurveySelect.
Vamos a suponer que deseamos crear una muestra sistemática del data set sashelp.class y que contenga el 50% de la información. El código sería:
PROC SURVEYSELECT data=sashelp.class out=_sys_ method=sys samprate=0.5 OUTSORT=class_sorted;
control age;
run;
Donde,
Method=sys indica que la selección será sistemática
Samprate=0.5 indica que el tamaño de la muestra será del 50%
Outsort= es el nombre del data set ordenado por la variable utilizada en la sentencia CONTROL
Control= Esta opción específica la variable que deseamos utilizar para crear la muestra, así el data set es ordenado por esta variable para posteriormente hacer la selección sistemática.
Sin la opción control, la muestra será seleccionada en el orden en el que aparecen en originalmente los datos.
SASludos,
Alberto
Para todos es un hecho que el ODS posee una versatilidad casi inigualable en cuanto a su habilidad para adaptarse a cualquier formato de salida.
No obstante, esta no es su única habilidad. También podemos crear data sets automáticamente a partir de procedmientos SAS. A continuación les dio una breve explicación.
Cuando ejecutamos cualquier procedimiento SAS como por ejemplo el Proc Freq, este nos devuelve una salida (en SAS Foundation sería el Output Windows), un reporte (en Enterprise Guide sería un html). Esta salida contiene información acerca de la frecuencia de cada valor contenido en la variable(s) específicada(s) en la sentencia TABLE. Esta información que SAS nos presenta en formato de reporte es adicionalmente almacenada en data set al que podemos tener acceso utilizando los ODS Output Tables.
Para saber que tipo salidas produce cada procedimiento debemos usar el ODS Trace ON. Aquí un ejemplo sencillo:
ods trace on;
proc freq data=sashelp.class;
table sex;
run;
ods trace off;
El ODS Trace on produce el siguiente resultado en el Log:
Output Added:
————-
Name: OneWayFreqs
Label: One-Way Frequencies
Template: Base.Freq.OneWayFreqs
Path: Freq.Table1.OneWayFreqs
————-
El mensaje anterior nos dice que el Proc freq creo el data set OneWayFreqs para generar el reporte que vimos cuando ejecutamos el procedmiento.
A medida que nuestro Proc se hace más complejo, es decir agregamos más variables, cruces, opciones o estadísticas el procedimiento genera data set adicionales.
Como accesamos esta información? como la guardamos en un data set “nuestro”? Para esto usamos la opción ODS OUTPUT de la siguiente manera:
ods output OneWayFreqs=Myfreqs;
proc freq data=sashelp.class;
table sex;
run;
Con el código anterior hemos creado el data set Myfreqs con la información contenida en el data set OneWayFreqs. Podemos crear tantos data sets como outputs sean creados con las opciones de procedmiento que vamos a ejecutar.
Ahora bien, para saber a que tipo de información tenemos acceso en cada procedimiento, debemos ir al HELP de SAS/EG, buscar el procedimiento y buscar bajo la opción de ODS TABLE NAMES que tenemos disponible.
Esta tarea se puede volver algo tediosa cuando sabemos lo que necesitamos pero no sabemos cual es el Proc más adecuado (distintos Proc pueden crear la misma información).
Para ello he creado una lista pública donde puede obtener los tipos de objetos de salida por Producto y Procedimiento SAS.
Aquí tienen el link:
http://tinyurl.com/olabu3
Espero le sea de utilidad!
SASludos,
Alberto
Es impresionante ver como analistas y programadores SAS tratando de aplicar técnicas de remuestreo como el bootstrapping, piensan en una super macro que contiene n cantidad de líneas de código, cientos de condicionales, bucles, contadores y complican las cosas de tal manera que muchas veces hasta desisten de aplicar estás técnicas.
Este post contiene algunas ideas sobre el bootstrapping y como aplicarlo en 3 simples pasos
El bootstrap o estimación de Monte Carlo es un método de remuestreo no paramétrico propuesto por Bradley Efron en 1979. La idea central de este método es simple; dada una muestra aleatoria con n observaciones dicha muestra es tratada como si fuera toda la población de las cuál extraeremos B muestras con reemplazamiento.
Para cada remuestreo se calculará el valor del estimador bootstrap que se utilizará para estimar la variabilidad muestral. Tal y como los estudios teóricos han demostrado, este enfoque proporciona una buena aproximación de la distribución de los estimadores, lo cual permitirá describir algunas de sus propiedades muestrales, así como el cálculo de intervalos de confianza y la realización de contrastes de hipótesis.
El procedimiento bootstrap es útil para:
- Valorar el sesgo y el error muestral de un estadístico calculado a partir de una muestra.
- Establecer un intervalo de confianza para un parámetro estimado.
- Realizar una prueba de hipótesis respecto a uno o más parámetros poblacionales.
Adicionalmente, el bootstrapping tiene varios métodos para estimar intervalos de confianza:
• Percentile Bootstrap
• Standard Bootstrap
• Bootstrap-t (“Pivotal Bootstrap”)
• Bias-corrected (BCa) Bootstrap
Cuál método debemos seleccionar? Bueno esto es ejercicio para el “buen” sentido común de cada quién.
Antes de empezar con nuestro ejemplo quiero recalcar que si la muestra original es una mala representación de la población (todas, absolutamente todas las muestras son representativas!!! Ahora bien, que sean una buena o mala representación es otro tema) no importa que técnica de muestreo utilicen, los resultados los llevarán a tomar las decisiones equivocadas!.
Veamos un ejemplo detallado de cómo construir un intervalo de confianza del 95% para la media de la siguiente manera:
1- Generar una muestra aleatoria de tamaño 20 que siga una distribución normal con media=50 y dev std=15.
2- Calcular algunos estadísticos como la media, la desviación estándar, error estándar y el rango.
3- Generar B=100 muestras con reemplazamiento a partir de nuestra muestra original.
4- Calcular la media para cada una de las B muestras.
5- Aplicar el método de los percentiles para calcular un intervalo de confianza del 95% para la media
6- Comparar el IC bootstrap con el IC asumiendo que la muestra sigue una distribución normal como lo es en nuestro caso.
7- Bootstrap en 3 pasos!!!
Paso 1: Nuestra muestra aleatoria de normalmente distribuida de tamaño 20
data muestra;
do i=1 to 20;
x=int(RAND(‘NORMAL’,50,15));
output;
end;
drop i;
run;
Paso 2: Medidas de tendencia central
proc means mean median std stderr range;run;
Mean =49.0500000
Median =47.0000000
Std Dev=16.4299950
Stderr= 3.5327602
Range =67.0000000
Paso 3: Generar 100 muestras con reemplazamiento
proc surveyselect data=muestra out=boot /* a */
seed=441244 /* b */
method=urs /* c */
samprate=1 /* d */
outhits /* e */
rep=100; /* f */
run;
Vamos a detenernos aquí para explicar el Proc SurveySelect. El procedimiento SurveySelect ofrece una variedad de métodos de muestreo para seleccionar muestras aleatorias basadas en simples o complejos diseños de muestras.
La leyenda se explica de la siguente manera:
a – Invocamos SurveySelect y definimos archivo fuente (data o población) y nuestro archivo de salida (nuestra muestra o out)
b – definimos la semilla con que iniciaremos nuestro generador de números pseudo-aleatorios con la opción seed
c – definimos el método de muestreo, recuerden que necesitamos generar B muestras aleatorias con reemplazamiento (también llamada Unrestricted Random Sampling URS)
d – Con la opción SAMPRATE=1 obtenemos muestras del mismo tamaño que la muestra original.
e – Outhits indica cuanta veces fue seleccionada una observación para construir la muestra Bi
f – Rep nos permite seleccionar el número de muestras a generar
Paso 4: Calcular la media para cada una de las B muestras
proc univariate data=boot noprint;
var x;
by Replicate;
output out=meanall mean=mean;
run;
Replicate es una variable automática generada por el SurveySelect que indica que el nro de la muestra replicada.
Nuevamente vamos a detenernos aquí y vamos a echar un vistazo al histograma de las medias.

Interesante no? A que les recuerda esa distribución?
Paso 5: Aplicar el método de los percentiles para calcular un intervalo de confianza del 95% para la media.
Para generar este intervalo solo necesitamos calcular 2.5-ésimo percentil y el 97.5-ésimo percentil, estos los podemos obtener con el Univariate.
proc univariate data=outall;
var mean;
output out=final pctlpts=2.5, 97.5 pctlpre=ic;
run;
Con un 95% de confianza podemos decir que la media está entre (41.85, 54.6)
Paso 6: Calcular un intervalo de confianza del %95 para media de una distribución normal con media=50 y dev std=15. Toda la información que necesitamos ya la hemos calculado en el paso 2 así que solo queda construir el intervalo de la siguiente manera:
Media +- ( t ( 1 – alfa / 2 ) ) * STDERR
DATA Normal_IC ;
LI = 50 – ( TINV ( 0.95 , 20-1 ) * 3.5327602 ) ;
LU = 50 + ( TINV ( 0.95 , 20-1 ) * 3.5327602 ) ;
output;
RUN ;
Nuestro intervalo del 95% es (43.89,56.10) el cual es muy semejante al que calculamos usando bootstrapping.
Paso 7: Solo en 3 Pasos!!!
*Paso 1;
proc surveyselect data=muestra out=boot
seed=441244
method=urs
samprate=1
outhits
rep=100;
run;
*Paso 2;
proc univariate data=boot noprint;
var x;
by Replicate;
output out=meanall mean=mean;
run;
*Paso 3;
proc univariate data=meanall;
var mean;
output out=interval pctlpts=2.5, 97.5 pctlpre=ic;
run;
Para descargar el programa completo hagan clic aquí.
Un comentario final, esto es solo una breve intro al bootstrapping, este tema tiene mucho bemoles y les recomiendo leer un texto más avanzados sobre este tema.
SASludos,
Alberto