Instalar Librerias

You can also embed plots, for example:

if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")   
}
library(ggplot2)

if (!requireNamespace("ggforce", quietly = TRUE)) {
  install.packages("ggforce")   
}
library(ggforce)

if (!requireNamespace("knitr", quietly = TRUE)) {
  install.packages("knitr")   
}
library(knitr)

if (!requireNamespace("kableExtra", quietly = TRUE)) {
  install.packages("kableExtra")   
}
library(kableExtra)

Problema 1: Estimacíon π

Planteamiento del problema

área igual a π/4, está inscrito en un cuadrado cuya área es igual a 1. Se elige de forma aleatoria n puntos dentro del cuadrado . La probabilidad de que un punto esté dentro del círculo es igual a la fracción del área del cuadrado que abarca a este, la cual es π/4. Por tanto, se puede estimar el valor de π/4 al contar el número de puntos dentro del círculo, para obtener la estimación de π/4. De este último resultado se encontrar una aproximación para el valor de π

Desarrollo

# Definir la función para calcular pi
calcular_pi <- function(n) {
  x <- runif(n, min = 0, max = 1)
  y <- runif(n, min = 0, max = 1)
  
  d <- (x - 0.5)^2 + (y - 0.5)^2
  points_inside <- d < 0.25
  pi_estimado <- sum(points_inside) / n * 4
  return(list(pi_estimado = pi_estimado, points_inside = points_inside, x = x, y = y))
}
# Función para visualizar la estimación de pi
visualizar_pi <- function(n , resultados) {
  pi_estimado <- resultados$pi_estimado
  points_inside <- resultados$points_inside
  x <- resultados$x
  y <- resultados$y
  
  # Crear un dataframe para ggplot
  point <- data.frame(x = x, y = y, isInside = ifelse(points_inside, "Inside", "Outside"))
  
  # Crear el gráfico con ggplot2
  graphCircleInside <- ggplot(point, aes(x = x, y = y, colour = isInside)) +
    geom_point() + 
    ggtitle(paste('Visualizacion grafica con', n, 'puntos')) +
    labs(colour = "Puntos") +
    scale_color_manual(values = c("Inside" = "blue", "Outside" = "red"), labels = c(paste("Inside:", sum(points_inside)), paste("Outside:", sum(!points_inside)))) +
    geom_circle(aes(x0 = 0.5, y0 = 0.5, r = 0.5), color = "green", fill = NA) +
    annotate("text", x = 0.5, y = -0.1, label = paste("Estimación de π:", round(pi_estimado, digits = 4)), color = "black", hjust = 0.5, vjust = 0)
  
  print(graphCircleInside)
}
#valores_n <- c(10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000, 10000000, 50000000)

# Definir el valor de pi
pi <- pi

# Crear un vector de valores de n
valores_n <- c( 100, 500, 1000, 5000, 10000, 50000, 100000, 500000, 1000000)



# Crear un data frame para almacenar los resultados
resultados_df <- data.frame(n = numeric(length(valores_n)),
                            pi_estimado = numeric(length(valores_n)),
                            percError = numeric(length(valores_n)),
                            pointsIns = numeric(length(valores_n)),
                            percIns = numeric(length(valores_n)),
                            pointsOut = numeric(length(valores_n)),
                            percOut = numeric(length(valores_n)))

# Iterar sobre los valores de n
for (i in 1:length(valores_n)) {
  n <- valores_n[i]
  resultados <- calcular_pi(n)

  pi_estimado <- resultados$pi_estimado 
  porcentaje_error <- round(abs((pi_estimado - pi) / pi) * 100,2)
  
  # Contar puntos dentro y fuera
  puntos_adentro <- sum(resultados$points_inside)
  porcentaje_adentro <- round(puntos_adentro / n * 100, 2)
  puntos_afuera <- n - puntos_adentro
  porcentaje_afuera <- round(100 - porcentaje_adentro,2)
  
  # Almacenar resultados en el data frame
  resultados_df[i, "n"] <- n
  resultados_df[i, "pi_estimado"] <- pi_estimado
  resultados_df[i, "percError"] <- porcentaje_error
  resultados_df[i, "pointsIns"] <- puntos_adentro
  resultados_df[i, "percIns"] <- porcentaje_adentro
  resultados_df[i, "pointsOut"] <- puntos_afuera
  resultados_df[i, "percOut"] <- porcentaje_afuera
}

