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.

Figura 1. Mandatos de generación de datos
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.
Figura 2. Estadísticos descriptivos para los datos generados
                                           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.

Figura 3.Macro DATAGEN
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.

Figura 4.Macro DATAGEN con argumentos de palabra clave
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 DEFINE declara 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 PROGRAM y END INPUT PROGRAM generan los nuevos datos utilizando valores de los argumentos de macro.
  • Los mandatos !LET y !DO/!DOEND construyen una lista de variables (!LIST) que se utiliza en DESCRIPTIVES. El primer mandato !LET inicializa 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, DESCRIPTIVES solicita 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).

Figura 5.Macro DATAGEN con argumentos de palabra clave adicionales
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 DEFINE declara los argumentos OBS, VARS, DISTy PARAM. OBS y VARS representan el número de observaciones y casos que se van a generar. Los argumentos DIST y PARAM especifican 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 PROGRAM y END INPUT PROGRAM generan 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.
Figura 6. Estadísticos descriptivos para variables uniformes
                                           Valid
Variable  Mean  Std Dev  Minimum  Maximum      N  Label
X1         .99      .57      .00     2.00    500
X2        1.00      .57      .00     2.00    500