Problema 1 - Estimación del valor de π

punto a

x = runif(1000,0,1)
head(x)
## [1] 0.01842309 0.23500860 0.77610068 0.84696904 0.03474655 0.89149348

punto b

y = runif(1000,0,1)
head(y)
## [1] 0.34261697 0.82910696 0.06396366 0.02159473 0.20978864 0.88952581

punto c

distancia <- numeric(length(x))
for (i in 1:length(x)) {
  distancia[i] <- (x[i] - 0.5)^2 + (y[i] - 0.5)^2
}
#graficamos los puntos
t <- seq(0, 2*pi, length.out = 100)

plot(0, 0, asp = 1, type = "n",
     xlim = c(0, 1), ylim = c(0, 1),
     ann = F)

radio <- 1/2

a <- 0.5 ## origen circunferencia eje x
b <- 0.5 ## origen circunferencia eje y

xx <- a + cos(t)*radio
yy <- b + sin(t)*radio

points(xx, yy, type = "l", col = "blue")
points(x,y,pch = 20)

punto d: Cuantos puntos están dentro del circulo?

cantidad_puntos <- sum(distancia < 0.25)
print(paste("Cantidad de puntos dentro del círculo:", cantidad_puntos))
## [1] "Cantidad de puntos dentro del círculo: 759"

punto d: Cuál es su estimación de π?

# Calcular la estimación de π
estimacionpi <- cantidad_puntos / length(x) * 4

# Imprimir el resultado
print(paste("Estimación de π:", estimacionpi))
## [1] "Estimación de π: 3.036"

Problema 2 - Propiedades de los estimadores

n <- 4
m <- 5000
theta <- 2

# Generar datos con distribución exponencial
replicaciones <- rexp(m * n, rate = theta) 
data <- matrix(replicaciones, nrow = m, ncol = n, byrow = TRUE) 

# Función para calcular estimadores y evaluar propiedades
muestras_n <- function(data, n_muestra, theta_) {
  muestra <- data[sample(nrow(data), size = n_muestra), ]
  
  # Cálculo de los estimadores
  teta1 <- ((muestra[, 1] + muestra[, 2]) / 6) + ((muestra[, 3] + muestra[, 4]) / 3)
  teta2 <- (muestra[, 1] + 2 * muestra[, 2] + 3 * muestra[, 3] + 4 * muestra[, 4]) / 10
  teta3 <- rowMeans(muestra)
  teta4 <- (apply(muestra, 1, min) + apply(muestra, 1, max)) / 2
  
  # Boxplot de los estimadores
  boxplot(teta1, teta2, teta3, teta4, col = c("black", "red", "green", "purple"),
          main = paste("Distribución de estimadores con", n_muestra, "muestras"))
  
  # Calcular propiedades de los estimadores
  cat("Valores de las medias estimadas:\n")
  print(apply(cbind(teta1, teta2, teta3, teta4), 2, mean))
  cat("\nValores de las desviaciones estándar estimadas:\n")
  print(apply(cbind(teta1, teta2, teta3, teta4), 2, sd))
  
  # Evaluación de insesgadez, eficiencia y consistencia
  cat("\nEvaluación de insesgadez, eficiencia y consistencia:\n")
  cat("Insesgadez:\n")
  cat("teta1:", mean(teta1) - theta_, "\n")
  cat("teta2:", mean(teta2) - theta_, "\n")
  cat("teta3:", mean(teta3) - theta_, "\n")
  cat("teta4:", mean(teta4) - theta_, "\n")
  
  cat("\nEficiencia:\n")
  cat("teta1:", var(teta1), "\n")
  cat("teta2:", var(teta2), "\n")
  cat("teta3:", var(teta3), "\n")
  cat("teta4:", var(teta4), "\n")
  
  cat("\nConsistencia:\n")
  cat("teta1:", abs(mean(teta1) - theta_) / sd(teta1), "\n")
  cat("teta2:", abs(mean(teta2) - theta_) / sd(teta2), "\n")
  cat("teta3:", abs(mean(teta3) - theta_) / sd(teta3), "\n")
  cat("teta4:", abs(mean(teta4) - theta_) / sd(teta4), "\n")
}

# Llamar a la función con diferentes tamaños de muestra
muestras_n(data, 20, theta)

