La siguiente figura sugiere como estimar el valor de π con una simulación. En la figura, un circuito con un á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 π .
Pasos sugeridos:
Genere n coordenadas \(x: X_1, . . . , X_n\). Utilice la distribución uniforme con valor mínimo de \(0\) y valor máximo de \(1\).La distribución uniforme genera variables aleatorias que tienen la misma probabilidad de venir de cualquier parte del intervalo \((0,1)\).
Genere \(1000\) coordenadas \(y : Y_1,...,Y_n,\) utilizando nuevamente la distribución uniforme con valor mínimo de \(0\) y valor máximo de \(1.\)
Cada punto (\(X_i,Y_i\))se encuentra dentro del círculo si su distancia desde el centro \((0.5,0.5)\) es menor a \(0.5\). Para cada par (\(X_i,Y_i)\) determine si la distancia desde el centro es menor a \(0.5\). Esto último se puede realizar al calcular el valor (\(X_i−0.5)^2+(Y_i−0.5)^2\), que es el cuadrado de la distancia, y al determinar si es menor que \(0.25\).
¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?
solución:
a. Genere n coordenadas \(x: X_1, . . . , X_n\).
generar_coordenadas_x <- function(n)
{
coordenadas_x <- runif(n, min = 0, max = 1)
return(coordenadas_x)
}
#Realizando la simulación para 10.000
n <- 10000
set.seed(123)
coordenadas_x <- generar_coordenadas_x(n)
head(coordenadas_x, 12)
## [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055
## [8] 0.8924190 0.5514350 0.4566147 0.9568333 0.4533342
b. Genere \(1000\) coordenadas \(y : Y_1,...,Y_n,\).
generar_coordenadas_y <- function(n)
{
coordenadas_y <- runif(n, min = 0, max = 1)
return(coordenadas_y)
}
#Realizando la simulación para 10.000
n <- 1000
set.seed(123)
coordenadas_y <- generar_coordenadas_x(n)
head(coordenadas_y, 12)
## [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055
## [8] 0.8924190 0.5514350 0.4566147 0.9568333 0.4533342
c. Determine si la distancia desde el centro es menor a \(0.5\).
punto_dentro_del_circulo <- function(x, y) {
distancia_al_centro <- (x - 0.5)^2 + (y - 0.5)^2
return(distancia_al_centro < 0.25)
}
n <- 1000
set.seed(123)
coordenadas_x <- generar_coordenadas_x(n)
coordenadas_y <- generar_coordenadas_y(n)
# Verificar si los puntos están dentro del círculo
puntos_dentro <- sapply(1:n, function(i) punto_dentro_del_circulo(coordenadas_x[i], coordenadas_y[i]))
# Mostrar los primeros 10 resultados
head(puntos_dentro, 10)
## [1] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
d. ¿Cuántos de los puntos están dentro del círculo? ¿Cuál es su estimación de π?.
estimar_pi <- function(n) {
puntos_dentro_circulo <- 0
for (i in 1:n) {
x <- runif(1, min = 0, max = 1)
y <- runif(1, min = 0, max = 1)
if (punto_dentro_del_circulo(x, y)) {
puntos_dentro_circulo <- puntos_dentro_circulo + 1
}
}
estimacion_pi_4 <- puntos_dentro_circulo / n
estimacion_pi <- estimacion_pi_4 * 4
return(list(puntos_dentro_circulo = puntos_dentro_circulo, estimacion_pi = estimacion_pi))
}
# Uso de las funciones
n <- 1000
set.seed(123)
# Generar coordenadas x e y
coordenadas_x <- generar_coordenadas_x(n)
coordenadas_y <- generar_coordenadas_y(n)
# Contar puntos dentro del círculo y estimar π
resultado <- estimar_pi(n)
cat("Número de puntos dentro del círculo:", resultado$puntos_dentro_circulo, "\n")
## Número de puntos dentro del círculo: 764
cat("Estimación de π:", resultado$estimacion_pi, "\n")
## Estimación de π: 3.056
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 \(X_1, X_2, X_3\) y \(X_4\), 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:
\(\widehat{\theta_1}\) = \(\cfrac{(X_1+X_2)}{6}\) + \(\cfrac{(X_3 + X_4)}{3}\)
\(\widehat{\theta_2}\) = \(\cfrac{(X_1+2X_2+3X_3+4X_4)}{5}\)
\(\widehat{\theta_3}\) = \(\cfrac{(X_1+X_2+X_3+X_4)}{4}\)
\(\widehat{\theta_4}\) = \(\cfrac{min\{X_1,X_2,X_3,X_4\}+max\{X_1,X_2,X_3,X_4\}}{2}\)
solución:
#Función para calcular los estimadores y evaluar sus propiedades
#Estim = estimador
Estimadores <- function(Estim, muestra, lambda) {
D <- matrix(rexp(Estim * muestra, rate = lambda), nrow = Estim, ncol = muestra, byrow = TRUE)
colnames(D) <- c('Estim 1','Estim 2','Estim 3', 'Estim 4')
m_estim <- D[1:Estim,]
Theta_1 <- numeric(Estim)
Theta_2 <- numeric(Estim)
Theta_3 <- numeric(Estim)
Theta_4 <- numeric(Estim)
for (i in 1:Estim){
Theta_1[i] <- ((m_estim[i,1] + m_estim[i,2]) / 6) + ((m_estim[i,3] + m_estim[i,4]) / 3)
Theta_2[i] <- (m_estim[i,1] + (2 * m_estim[i,2]) + (3 * m_estim[i,3]) + (4 * m_estim[i,4])) / 10
Theta_3[i] <- ((m_estim[i,1] + m_estim[i,2] + m_estim[i,3] + m_estim[i,4]) / 4)
Theta_4[i] <- (min(m_estim[i,1], m_estim[i,2], m_estim[i,3], m_estim[i,4]) + max(m_estim[i,1], m_estim[i,2], m_estim[i,3], m_estim[i,4])) / 2
}
# DIAGRAMA DE CAJA
boxplot_params <- list(
xlab = "Estimados",
ylab = "Valores",
col = "green", # Color de las cajas
border = "blue", # Color de los bordes de las cajas
main = bquote(paste("Diagrama para ", .(Estim), " muestras")) # Título del diagrama
)
boxplot(m_estim , main = boxplot_params$main, xlab = boxplot_params$xlab, ylab = boxplot_params$ylab, col = boxplot_params$col, border = boxplot_params$border)
lambda <- 2
abline(h = lambda, col = "red")
m_media <- apply(m_estim, 2, mean)
m_varianza <- apply(m_estim, 2, var)
sesgo <- lambda - m_media
valores <- data.frame(m_media, m_varianza, sesgo)
prop.table(valores)
}
Simulacion con 20 muestras:
lambda <- 2
set.seed(123)
M <- 4
S <- 20
Estimadores(S, M, lambda)
## m_media m_varianza sesgo
## Estim 1 0.05307792 0.019258405 0.1660062
## Estim 2 0.06937377 0.071608118 0.1497103
## Estim 3 0.05176633 0.009358876 0.1673178
## Estim 4 0.04861875 0.023438225 0.1704653
En términos de sesgo, todos los estimadores tienen un sesgo positivo, lo que sugiere que están ligeramente sesgados hacia arriba desde el valor verdadero del parámetro. Esto significa que tienden a sobreestimar el parámetro en promedio.En este caso el estimador 2 presenta el menor sesgo y por el contrario el estimador 4 el valor mayor.
En cuanto a la varianza, el Estimador 2 tiene la varianza más alta, seguido por el Estimador 4, el Estimador 1 y el Estimador 3. Esto indica que el Estimador 2 tiene la mayor dispersión en sus estimaciones, mientras que el Estimador 3 tiene la menor.
En cuanto a la media, el Estimador 2 tiene la media más alta, seguido por el Estimador 1, el Estimador 3 y el Estimador 4. Esto indica que el Estimador 2 tiende a dar estimaciones más altas en promedio.
Simulacion con 50 muestras:
lambda <- 2
set.seed(123)
M <- 4
S <- 50
Estimadores(S, M, lambda)
## m_media m_varianza sesgo
## Estim 1 0.04157949 0.01437928 0.1829961
## Estim 2 0.07366513 0.04532629 0.1509104
## Estim 3 0.05768466 0.02488502 0.1668909
## Estim 4 0.05327067 0.01710723 0.1713049
En términos de sesgo, todos los estimadores tienen un sesgo positivo, lo que sugiere que están ligeramente sesgados hacia arriba desde el valor verdadero del parámetro. Esto significa que tienden a sobreestimar el parámetro en promedio.En este caso el estimador 2 presenta el menor sesgo y por el contrario el estimador 4 el valor mayor.
En cuanto a la varianza, el Estimador 2 tiene la varianza más alta, seguido por el Estimador 3, el Estimador 4 y el Estimador 1. Esto indica que el Estimador 2 tiene la mayor dispersión en sus estimaciones, mientras que el Estimador 1 tiene la menor.
En cuanto a la media, el Estimador 2 tiene la media más alta, seguido por el Estimador 3, el Estimador 4 y el Estimador 1. Esto indica que el Estimador 2 tiende a dar estimaciones más altas en promedio.
Simulacion con 100 muestras:
lambda <- 2
set.seed(123)
M <- 4
S <- 100
Estimadores(S, M, lambda)
## m_media m_varianza sesgo
## Estim 1 0.05706524 0.02483905 0.1683039
## Estim 2 0.06091380 0.03362770 0.1644554
## Estim 3 0.05405873 0.02140123 0.1713104
## Estim 4 0.05176993 0.01865540 0.1735992
En términos de sesgo, todos los estimadores tienen un sesgo positivo, lo que sugiere que están ligeramente sesgados hacia arriba desde el valor verdadero del parámetro. Esto significa que tienden a sobreestimar el parámetro en promedio.En este caso el estimador 2 presenta el menor sesgo y por el contrario el estimador 4 el valor mayor.
En cuanto a la varianza, el Estimador 2 tiene la varianza más alta, seguido por el Estimador 1, el Estimador 3 y el Estimador 4. Esto indica que el Estimador 2 tiene la mayor dispersión en sus estimaciones, mientras que el Estimador 4 tiene la menor.
En cuanto a la media, el Estimador 2 tiene la media más alta, seguido por el Estimador 1, el Estimador 3 y el Estimador 4. Esto indica que el Estimador 2 tiende a dar estimaciones más altas en promedio.
Simulacion con 100 muestras:
lambda <- 2
set.seed(123)
M <- 4
S <- 1000
Estimadores(S, M, lambda)
## m_media m_varianza sesgo
## Estim 1 0.05484738 0.02704516 0.1674738
## Estim 2 0.05702701 0.02770793 0.1652942
## Estim 3 0.05523563 0.02855795 0.1670856
## Estim 4 0.05520564 0.02740421 0.1671155
En términos de sesgo, todos los estimadores tienen un sesgo positivo, lo que sugiere que están ligeramente sesgados hacia arriba desde el valor verdadero del parámetro. Esto significa que tienden a sobreestimar el parámetro en promedio.En este caso el estimador 2 presenta el menor sesgo y por el contrario el estimador 1 el valor mayor.
En cuanto a la varianza, el Estimador 3 tiene la varianza más alta, seguido por el Estimador 2, el Estimador 4 y el Estimador 1. Esto indica que el Estimador 3 tiene la mayor dispersión en sus estimaciones, mientras que el Estimador 1 tiene la menor.
En cuanto a la media, el Estimador 2 tiene la media más alta, seguido por el Estimador 3, el Estimador 4 y el Estimador 1. Esto indica que el Estimador 2 tiende a dar estimaciones más altas en promedio.
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:
Repita el escenario anterior (b) n=500 veces y analice los resultados en cuanto al comportamiento de los 500 resultados del estimador \(\widehat{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
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.
solución:
a: Realice una simulación en la cual genere una población de n=1000 (Lote).
#1 : Plantas enfermas
#0 : Plantas sanas
set.seed(123)
lote <- rbinom(n = 1000, size = 1, prob = 0.5)
head(lote)
## [1] 0 1 0 1 1 0
b: Generar una función.
funcion <- function(n, lote) {
muestra <- sample(lote, size = n, replace = FALSE)
return(sum(muestra)/n)
}
c: Repita el escenario anterior (b) n=500 veces y analice los resultados en cuanto al comportamiento de los 500 resultados del estimador \(\widehat{p}\).
n_repeticiones <- c()
for (i in 1:500) {
n_repeticiones <- c(n_repeticiones, funcion(30, lote))
}
par(mfrow = c(1, 2))
hist(n_repeticiones, breaks = 20, main = "Histograma de 500 repeticiones", xlab = "Estimación de Proporción", col = "lightblue")
# DIAGRAMA DE CAJA
boxplot_params <- list(
xlab = "Estimados",
ylab = "Valores",
col = "green", # Color de las cajas
border = "blue", # Color de los bordes de las cajas
main = bquote(paste("Diagrama para ", .(500), " muestras")) # Título del diagrama
)
boxplot(n_repeticiones , main = boxplot_params$main, xlab = boxplot_params$xlab, ylab = boxplot_params$ylab, col = boxplot_params$col, border = boxplot_params$border)
#Prueba de normalidad
shapiro.test(n_repeticiones)$p_valor
## NULL
Si analizamos el histigrama, podemos ver que entre mayor sea la muestra que se obtenga, el valor promedio se aproximara a 0.5 por lo que el 50% de las plantas estan bien y el restante de plantas se encuentran enfermas. Por lo tanto si se tiene una muestra pequeña se encuentra un p valor muy bajo y varia mas.
d: Repita los puntos b y c para tamaños de muestra n=5, 10, 15, 20, 30, 50, 60, 100, 200, 500.
par(mfrow = c(2, 5))
ns <- c(5, 10, 15, 20, 30, 50, 60, 100, 200, 500)
for(n in ns){
funcion2 <- c()
for (i in 1:500) {
funcion2 <- c(funcion2, funcion(n, lote))
}
p_valor <- shapiro.test(funcion2)$p.value
title <- paste('n=', n, 'p-val=', round(p_valor, 4))
hist(funcion2, breaks = 20, main = title, xlab = "Estimación de Proporción", col = "lightgreen")
}
Podemos ver que medida que va aumentando el tamaño de las muestras, la distribución de hace más simétrica y tiene a una distribución normal. Ademas observemos como desde tamaño de muestras n=60 , tanto la gráfica como el p-valor sigue una distribución normal.
e: 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.
Simulación 10% de plantas enfermas.
par(mfrow = c(2, 5))
lote2 <- rbinom(n = 1000, size = 1, prob = 0.1)
for(n in ns){
funcion2 <- c()
for (i in 1:500) {
funcion2 <- c(funcion2, funcion(n, lote2))
}
p_valor <- shapiro.test(funcion2)$p.value
title <- paste('n=', n, 'p-val=', round(p_valor, 4))
hist(funcion2, breaks = 20, main = title , xlab = "Estimación de Proporción", col = "lightpink")
}
La distribución no exhibe simetría en ningún tamaño de muestra ‘n’, ya que la mayoría de las estimaciones p̂ se sitúan hacia la izquierda debido a la asimetría proporcional.por lo tanto, la cantidad de plantas enfermas en la población total es mayor en comparación con las sanas. Esto significa que los resultados que arrojen de las muestras, pueden ser mas volatiles
Simulación 90% de plantas enfermas.
par(mfrow = c(2, 5))
lote3 <- rbinom(n = 1000, size = 1, prob = 0.9)
for(n in ns){
funcion2 <- c()
for (i in 1:500) {
funcion2 <- c(funcion2, funcion(n, lote3))
}
p_valor <- shapiro.test(funcion2)$p.value
title <- paste('n=', n, 'p-val=', round(p_valor, 4))
hist(funcion2, breaks = 20, main = title , xlab = "Estimación de Proporción", col = "lightpink")
}
La distribución no exhibe simetría solo en el caso del tamaño de muestra n=200, ya que la mayoría de las estimaciones p̂ se sitúan hacia l derecha debido a la asimetría proporciona.por lo tanto, la cantidad de plantas enfermas en la población total es mayor en comparación con las sanas. Esto significa que los resultados que arrojen de las muestras, pueden ser mas volatiles.
Cuando se extrae una muestra de una población que no es normal y se requiere estimar un intervalo de confianza se pueden utilizar los métodos de estimación bootstrap. Esta metodología supone que se puede reconstruir la población objeto de estudio mediante un muestreo con reemplazo de la muestra que se tiene. Existen varias versiones del método. Una presentación básica del método se describe a continuación:
El artículo de In-use Emissions from Heavy Duty Dissel Vehicles (J.Yanowitz, 2001) presenta las mediciones de eficiencia de combustible en millas/galón de una muestra de siete camiones. Los datos obtenidos son los siguientes: \(7.69, 4.97, 4.56, 6.49, 4.34, 6.24 y 4.45\). Se supone que es una muestra aleatoria de camiones y que se desea construir un intervalo de confianza del 95 % para la media de la eficiencia de combustible de esta población. No se tiene información de la distribución de los datos. El método bootstrap permite construir intervalos de confianza del 95 % - Para ilustrar el método suponga que coloca los valores de la muestra en una caja y extrae uno al azar. Este correspondería al primer valor de la muestra bootstrap \(X_1^*\). Después de anotado el valor se regresa \(X_1^*\) a la caja y se extrae el valor \(X_2^*\), regresandolo nuevamente. Este procedimiento se repite hasta completar una muestra de tamaño n, \(X_1^*,X_2^*,X_2^*,X_n^*,\) conformando la muestra bootstrap.
Es necesario extraer un gran número de muestras (suponga k = 1000). Para cada una de las muestra bootstrap obtenidas se calcula la media \(\overline{X}_i^*\), obteniéndose un valor para cada muestra. El intervalo de confianza queda conformado por los percentiles P2.5 y P97.5. Existen dos métodos para estimarlo:
Método 1 : \((P_{2.5};P_{97.5})\)
Método 2 : \((2\overline{X}−P_{97.5};2\overline{X}−P_{2.5})\)
Construya el intervalo de confianza por los dos métodos y compare los resultados obtenidos. Comente los resultados. Confiaría en estas estimaciones?
solución:
# Definir los datos
datos <- c(7.69, 4.97, 4.56, 6.49, 4.34, 6.24, 4.45)
# Definir el tamaño de la muestra y el número de repeticiones bootstrap
n <- length(datos)
k <- 1000
# Inicializar un vector para almacenar las medias bootstrap
medias_bootstrap <- numeric(k)
# Realizar el método bootstrap
set.seed(123) # Fijamos la semilla para reproducibilidad
for (i in 1:k) {
muestra_bootstrap <- sample(datos, n, replace = TRUE)
medias_bootstrap[i] <- mean(muestra_bootstrap)
}
# calculo de percentiles P2.5 y P97.5
percentil_2.5 <- quantile(medias_bootstrap, 0.025)
percentil_97.5 <- quantile(medias_bootstrap, 0.975)
# calculo del intervalo de confianza usando M1 y M2
intervalo_metodo_1 <- c(percentil_2.5, percentil_97.5)
intervalo_metodo_2 <- c(2*mean(datos) - percentil_97.5, 2*mean(datos) - percentil_2.5)
# resultados
intervalo_metodo_1
## 2.5% 97.5%
## 4.748393 6.508643
intervalo_metodo_2
## 97.5% 2.5%
## 4.559929 6.320179
Para el Método 1, el nivel de confianza es del 95% con una eficiencia de combustible de aproximadamente 4.75 y 6.51 millas por galón. Y para el Método 2 el nivel de confianza es del 95% con una eficiencia de combustible de aproximadamente 4.55 y 6.32 millas por galón. Notemos que ambos intervalos de confianza son muy similares.Por lo tanto podemos decir que los dos métodos de estimación proporcionan resultados consistentes. Ademas, Los intervalos de confianza son relativamente estrechos, lo que indica que la estimación de la media de eficiencia de combustible es bastante precisa.Ambos intervalos de confianza incluyen el valor de la media de eficiencia de combustible de la población. Esto indica que ambos métodos proporcionan estimaciones que son consistentes con la media poblacional.