[R-es] optimización de código en R

Carlos J. Gil Bellosta cgb en datanalytics.com
Vie Ene 18 14:22:49 CET 2013


Hola, ¿qué tal?

Pues, por eliminación, parece que sí:

http://books.google.com/ngrams/graph?content=craso%2Ccraso+error%2C+error+craso&year_start=1800&year_end=2000&corpus=21&smoothing=3&share=

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

El día 18 de enero de 2013 11:14, "Olivier Nuñez" <onunez en unex.es> escribió:
> Carlos,
>
> tu ultima opción es de lejos la más rápida entre las insesgadas.
> Por cierto, ya que te tengo, el adjetivo "craso" se puede utilizar con otro
> sustantivo que no sea "error"?
> Un abrazo. Olivier
>
>> Hola, ¿qué tal?
>>
>> Sí, mi opción 2 ha sido un craso error. Aquí va otra un poco más fina:
>>
>> sim4 <- function(nreps)  {
>>   nb1 <- 10  # 10 blue marbles in Urn 1
>>   nb2 <- 6  # 6 blue marbles orig. in Urn 2
>>   n1  <- 18  # number of marbles in Urn 1 at 1st pick
>>   n2  <- 13  # number of marbles in Urn 2 at 2nd pick
>>
>>   # number of cases in which you pick blue in first urn
>>   n.blue <- rbinom(1, nreps, nb1 / n1)
>>
>>   n.blue.1 <- rbinom(1, nreps - n.blue, nb2 / n2)
>>   n.blue.2 <- rbinom(1, n.blue, (nb2+1) / n2)
>>
>>   (n.blue.1 + n.blue.2) / nreps
>> }
>>
>>> system.time(sim4(100000))
>>    user  system elapsed
>>   0.000   0.000   0.001
>>> system.time(sim1(100000))
>>    user  system elapsed
>>   0.904   0.000   0.918
>>
>> Un saludo,
>>
>> Carlos J. Gil Bellosta
>> http://www.datanalytics.com
>>
>> 2013/1/18 Olivier Nuñez <onunez en unex.es>:
>>> Tania,
>>>
>>> aquí se optimiza vectorizando el bucle (ver The Art of R Programming: A Tour
>>> of Statistical Software Design de Norman Matloff)
>>>
>>> sim3 <- function(nreps)  {
>>>
>>>    nb1 <- 10  # 10 blue marbles in Urn 1
>>>    nb2 = 6  # 6 blue marbles orig. in Urn 2
>>>    n1 <- 18  # number of marbles in Urn 1 at 1st pick
>>>    n2 <- 13  # number of marbles in Urn 2 at 2nd pick
>>>    count <- 0  # number of repetitions in which get blue from Urn 2
>>>    u <- matrix(c(runif(2*nreps)),nrow=nreps,ncol=2)
>>>    cndt <- (u[,1] <= nb1/n1) & (u[,2] <= (nb2+1)/n2) | (u[,1] > nb1/n1) &
>>> (u[,2] <= nb2/n2)
>>>    return(mean(cndt))  # est. P(pick blue from Urn 2)
>>> }
>>>
>>> Un saludo. Olivier
>>>
>>> PD: creo que la función que propone Carlos lleva a una estimación sesgada.
>>>
>>>> system.time(sim3(100000))
>>>    user  system elapsed
>>>   0.039   0.018   0.058
>>>> system.time(sim1(100000))
>>>    user  system elapsed
>>>   2.002   0.035   2.034
>>>
>>> -- ____________________________________
>>>
>>> Olivier G. Nuñez
>>> Email: onunez en unex.es
>>> http://matematicas.unex.es/~onunez
>>> Tel : +34 663 03 69 09
>>> Departamento de Matemáticas
>>> Universidad de Extremadura
>>>
>>> ____________________________________
>>>
>>>
>>>
>>>
>>>
>>> El 17/01/2013, a las 20:00, Tania Patiño escribió:
>>>
>>>
>>>>  nb1 <- 10  # 10 blue marbles in Urn 1
>>>>    n1 <- 18  # number of marbles in Urn 1 at 1st pick
>>>>    n2 <- 13  # number of marbles in Urn 2 at 2nd pick
>>>
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
> --
> ____________________________________
>
>
> Olivier G. Nuñez
> Email: onunez en unex.es
> http://kolmogorov.unex.es/~onunez
> Tel : +34 663 03 69 09
> Departamento de Matemáticas
> Universidad de Extremadura
>
>
> ____________________________________
>
>
>
>



Más información sobre la lista de distribución R-help-es