valores_n <- c( 10, 100, 1000, 10000)
for (i in 1:length(valores_n)) {
  n <- valores_n[i]
  resultados <- calcular_pi(n)
  visualizar_pi(n, resultados)
}

Resultados

En el conjunto de datos, se muestran estimaciones de π basadas en diferentes cantidades de puntos generados aleatoriamente. Cada fila representa un número de puntos (n) utilizados en la estimación, el valor estimado de π, el porcentaje de error en comparación con el valor real de π, la cantidad de puntos dentro del círculo inscrito, el porcentaje de puntos dentro del círculo, la cantidad de puntos fuera del círculo y el porcentaje de puntos fuera del círculo. Se observa que a medida que aumenta la cantidad de puntos utilizados en la estimación, el valor estimado de π se aproxima más al valor real, y el porcentaje de error disminuye

print(resultados_df)
##       n pi_estimado percError pointsIns percIns pointsOut percOut
## 1 1e+02    3.120000      0.69        78   78.00        22   22.00
## 2 5e+02    3.080000      1.96       385   77.00       115   23.00
## 3 1e+03    3.116000      0.81       779   77.90       221   22.10
## 4 5e+03    3.076800      2.06      3846   76.92      1154   23.08
## 5 1e+04    3.113200      0.90      7783   77.83      2217   22.17
## 6 5e+04    3.137040      0.14     39213   78.43     10787   21.57
## 7 1e+05    3.145640      0.13     78641   78.64     21359   21.36
## 8 5e+05    3.141376      0.01    392672   78.53    107328   21.47
## 9 1e+06    3.143104      0.05    785776   78.58    214224   21.42

En el siguiente gráfico de dispersión en escala logarítmica, representamos el valor estimado de π junto con una línea horizontal que indica el valor real de π. Observamos que a medida que incrementamos el número de puntos utilizados en la estimación, obtenemos una aproximación más precisa de π

# Cargar la biblioteca ggplot2
library(ggplot2)

scatter_plot <- ggplot(resultados_df, aes(x = n, y = pi_estimado)) +
  geom_point() + 
  geom_line(linetype = "dashed") +
  geom_hline(yintercept = pi, color = "blue") +
  labs(x = "n", y = "Valor estimado de π", title = "Valores estimados de π")+
  scale_x_log10()

# Imprimir el gráfico
print(scatter_plot)

Conclusión

A partir de los resultados obtenidos, se puede concluir que el método de estimación de π utilizando el enfoque de Montecarlo muestra una convergencia hacia el valor real de π a medida que se incrementa el número de puntos generados aleatoriamente. Se observa que, a medida que aumenta la cantidad de puntos utilizados en la estimación, el valor estimado de π se acerca más al valor real, lo que se refleja en una disminución del porcentaje de error. Sin embargo, es importante tener en cuenta que el aumento en la precisión de la estimación viene acompañado de un mayor requisito de poder computacional, ya que el procesamiento de un mayor número de puntos implica un aumento en la carga de trabajo para el sistema. Por lo tanto, si bien el método de Montecarlo es efectivo para obtener una aproximación precisa de π, su implementación práctica puede requerir recursos computacionales significativos

Problema 2: Propiedades de los estimadores

Planteamiento del problema

La simulación ayuda a entender y validad las propiedades de los estimadores estadísticos como son. insesgadez, eficiencia y la consistencia principalmente. El siguiente problema permite evidenciar las principales características de un grupo de estimadores propuestos para la estimación de un parámetro asociado a un modelo de probabilidad.

Sean X1, X2, X3 y X4, una muestra aleatoria de tamaño n = 4 cuya población la conforma una distribución exponencial con parámetro θ desconocido. Determine las características de cada uno de los siguientes estimadores propuestos:

