Ejercicios: Probabilidad y simulación con R

#Ejercicio 1
En un ensayo clínico se ha tomado como muestra un total de 100 pacientes. La probabilidad de que el paciente padezca una enfermedad cardiovascular es de 0.45. Calculad: a) La probabilidad de que exactamente 30 pacientes padezcan esta enfermedad. b) La probabilidad de que al menos 15 pacientes tengan esta enfermedad. ¿Os parece curioso este resultado? c) Obtened la probabilidad de que entre 5 y 10 pacientes (ambos inclusive) tengan la enfermedad.

#Variables
n<-100
p<-0.45
#Apartado a con la función de densidad de una distribución binomial
k1<-30
dbinom(k1, n, p)
## [1] 0.0007757151
#Apartado b con la función distribución de una distribución binomial
k2<-15
1-pbinom(k2-1,n,p)
## [1] 1
#Apartado c
k3<-10
k4<-5
pbinom(k3,n,p)-pbinom(k4-1,n,p)
## [1] 2.914798e-14

#Ejercicio 2
a) Generad 500 observaciones de una distribución binomial, B(1, 0.5) y almacenad los datos en un vector llamado «Bino». Calculad las frecuencias absolutas y relativas de los valores generados en el vector anterior. ¿Qué observáis con el resultado que habéis obtenido? b) Si en promedio hay 12 individuos por minuto cruzando una calle, calculad la probabilidad de que 18 o más individuos crucen esta calle en un minuto cualquiera.

#Apartado a con distribución binomial
set.seed(999)
Bino<-rbinom(500, 1, 0.5)
table(Bino) #Frecuencias absolutas
## Bino
##   0   1 
## 253 247
prop.table(table(Bino))#Frecuencias relativas: se observa que prácticamente se obtiene un 50-50 para los valores 0 y 1.
## Bino
##     0     1 
## 0.506 0.494
#Apartado b con didsitrbución de Poisson
x<-18
lambda1<-12
1-ppois(x-1, lambda1)
## [1] 0.0629663

#Ejercicio 3
Supongamos que estamos en una fábrica de fármacos para el dolor de cabeza que realiza un número específico de fármacos por minuto y que sigue una distribución de Poisson con parámetro ʎ = 0.5. Determinad: a) La probabilidad de que, en un minuto al azar, se genere un único fármaco. b) La probabilidad de que, en un minuto al azar, se generen un máximo de 3 fármacos. c) La probabilidad de que se generen 4 fármacos en 8 minutos.

#Variable
lambda2<-0.5
#Apartado a
t1<-1
dpois(t1,lambda2)
## [1] 0.3032653
#Apartado b
t2<-3
ppois(t2, lambda2)
## [1] 0.9982484
#Apartado c
lambda3<-0.5*8
t3<-4
dpois(t3, lambda3)
## [1] 0.1953668

#Ejercicio 4
Disponemos de una urna con 40 bolas. 25 son amarillas y las demás son verdes. Asignaremos el valor 1 a las bolas amarillas y el 0 a las bolas de color verde: a) Calculad la probabilidad de extracción de cada tipo de bola. b) Simulación de la extracción de una bola sin remplazo. c) Simulación de 9 extracciones con remplazo.

set.seed(999)
n2<-40
bolas_a<-25
bolas_v<-15
#Apartado a
prob_amarilla<-bolas_a/n2
prob_verde<-bolas_v/n2
prob_amarilla
## [1] 0.625
prob_verde
## [1] 0.375
#apartado b
set.seed(999)
sim1<-sample(0:1, 1, prob=c(prob_amarilla,prob_verde))
sim1
## [1] 0
#Apartado c
sim2<-sample(0:1, 9, replace=TRUE, prob=c(prob_amarilla,prob_verde))
sim2
## [1] 0 0 1 1 0 0 0 0 0

#Ejercicio 5
Resolved los apartados siguientes: a) Calculad la probabilidad de obtener cuatro caras al lanzar seis veces una moneda perfecta. b) Calculad la probabilidad de obtener como mucho cuatro caras al lanzar seis veces una moneda perfecta. c) Generad 10 valores seudoaleatorios de una distribución X~B(6,0.5). d) Generad una muestra de tamaño 10000 de una distribución normal N(3,2) y cread un histograma con las barras de color con la muestra que se os ha dado. e) Tal como hemos visto en teoría, vamos a ver si la suma de estas dos variables normales x1~N(6, 0.5) y x2~N(3, 0.6) también es una variable normal.