## Valores de las medias estimadas:
##     teta1     teta2     teta3     teta4 
## 0.4122351 0.4023296 0.4670971 0.5927382 
## 
## Valores de las desviaciones estándar estimadas:
##     teta1     teta2     teta3     teta4 
## 0.2305678 0.1998505 0.2831511 0.4617655 
## 
## Evaluación de insesgadez, eficiencia y consistencia:
## Insesgadez:
## teta1: -1.587765 
## teta2: -1.59767 
## teta3: -1.532903 
## teta4: -1.407262 
## 
## Eficiencia:
## teta1: 0.05316153 
## teta2: 0.03994023 
## teta3: 0.08017457 
## teta4: 0.2132274 
## 
## Consistencia:
## teta1: 6.886324 
## teta2: 7.994327 
## teta3: 5.413727 
## teta4: 3.047568
# Llamar a la función con diferentes tamaños de muestra
muestras_n(data, 50, theta)

## Valores de las medias estimadas:
##     teta1     teta2     teta3     teta4 
## 0.4170761 0.4056018 0.4310407 0.5183676 
## 
## Valores de las desviaciones estándar estimadas:
##     teta1     teta2     teta3     teta4 
## 0.2159820 0.2189089 0.2253860 0.2829754 
## 
## Evaluación de insesgadez, eficiencia y consistencia:
## Insesgadez:
## teta1: -1.582924 
## teta2: -1.594398 
## teta3: -1.568959 
## teta4: -1.481632 
## 
## Eficiencia:
## teta1: 0.04664821 
## teta2: 0.04792112 
## teta3: 0.05079885 
## teta4: 0.0800751 
## 
## Consistencia:
## teta1: 7.328963 
## teta2: 7.283386 
## teta3: 6.96121 
## teta4: 5.235905

Conclusiones

Los análisis sugieren que el estimador Teta3 emerge como el más sólido entre los cuatro, siendo insesgado, eficiente y mostrando consistencia con el aumento del tamaño de la muestra. Su menor sesgo y dispersión lo destacan como la opción preferida para estimar el parámetro, ofreciendo resultados más cercanos al verdadero valor, lo que lo convierte en la elección más confiable y robusta entre las alternativas evaluadas.

Problema 3 - Teorema del Límite Central

a Realice una simulación

# Establecer la semilla para reproducibilidad
set.seed(123)

# Generar una población de n=1000
n <- 1000

# Definir el porcentaje de individuos enfermos
porc_enfermos <- 0.5

# Crear la población
poblacion <- rep(c(0, 1), times = c(n * (1 - porc_enfermos), n * porc_enfermos))

# Verificar la proporción de individuos enfermos en la población
proporcion_enfermos_poblacion <- sum(poblacion) / length(poblacion)
print(paste("Porcentaje de individuos enfermos en la población:", proporcion_enfermos_poblacion * 100, "%"))
## [1] "Porcentaje de individuos enfermos en la población: 50 %"

b. Genere una función que permita:

condicion=1                                 
n=0                                         
set.seed (123)

funcion1 <- function(n)  {
  simulacion <- rbinom (n, condicion, 0.5)
  muestreo= sample (simulacion, n, replace = TRUE)
  data_muestreo <- data.frame(muestreo)                #dataframe
  prop_muestra= sum(data_muestreo== 1) /n
  return(prop_muestra*100)
  print(prop_muestra)
}
funcion1(1000)
## [1] 50.4

c. Repita el escenario anterior (b) n=500 veces

# Crear una matriz para almacenar los resultados de las simulaciones
mx <- matrix(ncol = 10, nrow = 500)
colnames(mx) <- c("n=5", "n=10", "n=15", "n=20", "n=30", "n=50", "n=60", "n=100", "n=200", "n=500")

# Crear una matriz para almacenar las medidas resumidas
matriz_m <- matrix(ncol = 4, nrow = 10)
colnames(matriz_m) <- c("medias_propor", "varianzas_propor", "sesgo_propor", "p_value")
row.names(matriz_m) <- c("n=5", "n=10", "n=15", "n=20", "n=30", "n=50", "n=60", "n=100", "n=200", "n=500")

# Definir los tamaños de muestra
tam_muestra <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)

# Repetir los puntos b y c para cada tamaño de muestra
for (n in seq_along(tam_muestra)) {
  repeticiones_sample <- replicate(500, funcion1(tam_muestra[n]))  # Simulación 500 veces
  
  # Almacenar los resultados en la matriz mx
  mx[, n] <- repeticiones_sample
  
  # Calcular medidas resumidas y almacenarlas en la matriz matriz_medidas
  matriz_m[n, 1] <- mean(repeticiones_sample)
  matriz_m[n, 2] <- var(repeticiones_sample)
  matriz_m[n, 3] <- funcion1(tam_muestra[n]) - matriz_m[n, 1] 
  matriz_m[n, 4] <- shapiro.test(repeticiones_sample)$p.value
  
  # Generar histograma y gráfico Q-Q para visualización
  hist(repeticiones_sample, main = paste("Histograma para tamaño de muestra", tam_muestra[n]), freq = FALSE)
  qqnorm(repeticiones_sample, main = paste("Gráfico Q-Q para tamaño de muestra", tam_muestra[n]))
  qqline(repeticiones_sample, col = "black")
}