Desarrollo

Primer creamos una función para los cuatro estimadores

estimadores <- function(X) {
  t1 <- (X[1] + X[2]) / 6 + (X[3] + X[4]) / 3 
  t2 <- (X[1] + 2 * X[2] + 3 * X[3] + 4 * X[4] ) / 5 
  t3 <- (X[1] + X[2] + X[3] + X[4]) / 4 
  t4 <- (apply(X, 1, min) + apply(X, 1, max)) / 2 
  return(data.frame(t1, t2, t3, t4))
}

Ahora una función para calcular las propiedaes de insesgadez, eficiencia y consistencia para cada estimador

calcular_propiedades_estimadores <- function(X, theta_verdadero) {
  # Calcular sesgo para cada estimador
  sesgo_t1 <- mean(-X[[1]] + theta_verdadero)
  sesgo_t2 <- mean(-X[[2]] + theta_verdadero)
  sesgo_t3 <- mean(-X[[3]] + theta_verdadero)
  sesgo_t4 <- mean(-X[[4]] + theta_verdadero)
  
  # Calcular eficiencia para cada estimador
  eficiencia_t1 <- mean(theta_verdadero^2 / var(X[[1]]))
  eficiencia_t2 <- mean(theta_verdadero^2 / var(X[[2]]))
  eficiencia_t3 <- mean(theta_verdadero^2 / var(X[[3]]))
  eficiencia_t4 <- mean(theta_verdadero^2 / var(X[[4]]))
  
  

  # Calcular consistencia para cada estimador
  consistencia_t1 <- var(X[[1]])+ mean(X[[1]] - theta_verdadero)^2
  consistencia_t2 <- var(X[[2]])+ mean(X[[2]] - theta_verdadero)^2
  consistencia_t3 <- var(X[[3]])+ mean(X[[3]] - theta_verdadero)^2
  consistencia_t4 <- var(X[[4]])+ mean(X[[4]] - theta_verdadero)^2
  
  # Crear un dataframe con los resultados
  resultado <- data.frame(
thetas = c("Tehta1", "Theta2", "Theta3", "Theta4"),
tamano_muestra = rep(nrow(lista_estimadores), 4),
sesgo = c(sesgo_t1, sesgo_t2, sesgo_t3, sesgo_t4),
eficiencia = c(eficiencia_t1, eficiencia_t2, eficiencia_t3, eficiencia_t4),
consistencia = c(consistencia_t1, consistencia_t2, consistencia_t3, consistencia_t4))
  
  return(resultado)
}

Resultados

Finalmente, hemos generado un conjunto de datos a partir de una distribución exponencial y calculado los estimadores junto con sus propiedades, utilizando muestras de tamaño 20, 50, 100 y 1000.

Se observa que a medida que aumenta el tamaño de la muestra, los sesgos de los estimadores tienden a disminuir y sus eficiencias a mejorar. Esto sugiere una aproximación más precisa al valor verdadero de theta y una reducción en la variabilidad de los estimadores.

theta <- 1  # Supongamos un valor para el parámetro theta
tamanos_muestra <- c(20, 50, 100, 1000)
#tamanos_muestra <- c( 1000)
# Generar dataframe de muestras
df_datos <- as.data.frame(matrix(rexp(4*1000, rate = 1/theta), ncol = 4))
colnames(df_datos) <- c("X1", "X2", "X3", "X4")

