Archivo de la etiqueta: simulación

¿6 grados de separación? Una simulación poco seria con R

Me pregunto si puedo demostrar la teoría de los seis grados de separación. Tengo muy oxidados los bucles con R. Ganas de probar Amazon Web Services.Pues manos a la obra. ¿Es posible con R establecer que una persona esté enlazada con otra en menos de 6 pasos? Hoy no voy a probrar Amazon Web Services, me voy a limitar a mostraros que se me ha ocurrido para demostrar esta teoría.

Dentro de una población un individuo manda una carta. Creamos una red de cartas y buscamos en que punto de esa red le devuelven la carta. No me atrevo a determinar el número de amigos que puede tener un individuo. Tampoco tengo tiempo para realizar una simulación con los 5.000 millones de habitantes del planeta. Así que os planteo una simulación muy poco seria con R. Muy sencillo:
######################################################
#La población es de 5.000.000 personas
poblacion = 5000000

grados <-c()

for (i in 1:100){
#Seleccionamos a una persona
individuo <- sample( 1:poblacion , 1 )
#Creamos unared de envíos
red = sample( 1:poblacion, poblacion )

envio=1
repeat
{ if (individuo==red[envio]) break
envio = envio + 1;
}
grados = cbind(grados,round(envio^(1/rpois(1,10))))
}

5 millones de personas, hacemos un bucle for que nos permite realizar 100 simulaciones. Seleccionamos un individuo al azahar (como decía aquel) y creamos una red de envíos con todas las personas hasta el tamaño de la población. Esto seguramente se pueda mejorar. Si el individuo que ha mandado la carta aparece dentro de mi red ya puedo determinar el número de envíos. Y ahora viene lo menos riguroso. En función del número de envíos puedo determinar el número de grados de separación hasta que a mi individuo inicial le llega la carta. Los grados serían la raíz del número de amigos y en este caso determino que el número de amigos sigue una distribución de poisson de media 10. Vamos acumulando las simulaciones en un vector del que calculamos la mediana y obtenemos 5 grados de separación.

No sé si 6 grados será suficiente. A ver si arrancamos con AWS. Saludos.

Cuánto dinero pierdo jugando a la lotería. Una simulación poco seria con R

Esta pantalla es muy habitual en mi televisor todos los jueves por la noche. Son los resultados de la Lotería Nacional de España, el sorteo de los jueves. Mi mujer insiste en comprar lotería para dejar de ser pobres. No es una buena opción. Aunque por lo menos ahora compramos lotería nacional. Antes jugábamos a eso de la Bonoloto, las probabilidades de que te toque son menores que la cantidad de sustancias dopantes que le encontraron al gran Alberto Contador. Eso lo entendió, pero había que jugar. ¿Y cuánto nos cuesta jugar?

Pues empecemos con el número de semanas que deseamos simular, unos 5 años, unas 250 semanas y simulemos números entre 0 y 99999 y los correspondientes premios que son:

¿Quién ganará la liga española? Una simulación poco seria con R

Está a punto de acabar un partido de futbol entre la Real Sociedad y el Barcelona y me temo que esta jornada vuelven a ganar los equipos que más dinero ganan por los derechos televisivos de la liga española. El Real Madrid está a 7 puntos del Barcelona. Está claro que el Barcelona ganará al Real en su campo. Si asumimos que los dos equipos tienen un 80% de posibilidades de ganar el partido, un 10% de empatarlo y un 10% de perderlo ¿cual es la probabilidad de que gane alguno de los dos equipos?

Pido disculpas por la "poca profesionalidad" del código pero últimamente pico poco código en R, de todas formas es muy sencillo de entender y no voy a entrar en profundidad:

library(memisc)

final_madrid<-data.frame()
for (i in 1:1000){
madrid = runif(16)
madrid <- recode(madrid,
0 <- range(0,0.1),
1 <- range(0.1,0.2),
3 <- range(0.2,1))
final_madrid = rbind(final_madrid,sum(madrid,52))}

final_barcelona<-data.frame()
for (i in 1:1000){
barcelona = runif(16)
barcelona <- recode(barcelona,
0 <- range(0,0.1),
1 <- range(0.1,0.2),
3 <- range(0.2,1))
final_barcelona = rbind(final_barcelona,sum(barcelona,45,3))}

resultado_liga = cbind(final_madrid,final_barcelona)
names(resultado_liga)=c("madrid","barcelona")

resultado_liga$campeon = ifelse(resultado_liga$madrid>resultado_liga$barcelona,"Madrid","Barcelona")

table(resultado_liga$campeon)

He lanzado 1000 simulaciones y he obtenido unas probabilidades de 26% a favor del Barcelona y un 74% a favor del Madrid. ¿En las casas de apuestas está el resultado final 4 a 1? A ver que pasa, en unos meses volveré sobre esta entrada y espero decir que al final ganó la liga otro equipo, pero eso si que es improbable. Saludos.

Trucos Excel. Área bajo la curva ROC

curva-roc.png

¿Curva ROC y Excel? ¡Si no tiene nada que ver! No del todo.  En ocasiones tenemos que pintar las curvas ROC y empleamos las herramientas específicas para ello, sin embargo es habitual que nuestros resultados sean presentados en Excel (demasiado habitual). En ese caso creamos nuestros datos para llevarlos a Excel y realizamos nuestro gráfico. Ya tenemos nuestra tabla y hacemos un algo muy parecido a lo que tenemos más arriba. La curva ROC es un mecanismo para evaluar nuestro modelo y compara la especificidad que es la probabilidad de clasificar mal un caso negativo frente a la sensibilidad que es la probabilidad de clasificar correctamente un caso positivo, es decir, falsos positivos frente a verdaderos positivos. El área bajo la curva ROC será un valor entre 0,5 y 1. Cuanto más próximo a 1 mejor será nuestro modelo. Queda pendiente una revisión "en condiciones" de las curvas ROC y de los gráficos lift, mucho mejores cuando tienes que presentar resultados en un área de negocio.

Entonces, ya tenemos el gráfico en Excel y nos piden hayar el área bajo la curva ROC. ¿Cómo lo hacemos esto? Mediante una simulación por método Montecarlo. Creamos números aleatorios y si están por encima de la sensibilidad pues no valen. Posteriormente sumamos los que valen entre todos los que tenemos y hemos obtenido un valor muy próximo al área bajo la curva ROC. En realidad es un método para estimar el área de un póligono. Para entender mejor como se realiza el proceso os un documento de Excel con datos simulados:

curva_roc con datos simulados. Veréis que es muy sencillo. No se puede ser más dinosaurio pero ya verás como a más de uno se le enciende la bombilla. Saludos.

Simulación. Estimación de pi con el método Montecarlo

La simulación es un campo que está tomando una gran importancia. Nos está permitiendo evaluar comportamientos extremos sin ningún tipo de riesgos. Casi nadie se imaginaba que el escenario económico actual podía cambiar con la velocidad que lo está haciendo. Imaginemos una modificación brusca de los ratios de morosidad implicará que las entidades bancarias tengan que modificar sus fondos de previsión. Esta misma morosidad puede afectar a las aseguradoras de crédito que tienen que estimar sus provisiones técnicas. Ahora mismo es necesario simular las condiciones más extremas para los datos futuros y la simulación nos permite experimentar para aproximarnos al problema.

El primer acercamiento a la simulación lo vamos a realizar mediante el método Montecarlo. Sigue leyendo Simulación. Estimación de pi con el método Montecarlo