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)
á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 π
# 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)
}
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)
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
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:
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)
}
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()
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:
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%.
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�.
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.
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
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))
# 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
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.
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)
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
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.
# 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
# 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.