for (n in tamanos_muestra) {
  #cat("Tamanio de muestra:", n, "\n")
   lista_estimadores = estimadores(head(df_datos, n))
   df_datos$theta1 <- lista_estimadores[[1]]
   df_datos$theta2 <- lista_estimadores[[2]]
   df_datos$theta3 <- lista_estimadores[[3]]
   df_datos$theta4 <- lista_estimadores[[4]]
  resultado_propiedades <- calcular_propiedades_estimadores(lista_estimadores, theta)
  print(resultado_propiedades)
}
##   thetas tamano_muestra      sesgo eficiencia consistencia
## 1 Tehta1             20 -0.1995770  2.4987296    0.4400343
## 2 Theta2             20 -1.3007340  0.6281599    3.2838603
## 3 Theta3             20 -0.1924097  2.3524373    0.4621125
## 4 Theta4             20 -0.4909550  1.2957016    1.0128194
##   thetas tamano_muestra       sesgo eficiencia consistencia
## 1 Tehta1             50 -0.05456007  3.4173439    0.2956017
## 2 Theta2             50 -1.10831742  0.8392597    2.4198938
## 3 Theta3             50 -0.02968720  3.2864553    0.3051605
## 4 Theta4             50 -0.51943545  1.9553551    0.7812292
##   thetas tamano_muestra        sesgo eficiencia consistencia
## 1 Tehta1            100 -0.018585448  3.7694673    0.2656349
## 2 Theta2            100 -1.051789765  0.8650005    2.2623304
## 3 Theta3            100 -0.009299811  3.8350020    0.2608425
## 4 Theta4            100 -0.396215074  2.8296362    0.5103887
##   thetas tamano_muestra        sesgo eficiencia consistencia
## 1 Tehta1           1000  0.003708146  3.3632615    0.2973442
## 2 Theta2           1000 -0.992990622  0.7640388    2.2948643
## 3 Theta3           1000  0.002017060  3.7930144    0.2636466
## 4 Theta4           1000 -0.457016584  2.7722478    0.5695823

Se observa que Theta1 exhibe un sesgo cercano a cero, indicando una menor tendencia a sesgar los resultados. Sin embargo, Theta3 también muestra un sesgo similarmente cercano a cero, y además presenta el menor error medio cuadrático (EMC), lo que sugiere una mayor consistencia en sus estimaciones. Destaca también su eficiencia más alta, resultado de su menor variabilidad en comparación con los otros estimadores.

Por otro lado, Theta2 muestra una alta variabilidad que se traduce en resultados menos favorables en comparación con los otros estimadores, lo que sugiere que no es un estimador tan robusto como los demás.

# Convertir el data frame a formato largo (tidy data)
df_long <- tidyr::gather(data = df_datos[, 5:8], key = "Theta", value = "Valores")

# Crear el gráfico utilizando ggplot2
ggplot(data = df_long, aes(x = Theta, y = Valores)) +
  geom_boxplot(fill = "lightblue", color = "black", alpha = 0.7, width = 0.5) +
  labs(title = "Diagrama de caja de bigotes de Theta's con n = 1000",
       x = "Theta",
       y = "Valores") +
  geom_hline(yintercept = 1, color = "red", linetype = "dashed", size = 0.5) +  # Agregar línea horizontal en y = 1
  theme_minimal()

Problema 3: Teorema del Límite Central

Planteamiento del problema

El Teorema del Límite Central es uno de los más importantes en la inferencia estadística y habla sobre la convergencia de los estimadores como la proporción muestral a la distribución normal. Algunos autores afirman que esta aproximación es bastante buena a partir del umbral n > 30.

A continuación se describen los siguientes pasos para su verificación:

  1. Realice una simulación en la cual genere una población de n = 1000 (Lote), donde el porcentaje de individuos (supongamos plantas) enfermas sea del 50%.

  2. Genere una función que permita:

  • Obtener una muestra aleatoria de la población y

  • Calcule el estimador de la proporción muestral para un tamaño de muestra dado n�.

  1. Repita el escenario anterior (b) n = 500 veces y analice los resultados en cuanto al comportamiento de los 500 resultados del estimador pˆ . ¿Qué tan simétricos o sesgados son los resultados obtenidos? y ¿qué se puede observar en cuanto a la variabilidad?. Realice en su informe un comentario sobre los resultados obtenidos.

  2. Repita los puntos b y c para tamaños de muestra n= 5, 10, 15, 20, 30, 50, 60, 100, 200, 500. Compare los resultados obtenidos para los diferentes tamaños de muestra en cuanto a la normalidad. Utilice pruebas de bondad y ajuste (shapiro wilks :shspiro.test()) y métodos gráficos (gráfico de normalidad: qqnorm()). Comente en su informe los resultados obtenidos

  1. Repita toda la simulación (puntos a – d), pero ahora para lotes con 10% de plantas enfermas y de nuevo para lotes con un 90% de plantas enfermas. Concluya sobre los resultados del ejercicio.

