Datanalytics
Inicio > estadística, r, sas > Don’t be loopy!

Don’t be loopy!

Jueves, 11 de agosto de 2011 Dejar un comentario Ir a comentarios

Don’t be loopy! es el título de una presentación realizada en el SAS Global Forum de 2007. Tiene que ver con el motivo que me hizo en mi día abandonar SAS y buscar —entonces aún no lo conocía— el cobijo de R: sus limitaciones para todo lo que tiene que ver con simulaciones, remuestreos, jackknifes, bootstraps y similares.

El artículo muestra lo que debería ser el estado del arte para realizar este tipo de programas con SAS. En el primero de los problemas que estudia, que denomina bootstrap simple, muestrea 1.000 veces un conjunto de datos de 50.000 observaciones y calcula el valor de la curtosis para cada una de ellas. Finalmente, proporciona un intervalo de confianza para dicho valor.

El artículo recomienda no utilizar bucles. Y mucho menos, bucles usando las llamadas macros. Propone usar el PROC SURVEYSELECT para muestrear los datos. Incluso, dado que SURVEYSELECT lee el fichero de entrada del disco una vez por muestra —es decir, 1000 veces en total en el ejemplo—, propone el comando sasfile para copiar los datos en RAM. La sintaxis es la siguiente:

sasfile YourData load;
proc surveyselect data=YourData ...;
run;
sasfile YourData close;

El código recomendado para resolver en SAS este problema es

data YourData;
    do i = 1 to 50000;
        x = ranuni(1234);
        output;
    end;
    keep x;
run;

sasfile YourData load;
proc surveyselect data=YourData out=outboot
    seed=30459584
    method=urs samprate=1 outhits
    rep=1000;
run;
sasfile YourData close;

ods listing close;

proc univariate data=outboot;
    var x;
    by Replicate;
    output out=outall kurtosis=curt;
run;

ods listing;

proc univariate data=outall;
    var curt;
    output out=final pctlpts=2.5, 97.5 pctlpre=ci;
run;

En mi ordenador necesita 70 segundos para ejecutarse y crea un fichero, outboot.sas7bdat, que ocupa 1,2 GB en mi disco duro. El código equivalente en R es

library( moments )
dat <- runif( 50000 )
kurtosis.dat <- replicate( 1000,
              kurtosis( sample( dat, length( dat ), replace = T ) ) )
quantile( kurtosis.dat, c( 0.025, 0.975 ) )

que no genera ficheros en disco, no incrementa de manera perceptible la memoria utilizada y corre en 8 segundos sobre la misma máquina.

¿Será por esto que SAS no quiere venir a las jornadas de usuarios de R? ¿No será más bien que tendremos que ir nosotros a las suyas para enseñarles cómo se han de hacer las cosas?

Comparte esta entrada en:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Meneame
  • Bitacoras.com
Categories: estadística, r, sas Tags: , ,
  1. jbm
    Viernes, 12 de agosto de 2011 a las 13:28 | #1

    En cuanto R estandarice el uso de grandes ficheros de datos va a ser la caña.

  2. Diego
    Viernes, 12 de agosto de 2011 a las 21:23 | #2

    Para mi no hay nada mas genial, que poder lelvar R en mi pendrive y correrlo donde quiera cosa que con SAS jamás lograría.

  3. Sábado, 13 de agosto de 2011 a las 10:29 | #3

    @Diego Je, je, je… yo conozco a gente que lleva SAS en su pendrive. Pero no se lo digas a nadie, ¿eh?

  4. Diego
    Martes, 16 de agosto de 2011 a las 17:22 | #4

    jajaja voy a tener que probar si consigo construir un pendrive como el de tus conocidos, la verdad nunca lo habia probado porque con R ya voy contento

  1. Viernes, 23 de septiembre de 2011 a las 09:01 | #1
  2. Miércoles, 25 de enero de 2012 a las 09:12 | #2