26 de abril de 2017
R
r1 <- 1 r2 = 2 # Si pongo una variable sin ninguna operacion se imprime en pantalla r1
## [1] 1
r2
## [1] 2
Una vez que una variable se crea, "vive" en la sesión salvo que la borre con rm
operaciones: +, - , *, /, ^, sqrt(.), exp(.), log(.), etc.
area1 <- 2 * pi * r1 area1
## [1] 6.283185
bool1 <- (area1 == 2) (TRUE && (2 < 1)) || TRUE
## [1] TRUE
palabra1 <- "probando" palabra2 <- "hola" paste(palabra1,palabra1,palabra2,sep=", ") # concatenar caracteres con separador
## [1] "probando, probando, hola"
varmissing<- NA is.na(varmissing)
## [1] TRUE
vector1 <- c(1, 5, 9, -1, 4) vector1
## [1] 1 5 9 -1 4
vector2 <- seq(1, 2, 0.5) vector2
## [1] 1.0 1.5 2.0
vector3 <- rep(5, 7) vector3
## [1] 5 5 5 5 5 5 5
vector1[c(1,2)]
## [1] 1 5
c(vector1,c(1,2))
## [1] 1 5 9 -1 4 1 2
vector1[-2]
## [1] 1 9 -1 4
operaciones: +, -, *(escalar), mean(.), max(.), length(.), etc.
vector1 < 5
## [1] TRUE FALSE FALSE TRUE TRUE
sum(vector1 < 5)
## [1] 3
pueden tener elementos de todo tipo
lista <- list(nombre="Juan", edad=35, nombrehijos=c("Juana", "Ana")) lista$nombre
## [1] "Juan"
lista[[2]]
## [1] 35
Quiero obtener todos los indices TRUE del vector
indicestrue <- c() for (i in 1:length(vector1)) { if ((vector1<5)[i]) { indicestrue <- c(indicestrue, i) } } indicestrue
## [1] 1 4 5
Me gustaria reutilizar esto
IndicesTrue <- function(vector){ indicestrue <- c() for (i in 1:length(vector)) { if ((vector)[i]) { indicestrue <- c(indicestrue, i) } } indicestrue # o return(indicestrue) } IndicesTrue(c(TRUE, TRUE, FALSE))
## [1] 1 2
sample(c(0, 1), 10, replace=TRUE)
## [1] 0 1 1 1 1 0 0 1 0 1
Tirar una moneda equilibrada 10 veces
sample(c(0, 1), 10, replace=TRUE, prob=c(0.7, 0.3))
## [1] 0 0 0 0 0 0 0 1 0 0
Tirar 10 veces una moneda con probabilidad 0.3 de salir cara
sample(c(rep("roja", 6), rep("blanca", 3)), 6, replace=FALSE)
## [1] "blanca" "roja" "roja" "roja" "roja" "roja"
Sacar 6 bolitas sin reposición de una urna con 6 rojas y 3 blancas
Si un análisis que involucra una generación aleatoria
Tengo que garantizar que otra persona pueda obtener los mismos resultados
set.seed(0906) sample(c(0,1),5,replace=TRUE)
## [1] 1 1 0 0 0
sample(c("BUENO","MALO"),3,replace=TRUE)
## [1] "MALO" "BUENO" "MALO"
Ejemplo con binomial Bi(10,1/2):
dbinom(5,10,0.5) # puntual
## [1] 0.2460938
pbinom(2,10,0.5) # acumulada
## [1] 0.0546875
qbinom(0.5,10,0.5) # percentil
## [1] 5
rbinom(20,10,0.5) # realizaciones del experimento
## [1] 3 5 4 3 3 5 7 4 3 6 4 6 2 5 6 8 5 8 4 5
también: *geom, *dnbinom, *norm, *gamma, *exp, etc.
Quiero calcular la proba aproximada de un evento:
P(evento) \(\approx f_n\), con \(n\) grande
con \(f_n\): frecuencia relativa con la que lo veo al evento en \(n\) repeticiones
EJEMPLO: aproximar la proba de sacar exactamente 5 caras o una cantidad par de caras en 10 tiros
casosfavorables <- 0 for (i in 1 : 1000) { muestra <- sample(c(0, 1), 10, replace = TRUE) if (sum(muestra) == 5 || (sum(muestra) %% 2) == 0) { casosfavorables <- casosfavorables + 1 } } casosfavorables / 1000
## [1] 0.759
Tiramos repetidamente una moneda sesgada con probabilidad 0.6 de salir cara (A) y 0.4 de salir ceca (E). En esta secuencia de tiros, un grupo es una secuencia consecutiva de tiros que salen del mismo lado de la moneda. Por ejemplo, los grupos de AEEEAEAEE son:
Aproximar la probabilidad de ganar el juego de Monty Hall para las dos estrategias posibles: quedarse o cambiar.
x <- seq(-3,3,0.1) y <- dnorm(x) plot(x,y,type="l",main="Densidad de una normal estándar") points(rnorm(20),rep(0,20))
h <- rbinom(10000,10,0.5) barplot(table(h))
Reglas:
Quiero contratar una sola persona entre \(n\) (conocido) candidatos.
Los candidatos son entrevistados secuencialmente en un orden al azar.
Puedo rankear a los candidatos de mejor a peor sin empates. La decisión se contratar a un candidato debe basarse sólo en el ranking relativo de los candidatos entrevistados hasta el momento.
Un candidato rechazado no puede ser llamado ni contratado luego.
Sólo estoy contento si elijo al mejor.
Si mi estrategia es descartar los primeros \(r-1\) candidatos y después elegir el candidato que sea el mejor en el ranking relativo de los entrevistados hasta el momento.
Programar una función que dado \(n\) y \(p\) un porcentaje calcule la probabilidad de elegir al mejor dejando pasar aprox al p porciento de los \(n\) candidatos.
Hacer un gráfico de la probabilidad de elegir al mejor en función del porcentaje de \(n=50\).
¿Cómo qué porcentaje de \(n=50\) debería tomar a r para maximizar la probabilidad de elegir al mejor?
Comparar el grafico de barras de una hipergeometrica (500,350,10) con el de una binomial con parametros (10,0.7).