#Apartado a
nc<-4
lanz<-6
prob<-0.5
dbinom(nc, lanz, prob)
## [1] 0.234375
#Apartado b
pbinom(nc, lanz, prob)
## [1] 0.890625
#Apartado c
m<-10
n3<-6
prob2<-0.5
rbinom(m,n3,prob2)
##  [1] 2 3 1 6 1 4 2 4 2 1
#Aapartado d
m2<-10000
mu<-3
sigma<-2
distr_norm1<-rnorm(m2,mu,sigma)
hist(distr_norm1, freq =FALSE, main="Distribución N(3,2) de muestra con tamaño 10000", xlab="Valor", ylab="Frecuencia")
curve(dnorm(x, mean = 3, sd = 2), from = -5, to = 10, add = TRUE)

#Apartado e
mu2<-6
sigma2<-0.5
dist_x1<-rnorm(m2, mu2, sigma2)
mu3<-3
sigma3<-0.6
dist_x2<-rnorm(m2, mu3, sigma3)
suma=dist_x1+dist_x2
head(suma)
## [1]  8.350974  9.480364  8.975552  9.028347 10.091308  8.704733
plot(density(suma), main="Suma normales", col="turquoise")
legend("topright", c("Muestra de la suma", "Suma teórica"), fill=c("turquoise", "coral"))
curve(dnorm(x, mean = mu2 + mu3, sd = sqrt(sigma2^2 + sigma3^2)), from = 6, to = 12, add = TRUE, col = "coral") #Se confirma lo visto en teoría

#Ejercicio 6
Imaginemos un juego en el que tiramos un dado 5 veces en cada partida y queremos simular 8 partidas del juego y ver partidas ganadoras. Las partidas ganadoras serán aquellas que tengan un 6 en alguna de las tiradas del dado.

set.seed(999)
num_rep<-8
sim3<-replicate(n=num_rep,{
  partida=sample(1:6, size=5, replace=TRUE)
})
ganadoras <- sum(apply(sim3, 2, function(x) 6 %in% x))
sim3
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,]    3    1    5    2    4    2    3    2
## [2,]    4    2    6    1    1    2    2    2
## [3,]    5    2    6    5    5    4    1    4
## [4,]    1    6    3    3    5    1    1    4
## [5,]    6    3    3    2    1    5    3    4
cat("Número partidas ganadoras:", ganadoras)
## Número partidas ganadoras: 3

#Ejercicio 7
Tenemos un bol con 3 tipos de manzanas (golden, fuji, gala). a) ¿Cuántas permutaciones tendremos? La teoría dice que serán 32 permutaciones, es decir, 9 parejas. b) ¿Cuántas combinaciones podemos tener? c) Por otro lado, calculad cuántos codones hay que tengan todos sus nucleótidos distintos. Recordad que los nucleótidos son A, T, G, C.

#Apartado a
library(gtools)
manzana<-c("golden", "fuji", "gala")
perm1<-permutations(3,2,v=manzana,repeats.allowed = TRUE)
cat("Número permutaciones:", nrow(perm1), "\n")
## Número permutaciones: 9
#Apartado b
perm2<-permutations(3,2,v=manzana,repeats.allowed = FALSE)
cat("Número permutaciones:", nrow(perm2), "\n")
## Número permutaciones: 6
#Apartado c: codones que no tengan repeticiones de nucleótidos
nucleotidos<-c("A", "T", "G", "C")
codones<-permutations(4,3,v=nucleotidos,repeats.allowed = FALSE)
cat("Número codones sin nucleótidos repetidos:", nrow(codones), "\n")
## Número codones sin nucleótidos repetidos: 24
#Si no nos importa que haya nucleótidos repetidos en los codones, entonces:
nucleotidos<-c("A", "T", "G", "C")
codones2<-permutations(4,3,v=nucleotidos,repeats.allowed = TRUE)
cat("Número codones totales:", nrow(codones2), "\n")
## Número codones totales: 64