Desarrollo

a. Generar población n = 1000 (50%-50%)

n_lote <- 1000
n_muestra <- 500
porc_enferma <- 0.5
poblacion <- c(rep(1, porc_enferma * n_lote), rep(0, (1- porc_enferma) * n_lote))

b. Función para generar muestra y calcular estimador de proporción muestral

# Función para obtener muestra aleatoria y calcular estimador de proporción muestral
getSample <- function(poblacion,n) {
  # Obtener muestra aleatoria de la población
  muestra <- sample(poblacion, n, replace = FALSE)
  
  # Calcular el estimador de la proporción muestral
  prop_muestral <- round(mean(muestra),5)
  
  return(prop_muestral)
}
# Obtener muestra aleatoria y calcular estimador de proporción muestral
proporcion_estimada <- getSample(poblacion, n_muestra)
print(proporcion_estimada)
## [1] 0.518

c. Repetir el escenario anterior (b) n = 500 veces y analice los resultados en cuanto al comportamiento de los 500 resultados del estimador pˆ

function_analisis <-function(n_veces,n_muestra,porc_enferma, poblacion){
  lista_muestras <- c()
  
  for(i in 1:n_veces){
    lista_muestras <- append(lista_muestras, getSample(poblacion, n_muestra))
  }
  porc_enferma <- round(porc_enferma, 2)
  media <- round(mean(lista_muestras),2)
  varianza <- round(var(lista_muestras),4)
  sesgo <- round(mean(lista_muestras) - porc_enferma, 4)
  p_shapiro <- round(shapiro.test(lista_muestras)$p.value, 4)
  normalidad <- p_shapiro > 0.05
  
 return(list(lista_muestras,
    data.frame(porc_enferma = porc_enferma, n_muesra = n_muestra, media=media, varianza=varianza, sesgo = sesgo,p_shapiro= p_shapiro, normalidad = normalidad)))   
  
}

function_histograma  <-function(resultados,n_muestra){
  
    hist(resultados[[1]], col = "skyblue",main = paste("Histograma con muestra ", n_muestra), xlab = "Valores", ylab = "Frecuencia", labels = TRUE,  ylim = c(0, 300), adj = 0.5, cex = 0.8, srt = 0)
  
  legend("topright", 
       legend = c(
                  paste("porc_enfermas:",  resultados[[2]][["porc_enferma"]]),
                  paste("media:", resultados[[2]][["media"]]),
                  paste("Varianza:", resultados[[2]][["varianza"]]),
                  paste("Sesgo:",  resultados[[2]][["sesgo"]]),
                  paste("p_shapiro:",  resultados[[2]][["p_shapiro"]]),
                  paste("normalidad:",  resultados[[2]][["normalidad"]])),
       col = "black",
       lwd = 0.8,
       cex = 0.7
       
       )
}

n_veces = 500
a <- function_analisis(n_veces,n_muestra,porc_enferma, poblacion)
function_histograma(a, n_muestra )

Los resultados nos indican que las proporciones muestrales estimadas tienen una media cercana al valor real de la proporción en la población, una varianza relativamente baja y un sesgo cercano a cero, lo que indica que la estimación es bastante precisa y no está sesgada.

d. Repetir los puntos b y c para tamaños de muestra n= 5, 10, 15, 20, 30, 50, 60, 100, 200, 500

function_resultados <- function(lista_n_muestra, n_veces, n_lote, porc_enferma){
  
  poblacion <- c(rep(1, porc_enferma * n_lote), rep(0, (1 - porc_enferma) * n_lote))
  
  tabla_final <- data.frame()
  lista_proporciones <- c()
  par(mfrow=c(1,2))
  
  for (i in lista_n_muestra) {
  
    resultados <- function_analisis(n_veces,i,porc_enferma, poblacion = poblacion)
    tabla_final <- rbind(tabla_final, resultados[[2]])
  
    function_histograma(resultados = resultados, n_muestra = i)
    qqnorm(resultados[[1]],main=paste("QQ-plot de tamaño: ",i))
    qqline(resultados[[1]], col="Blue")
   
  }
  print(tabla_final)
  return(tabla_final)
  }