comparaciones

# Pruebas de Shapiro-Wilk
shapiro_results <- apply(mx, 2, shapiro.test)

# Gráficos Q-Q
par(mfrow=c(2,5))  # Organizar los gráficos en una cuadrícula de 2 filas y 5 columnas
for (i in 1:10) {
  qqnorm(mx[,i], main=paste("Gráfico Q-Q para tamaño de muestra", tam_muestra[i]))
  qqline(mx[,i], col="red")
}

# Imprimir los resultados de las pruebas de Shapiro-Wilk
for (i in 1:10) {
  cat("Tamaño de muestra:", tam_muestra[i], "\n")
  print(shapiro_results[[i]])
}
## Tamaño de muestra: 5 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.93627, p-value = 8.637e-14
## 
## Tamaño de muestra: 10 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.97476, p-value = 1.363e-07
## 
## Tamaño de muestra: 15 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.98637, p-value = 0.0001261
## 
## Tamaño de muestra: 20 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.98858, p-value = 0.000608
## 
## Tamaño de muestra: 30 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.99008, p-value = 0.001891
## 
## Tamaño de muestra: 50 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.99239, p-value = 0.01193
## 
## Tamaño de muestra: 60 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.99491, p-value = 0.09829
## 
## Tamaño de muestra: 100 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.9967, p-value = 0.402
## 
## Tamaño de muestra: 200 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.99719, p-value = 0.554
## 
## Tamaño de muestra: 500 
## 
##  Shapiro-Wilk normality test
## 
## data:  newX[, i]
## W = 0.9958, p-value = 0.2037

Conclusiones

A medida que aumenta el tamaño de la muestra en el análisis de estimadores, se observa una notable mejora en la precisión y estabilidad de las estimaciones. Con un mayor número de datos en la muestra, los estimadores tienden a converger hacia el verdadero valor del parámetro, en este caso, P=0.5, lo que se traduce en una disminución del error y la varianza. Esto implica que las estimaciones son más confiables y consistentes a medida que el tamaño de la muestra aumenta, lo que es crucial en la inferencia estadística. Además, se nota una reducción en la asimetría de las distribuciones de los estimadores, lo que indica una mejora en la simetría y la forma de la distribución. Las gráficas de densidad y los gráficos Q-Q para la normalidad muestran cómo las distribuciones de los estimadores se ajustan progresivamente a una distribución normal a medida que aumenta el tamaño de la muestra, lo que sugiere una mayor validez de los supuestos de normalidad en el análisis estadístico. En resumen, un aumento en el tamaño de la muestra mejora significativamente la calidad y confiabilidad de las estimaciones, así como su ajuste a las distribuciones teóricas esperadas.

e. Repita toda la simulación (puntos a – d)

# Problema 1

# Punto a: Generación de la población
set.seed(123)
n <- 1000

# Porcentaje de plantas enfermas (10%)
porcentaje_enfermos_10 <- 0.1
poblacion_10 <- rep(c(0, 1), times = c(n * (1 - porcentaje_enfermos_10), n * porcentaje_enfermos_10))

# Porcentaje de plantas enfermas (90%)
porcentaje_enfermos_90 <- 0.9
poblacion_90 <- rep(c(0, 1), times = c(n * (1 - porcentaje_enfermos_90), n * porcentaje_enfermos_90))

# Punto b: Generación de muestras
muestra <- function(lote) {
  # Generar muestras
  muestra_x <- runif(1000, 0, 1)
  muestra_y <- runif(1000, 0, 1)
  
  # Calcular distancia
  distancia <- (muestra_x - 0.5)^2 + (muestra_y - 0.5)^2
  
  # Calcular cantidad de puntos dentro del círculo
  cantidad_puntos <- sum(distancia < 0.25)
  
  # Calcular estimación de π
  estimacion_pi <- cantidad_puntos / length(muestra_x) * 4
  
  return(estimacion_pi)
}

# Punto c: Replicación
# Para 10% de plantas enfermas
resultados_10 <- replicate(500, muestra(poblacion_10))

# Para 90% de plantas enfermas
resultados_90 <- replicate(500, muestra(poblacion_90))

# Punto d: Análisis de resultados
# Para 10% de plantas enfermas
print(paste("Estimación de π para 10% de plantas enfermas:", mean(resultados_10)))
## [1] "Estimación de π para 10% de plantas enfermas: 3.141552"
# Para 90% de plantas enfermas
print(paste("Estimación de π para 90% de plantas enfermas:", mean(resultados_90)))
## [1] "Estimación de π para 90% de plantas enfermas: 3.14384"
# Simulación con lotes de plantas enfermas