#Ejercicio 8
Dada una distribución N(μ,σ2) ~ N(20,9), a) calculad los cuartiles (0.25,0.5,0.75). b) calculad la probabilidad P[X >= 8]. c) representad la función de densidad.

#Apartado a: cálculo de los 3 cuartiles
mu4<-20
sigma4<-9
qnorm(0.25,mu4,sigma4)
## [1] 13.92959
qnorm(0.5,mu4,sigma4)
## [1] 20
qnorm(0.75,mu4,sigma4)
## [1] 26.07041
#Apartado b:
1-pnorm(8,mu4,sigma4)
## [1] 0.9087888
#Apartado c
curve(dnorm(x,mu4,sigma4), from=10, to=30,main="Función densidad de N(20,9)", col="turquoise")

#Ejercicio 9
A partir del conjunto de datos ChickWeight, buscad un resumen estadístico de la variable weight. Buscad una muestra de 30 polluelos con el comando sample() de forma aleatoria llamada Mimuestra3 y generad un nuevo conjunto de datos con solo los registros seleccionados en tu muestra. Cread un dataframe nuevo, con este subconjunto de datos llamado Mimuestra3, y comprobad si los 30 registros siguen una distribución de la variable weight parecida.

library(datasets)
data("ChickWeight")
summary(ChickWeight)
##      weight           Time           Chick     Diet   
##  Min.   : 35.0   Min.   : 0.00   13     : 12   1:220  
##  1st Qu.: 63.0   1st Qu.: 4.00   9      : 12   2:120  
##  Median :103.0   Median :10.00   20     : 12   3:120  
##  Mean   :121.8   Mean   :10.72   10     : 12   4:118  
##  3rd Qu.:163.8   3rd Qu.:16.00   17     : 12          
##  Max.   :373.0   Max.   :21.00   19     : 12          
##                                  (Other):506
set.seed(999)
muestra=30
Mimuestra3 <- sample(1:nrow(ChickWeight),muestra, replace=FALSE)
Mimuestra3
##  [1] 324  61 361 186  10 291 279 207 391 403 491  82 421 460 393 181 375 549 441
## [20] 378 249 223  16 541 363 258   9 353 411 344
mimuestra<-ChickWeight[Mimuestra3,]
summary(mimuestra) #Al hacer los 2 summary vemos que la distribución de los datos no es del todo parecida.
##      weight           Time          Chick    Diet  
##  Min.   : 41.0   Min.   : 0.0   32     : 3   1: 8  
##  1st Qu.: 66.0   1st Qu.: 6.0   1      : 2   2: 6  
##  Median :139.5   Median :12.0   36     : 2   3:13  
##  Mean   :139.9   Mean   :11.7   35     : 2   4: 3  
##  3rd Qu.:203.5   3rd Qu.:19.5   16     : 1         
##  Max.   :321.0   Max.   :21.0   17     : 1         
##                                 (Other):19

#Ejercicio 10
Resolved los siguientes y comentad los resultados obtenidos: Se ha realizado un estudio a partir del cual se sabe que un determinado fármaco reduce los efectos de la alergia al polen. Con los datos obtenidos hasta el momento, solo en el 4 % de los casos no ha surgido efecto. a) ¿Qué tipo de distribución representa este caso? ¿Cuál es la probabilidad de que si se realiza la técnica 100 veces haya más de 5 casos en los que el fármaco no sea efectivo? b) La duración media de recuperación de una gripe común es de 7 ± 2 días (media y desviación estándar). Suponiendo que se trata de una distribución normal, calculad la probabilidad de que la recuperación dure entre 6 y 10 días.

#Apartado a
#Es una distribución binomial ya que lo que estudiamos es si el fármaco surge efecto o no, es decir, solamente 2 posibilidades.
n4<-100
p2<-0.04
1-pbinom(5,n4, p2)
## [1] 0.2116251
#Apartado b
mu5<-7
sigma5<-2
pnorm(10,mu5,sigma5)-pnorm(5,mu5,sigma5)
## [1] 0.7745375