lista_n_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
n_veces <- 500
n_lote <- 1000

df <- data.frame()

porc_enferma <- 0.5
tabla_resul <- function_resultados(lista_n_muestra = lista_n_muestra, n_veces = n_veces, n_lote = n_lote, porc_enferma = porc_enferma)

##    porc_enferma n_muesra media varianza   sesgo p_shapiro normalidad
## 1           0.5        5  0.49   0.0488 -0.0068    0.0000      FALSE
## 2           0.5       10  0.50   0.0268  0.0026    0.0000      FALSE
## 3           0.5       15  0.50   0.0151 -0.0001    0.0000      FALSE
## 4           0.5       20  0.50   0.0126 -0.0007    0.0000      FALSE
## 5           0.5       30  0.50   0.0083 -0.0013    0.0001      FALSE
## 6           0.5       50  0.50   0.0051  0.0010    0.0044      FALSE
## 7           0.5       60  0.50   0.0039  0.0025    0.0004      FALSE
## 8           0.5      100  0.50   0.0021 -0.0009    0.0104      FALSE
## 9           0.5      200  0.50   0.0011  0.0011    0.0851       TRUE
## 10          0.5      500  0.50   0.0002  0.0005    0.0174      FALSE
df <- rbind(df, tabla_resul)

e. Repetir a-d con 10 % enfermas y 90% enfermas

porc_enferma <- 0.9

tabla_resul <- function_resultados(lista_n_muestra = lista_n_muestra, n_veces = n_veces, n_lote = n_lote, porc_enferma = porc_enferma)

##    porc_enferma n_muesra media varianza   sesgo p_shapiro normalidad
## 1           0.9        5  0.90   0.0190 -0.0016    0.0000      FALSE
## 2           0.9       10  0.91   0.0077  0.0110    0.0000      FALSE
## 3           0.9       15  0.90   0.0063 -0.0049    0.0000      FALSE
## 4           0.9       20  0.90   0.0042 -0.0005    0.0000      FALSE
## 5           0.9       30  0.90   0.0029 -0.0009    0.0000      FALSE
## 6           0.9       50  0.90   0.0017  0.0000    0.0000      FALSE
## 7           0.9       60  0.90   0.0013  0.0022    0.0000      FALSE
## 8           0.9      100  0.90   0.0008  0.0003    0.0001      FALSE
## 9           0.9      200  0.90   0.0003  0.0007    0.0013      FALSE
## 10          0.9      500  0.90   0.0001  0.0009    0.0028      FALSE
df <- rbind(df, tabla_resul)
porc_enferma <- 0.1

tabla_resul <- function_resultados(lista_n_muestra = lista_n_muestra, n_veces = n_veces, n_lote = n_lote, porc_enferma = porc_enferma)

##    porc_enferma n_muesra media varianza   sesgo p_shapiro normalidad
## 1           0.1        5  0.10   0.0187 -0.0008    0.0000      FALSE
## 2           0.1       10  0.10   0.0095  0.0038    0.0000      FALSE
## 3           0.1       15  0.10   0.0061  0.0005    0.0000      FALSE
## 4           0.1       20  0.09   0.0040 -0.0078    0.0000      FALSE
## 5           0.1       30  0.10   0.0027 -0.0023    0.0000      FALSE
## 6           0.1       50  0.10   0.0017 -0.0005    0.0000      FALSE
## 7           0.1       60  0.10   0.0014 -0.0022    0.0000      FALSE
## 8           0.1      100  0.10   0.0008  0.0002    0.0000      FALSE
## 9           0.1      200  0.10   0.0004  0.0007    0.0022      FALSE
## 10          0.1      500  0.10   0.0001  0.0001    0.0175      FALSE
df <- rbind(df, tabla_resul)