# Definir una función para realizar la simulación
Simulacion <- function(enfermas_porcentaje) {
  # Generar una población de 1000 plantas con el porcentaje de enfermas dado
  n <- 1000
  poblacion <- rep(c(0, 1), times = c(n * (1 - enfermas_porcentaje), n * enfermas_porcentaje))
  
  # Calcular la distancia de cada planta al centro del lote
  x <- runif(n)
  y <- runif(n)
  distancia <- (x - 0.5)^2 + (y - 0.5)^2
  
  # Contar cuántas plantas están dentro del círculo
  cantidad_puntos <- sum(distancia < 0.25)
  
  # Calcular la estimación de π
  estimacion_pi <- cantidad_puntos / n * 4
  
  # Devolver la cantidad de puntos dentro del círculo y la estimación de π
  return(list(cantidad_puntos = cantidad_puntos, estimacion_pi = estimacion_pi))
}






# otra solucion

# Repetir la simulación para lotes con 10% y 90% de plantas enfermas
resultado_lote_10 <- Simulacion(0.1)
resultado_lote_90 <- Simulacion(0.9)

# Imprimir los resultados
print("Resultados para lote con 10% de plantas enfermas:")
## [1] "Resultados para lote con 10% de plantas enfermas:"
print(paste("Cantidad de puntos dentro del círculo:", resultado_lote_10$cantidad_puntos))
## [1] "Cantidad de puntos dentro del círculo: 780"
print(paste("Estimación de π:", resultado_lote_10$estimacion_pi))
## [1] "Estimación de π: 3.12"
print("Resultados para lote con 90% de plantas enfermas:")
## [1] "Resultados para lote con 90% de plantas enfermas:"
print(paste("Cantidad de puntos dentro del círculo:", resultado_lote_90$cantidad_puntos))
## [1] "Cantidad de puntos dentro del círculo: 778"
print(paste("Estimación de π:", resultado_lote_90$estimacion_pi))
## [1] "Estimación de π: 3.112"

Problema 4 - Estimación de Boostrap

1. Construcción de Matriz y cálculo de medias:

x <- c( 7.69, 4.97, 4.56, 6.49, 4.34, 6.24, 4.45) # datos muestra
boot<- sample(x,1000,replace=TRUE)   # se extraen n x m muestras
b <- matrix(boot,nrow=1000,ncol=7, byrow =TRUE)    # se construye matriz de n x m 
mx<- apply(b,1,mean) 

Intervalo de confianza Método 1

Teniendo la matriz creada, aplicamos el método 1: (P2.5;P97.5)

ic1 <- quantile(mx, probs=c(0.025, 0.975)) # se calcula IC método 1
cat("Con una confianza del 95%, el verdadero valor de la media del consumo de gasolina en millas / galón estaría contenida entre estos valores:  ", ic1)
## Con una confianza del 95%, el verdadero valor de la media del consumo de gasolina en millas / galón estaría contenida entre estos valores:   4.71 6.421429

Intervalo de confianza por Método 2

Ahora aplicamos el método 2: (2X¯−P97.5;2X¯−P2.5)

ic2<- c(2*mean(mx)-ic1[2], 2*mean(mx)-ic1[1]) # se calcula IC método 2
cat("Con una confianza del 95%, el verdadero valor de la media del consumo de gasolina en millas / galón estaría contenida entre estos valores:  ", ic2)
## Con una confianza del 95%, el verdadero valor de la media del consumo de gasolina en millas / galón estaría contenida entre estos valores:   4.631311 6.34274

histograma

hist(mx, las=1, main="Distribución de medias con IC calculados por método 1 y 2 ", ylab = " ", xlab = "Medias", col="cyan")
abline(v=ic1, col="#AF7500",lwd=2)
abline(v=ic2, col="red",lwd=2)
legend("topright", legend = c("IC Método 1", "IC Método 2"), col = c("#AF7500", "red"), lwd = 2)

Conclusiones

La investigación demuestra la fiabilidad del método bootstrap en la estimación de intervalos de confianza, especialmente en poblaciones con distribuciones no normales. Se subraya la importancia de que la muestra sea representativa de la población estudiada para asegurar resultados precisos. La consistencia entre los métodos empleados fortalece la solidez de las estimaciones. En resumen, los resultados indican que el método bootstrap constituye una herramienta robusta para la toma de decisiones fundamentadas en datos, siempre que se respeten los supuestos de representatividad de la muestra y se considere la coherencia entre los intervalos de confianza.