Cosa prodigiosa, sin palabras (I)

Hoy voy a hacer mención a una cosa prodigiosa. Pero sin palabras. Voy a regalar a mis lectores tres pedazos de código que son este

jugar <- function( n, make.step ){
  tmp <- rep( 0L, n)
  for( i in 2:n )
    tmp[i] <- make.step( tmp[i-1] )
  tmp
}
 
juego.s <- function( x, prob.perder = 0.51 ){
  x + ifelse( runif(1) < prob.perder, -1L, 1L )
}
 
res.juego.s <- replicate( 1000, jugar( 1000, juego.s )[1000] )
hist( res.juego.s )
fivenum( res.juego.s )

este

juego.c <- function( x ){
  prob.perder <- ifelse( x %% 3 == 0, 0.905, 0.255 )
  juego.s( x, prob.perder )
}
 
res.juego.c <- replicate( 1000, jugar( 1000, juego.c )[1000] )
 
hist( res.juego.c )
fivenum( res.juego.c )

y este otro

juego.fin <- function( x ){
  sample( c( juego.c, juego.s), 1 )[[1]](x)
}
 
res.juego.fin <- replicate( 1000, jugar( 1000, juego.fin )[1000] )
 
hist( res.juego.fin )
fivenum( res.juego.fin )

Es una cosa tan maravillosa que no les voy a robar la oportunidad de averiguar por sí mismos en qué consiste. La semana que viene, en la segunda entrega, comentaré el código anterior y explicaré a qué se refiere y, si nadie lo ha dado a conocer antes, dónde reside lo miraculoso del asunto.

Y en la tercera, la última, ofreceré referencias y plantearé un problema que no sé si alguien podrá resolver (y si lo resuelve en la dirección que sospecho, habrá encontrado un sorprendente bug donde menos cabría esperarlo).

Licencia Creative Commons
Cosa prodigiosa, sin palabras (I) por Carlos J. Gil Bellosta, a excepción del contenido de terceros y de que se indique lo contrario, se encuentra bajo una Licencia Creative Commons Attribution-ShareAlike 4.0 International Licencia.

5 comentarios sobre “Cosa prodigiosa, sin palabras (I)

  1. Jose Luis 12 enero, 2012 12:19

    Hola.

    Una pregunta un poco tonta. ¿ Por qué el uso de la L en 1L ,por ejemplo?

  2. ChrisL 12 enero, 2012 13:43

    Hola.

    Tengo la misma pregunta que Luis. No entendio el uso de ‘L’.

    Si no me equivoco, jugar(x,make.step) describe un camino como: x<-x+make.step
    Con juego.s, es el usual camino aleatorio: x<-x+1 con probabilitad 1/2 y x<-x-1 con probabilidad 1/2
    Con juego.c, el paso depiende de x:
    si x=3k, x<-x+1
    si x=3k+1, x<-x-1 con probabilidad 0.905, si no, x<-x+1
    si x=3k+2, x<-x-1 con probabilidad 0.255, si no, x<-x+1
    Con juego.fin, el paso viende de juego.c o juego.s con probabilidad 1/2

    Los resultados son el final position despues 1000 pasos.
    Pero no se que es tan maravillosa. Las tres distribuciones son muy differentes:
    p<-ggplot(
    data.frame(
    endPoint=c(res.juego.c,res.juego.s,res.juego.fin),
    juego=rep(c("juego.c","juego.s","juego.fin"),1,each=1000)))
    p<-p+geom_density(aes(x=endPoint,fill=juego),alpha=0.3)
    print(p)

    ¡Tengo muchas ganas de conocerlo!

  3. datanalytics 12 enero, 2012 16:58

    @ChrisL @Jose Luis Voy a hacer una entrada sobre lo de la L. Pero pensaba que era conocido. Mirad, sin ir más lejos, el código de la función “sample” y, dentro de él, el primer “if”.

Los comentarios están desabilitados.