A continuación, se presenta una tabla resumen de los tres experimentos realizados, donde se evaluaron poblaciones con un porcentaje de enfermos del 50%, 10% y 90%. En cada uno de estos experimentos, se tomaron muestras de tamaños 5, 10, 15, 20, 30, 50, 60, 100, 200 y 500, con una repetición de 500 veces en cada caso. Los resultados muestran la mediana, varianza, sesgo y la normalidad de las muestras según la prueba de Shapiro-Wilk.

print(df)
##    porc_enferma n_muesra media varianza   sesgo p_shapiro normalidad
## 1           0.5        5  0.49   0.0488 -0.0068    0.0000      FALSE
## 2           0.5       10  0.50   0.0268  0.0026    0.0000      FALSE
## 3           0.5       15  0.50   0.0151 -0.0001    0.0000      FALSE
## 4           0.5       20  0.50   0.0126 -0.0007    0.0000      FALSE
## 5           0.5       30  0.50   0.0083 -0.0013    0.0001      FALSE
## 6           0.5       50  0.50   0.0051  0.0010    0.0044      FALSE
## 7           0.5       60  0.50   0.0039  0.0025    0.0004      FALSE
## 8           0.5      100  0.50   0.0021 -0.0009    0.0104      FALSE
## 9           0.5      200  0.50   0.0011  0.0011    0.0851       TRUE
## 10          0.5      500  0.50   0.0002  0.0005    0.0174      FALSE
## 11          0.9        5  0.90   0.0190 -0.0016    0.0000      FALSE
## 12          0.9       10  0.91   0.0077  0.0110    0.0000      FALSE
## 13          0.9       15  0.90   0.0063 -0.0049    0.0000      FALSE
## 14          0.9       20  0.90   0.0042 -0.0005    0.0000      FALSE
## 15          0.9       30  0.90   0.0029 -0.0009    0.0000      FALSE
## 16          0.9       50  0.90   0.0017  0.0000    0.0000      FALSE
## 17          0.9       60  0.90   0.0013  0.0022    0.0000      FALSE
## 18          0.9      100  0.90   0.0008  0.0003    0.0001      FALSE
## 19          0.9      200  0.90   0.0003  0.0007    0.0013      FALSE
## 20          0.9      500  0.90   0.0001  0.0009    0.0028      FALSE
## 21          0.1        5  0.10   0.0187 -0.0008    0.0000      FALSE
## 22          0.1       10  0.10   0.0095  0.0038    0.0000      FALSE
## 23          0.1       15  0.10   0.0061  0.0005    0.0000      FALSE
## 24          0.1       20  0.09   0.0040 -0.0078    0.0000      FALSE
## 25          0.1       30  0.10   0.0027 -0.0023    0.0000      FALSE
## 26          0.1       50  0.10   0.0017 -0.0005    0.0000      FALSE
## 27          0.1       60  0.10   0.0014 -0.0022    0.0000      FALSE
## 28          0.1      100  0.10   0.0008  0.0002    0.0000      FALSE
## 29          0.1      200  0.10   0.0004  0.0007    0.0022      FALSE
## 30          0.1      500  0.10   0.0001  0.0001    0.0175      FALSE

Conclusión

Como conclusión de estos experimentos, se observa que las medias se mantuvieron cercanas al tamaño de la población enferma en cada caso, lo que sugiere una relación directa entre la proporción de enfermos y la media de la muestra. Además, se encontró que a medida que aumenta el tamaño de la muestra, tanto los indicadores de tendencia central como los de dispersión mejoran, lo que indica una mayor precisión en la estimación de los parámetros poblacionales.

Otro hallazgo importante es que, conforme se incrementa el tamaño de la muestra, el valor p de la prueba de Shapiro tiende a aumentar. Esto sugiere que, en ciertos casos y con muestras lo suficientemente grandes, se puede alcanzar un umbral donde se anule la hipótesis nula de falta de normalidad y se pueda concluir que la distribución de la población sigue una distribución normal. Este hallazgo es relevante, ya que proporciona información sobre la idoneidad del tamaño de la muestra para inferir conclusiones válidas sobre la normalidad de la población en estudio.

