Ejemplo 3: Generación de datos aleatorios
Puede utilizar la sintaxis de comandos para generar variables que tengan aproximadamente una distribución normal. Los mandatos para generar cinco variables normales estándar (X1 a X5) para 1000 casos se muestran en la figura siguiente. Como se muestra en el resultado siguiente, cada variable tiene una media de aproximadamente 0 y una desviación estándar de aproximadamente 1.
INPUT PROGRAM.
- VECTOR X(5).
- LOOP #I = 1 TO 1000.
- LOOP #J = 1 TO 5.
- COMPUTE X(#J) = NORMAL(1).
- END LOOP.
- END CASE.
- END LOOP.
- END FILE.
END INPUT PROGRAM.
DESCRIPTIVES VARIABLES X1 TO X5.
Valid
Variable Mean Std Dev Minimum Maximum N Label
X1 -.01 1.02 -3.11 4.15 1000
X2 .08 1.03 -3.19 3.22 1000
X3 .02 1.00 -3.01 3.51 1000
X4 .03 1.00 -3.35 3.19 1000
X5 -.01 .96 -3.34 2.91 1000
La macro !DATAGEN siguiente emite los mandatos de generación de datos que se muestran anteriormente.
DEFINE !DATAGEN ().
INPUT PROGRAM.
- VECTOR X(5).
- LOOP #I = 1 TO 1000.
- LOOP #J = 1 TO 5.
- COMPUTE X(#J) = NORMAL(1).
- END LOOP.
- END CASE.
- END LOOP.
- END FILE.
END INPUT PROGRAM.
DESCRIPTIVES VARIABLES X1 TO X5.
!ENDDEFINE.
!DATAGEN.
Los mandatos de generación de datos se incorporan entre los mandatos de definición de macro. La macro genera los mismos datos y estadísticos descriptivos que se muestran anteriormente.
Puede adaptar la generación de variables distribuidas normalmente si modifica la macro !DATAGEN para que acepte argumentos de palabra clave, tal como se muestra en la figura siguiente. La macro le permite especificar el número de variables y casos que se van a generar y la desviación estándar aproximada.
DEFINE !DATAGEN ( OBS =!TOKENS(1) !DEFAULT(1000)
/VARS =!TOKENS(1) !DEFAULT(5)
/SD =!CMDEND !DEFAULT(1)).
INPUT PROGRAM.
- VECTOR X(!VARS).
- LOOP #I = 1 TO !OBS.
- LOOP #J = 1 TO !VARS.
- COMPUTE X(#J) = NORMAL(!SD).
- END LOOP.
- END CASE.
- END LOOP.
- END FILE.
END INPUT PROGRAM.
!LET !LIST = !NULL.
!DO !I = 1 !TO !VARS.
- !LET !LIST = !CONCAT(!LIST, ‘ ‘, X, !I).
!DOEND.
DESCRIPTIVES VARIABLES !LIST.
!ENDDEFINE.
!DATAGEN OBS=500 VARS=2 SD=1.
!DATAGEN.
- La sentencia
DEFINEdeclara argumentos que especifican el número de casos (OBS), las variables (VARS) y la desviación estándar (SD). De forma predeterminada, la macro crea 1000 casos con 5 variables que tienen una desviación estándar de 1. - Los mandatos entre
INPUT PROGRAMyEND INPUT PROGRAMgeneran los nuevos datos utilizando valores de los argumentos de macro. - Los mandatos
!LETy!DO/!DOENDconstruyen una lista de variables (!LIST) que se utiliza enDESCRIPTIVES. El primer mandato!LETinicializa la lista en un valor de serie nulo (en blanco). Para cada variable nueva, el bucle de índice añade a la lista una serie con el formato X1, X2, X3, etc. Por lo tanto,DESCRIPTIVESsolicita medias y desviaciones estándar para cada nueva variable. - La primera llamada de macro genera 500 casos con dos variables normales estándar. La segunda llamada solicita el número predeterminado de variables, casos y desviación estándar. Los estadísticos descriptivos (no se muestran) también se calculan para cada variable.
Como se muestra en la figura siguiente, puede declarar argumentos de palabra clave adicionales que le permiten especificar la distribución (normal o uniforme) de los datos generados y un valor de parámetro que se utiliza como desviación estándar (para datos distribuidos normalmente) o un rango (para datos distribuidos uniformemente).
DEFINE !DATAGEN (OBS =!TOKENS(1) !DEFAULT(1000)
/VARS =!TOKENS(1) !DEFAULT(5)
/DIST =!TOKENS(1) !DEFAULT(NORMAL)
/PARAM =!TOKENS(1) !DEFAULT(1)).
INPUT PROGRAM.
- VECTOR X(!VARS).
- LOOP #I = 1 TO !OBS.
- LOOP #J = 1 TO !VARS.
- COMPUTE X(#J) = !DIST(!PARAM).
- END LOOP.
- END CASE.
- END LOOP.
- END FILE.
END INPUT PROGRAM.
!LET !LIST = !NULL.
!DO !I = 1 !TO !VARS.
- !LET !LIST = !CONCAT(!LIST, ’ ’, X, !I).
!DOEND.
DESCRIPTIVES VARIABLES !LIST.
!ENDDEFINE.
!DATAGEN OBS=500 VARS=2 DIST=UNIFORM PARAM=2.
- La sentencia
DEFINEdeclara los argumentosOBS,VARS,DISTyPARAM.OBSyVARSrepresentan el número de observaciones y casos que se van a generar. Los argumentosDISTyPARAMespecifican la forma y el parámetro de la distribución de los datos generados. De forma predeterminada, la macro genera 1000 observaciones con 5 variables normales estándar. - Las sentencias entre
INPUT PROGRAMyEND INPUT PROGRAMgeneran los nuevos datos utilizando valores de argumentos de macro. - Los comandos restantes en el cuerpo de la macro obtienen estadísticos descriptivos para las variables generadas.
- La llamada de macro crea dos variables distribuidas de forma aproximadamente uniforme con un rango de 2. La salida de la llamada de macro se muestra a continuación.
Valid
Variable Mean Std Dev Minimum Maximum N Label
X1 .99 .57 .00 2.00 500
X2 1.00 .57 .00 2.00 500