En resumen, estos experimentos proporcionan insights importantes sobre cómo el tamaño de la muestra y la proporción de la población enferma afectan diversos aspectos de la distribución de la muestra y su relación con la distribución poblacional subyacente. Estos resultados pueden ser útiles para el estudio y la interpretación adecuada de los análisis estadísticos en diferentes contextos.

Problema 4: Estimacción boostrap

Planteamiento del problema

Desarrollo

# Datos dados
datos <- c(7.69, 4.97, 4.56, 6.49, 4.34, 6.24, 4.45)

# Tamaño de la muestra
n <- length(datos)
k <- 1000

# Método 1: Percentiles 2.5 y 97.5
bootstrap_means <- replicate(k, mean(sample(datos, replace = TRUE)))
conf_interval_method1 <- quantile(bootstrap_means, c(0.025, 0.975))

# Método 2: Intervalo (2*X̄ - P97.5, 2*X̄ - P2.5)
sample_mean <- mean(datos)
conf_interval_method2 <- c(2 * sample_mean - quantile(bootstrap_means, 0.975),
                           2 * sample_mean - quantile(bootstrap_means, 0.025))

conf_interval_method1
##     2.5%    97.5% 
## 4.721143 6.340250
conf_interval_method2
##    97.5%     2.5% 
## 4.728321 6.347429

Resultados

# Crear un dataframe con los resultados de los dos métodos
resultados <- data.frame(
  Metodo = c(rep("Metodo 1", k), rep("Metodo 2", k)),
  Media_Bootstrap = c(bootstrap_means, 2 * sample_mean - bootstrap_means)
)
# Crear el histograma por grupos
histograma <- ggplot(resultados, aes(x = Media_Bootstrap, fill = Metodo)) +
  geom_histogram(binwidth = 0.1, color = "black", alpha = 0.6, position = "dodge") +
  theme_minimal() +
  labs(
    title = "Histograma de medias bootstrap",
    x = "Media Bootstrap",
    y = "Frecuencia"
  ) +
   scale_fill_manual(values = c("Metodo 1" = "blue", "Metodo 2" = "red")) +
  geom_vline(xintercept = conf_interval_method1, color = "blue", linetype = "dashed", size = 1) +
  geom_vline(xintercept = conf_interval_method2, color = "red", linetype = "dashed", size = 1) +
  theme(legend.position = "top")

# Mostrar el histograma
print(histograma)

Conclusión

Partidnedo de los intervalos de confianza obtenidos:

  • Método 1: [4.736857, 6.490143]

  • Método 2: [4.578429, 6.331714]

Podemos observar que ambos métodos de bootstrap producen intervalos de confianza que se solapan significativamente. Esto sugiere que no hay una diferencia sustancial entre los dos métodos en términos de la estimación del intervalo de confianza para la media de los datos. Ambos métodos podrían proporcionar estimaciones razonablemente similares y confiables para el parámetro de interés.

Además, cabe resaltar que los métodos de bootstrap representan herramientas sumamente poderosas y flexibles para estimar intervalos de confianza y otros estadísticos. Esto es especialmente relevante en situaciones donde los supuestos de los métodos paramétricos tradicionales no se cumplen o resultan difíciles de aplicar. El método de bootstrap demuestra su utilidad en una amplia gama de contextos, ya que puede adaptarse con facilidad a diferentes escenarios de muestreo y distribuciones de datos.

Es crucial tener presente que la efectividad y precisión de los métodos de bootstrap pueden variar en función del tamaño de la muestra, la fiabilidad de los datos y otros factores específicos del problema. Por consiguiente, es fundamental emplear estos métodos de manera adecuada y cautelosa.

En resumen, el correcto y cuidadoso empleo de los métodos de bootstrap puede brindar estimaciones confiables y robustas para una variedad de problemas estadísticos, otorgando así una herramienta valiosa para la inferencia estadística en diversas situaciones.