Para la resolución de este problema se siguió la siguiente aproximación:
Se preparó el mismo código para los cuatro escenarios propuestos, dejando como valor supuesto del parametro lambda = 50 y un seed estándar de replicabilidad. Cada escenario usa la misma aproximación para generar la muestra aleatoria, cambiando únicamente su valor base.
Se visualizan la distribución de los estimadores, incluyendo la línea de referencia del lamba y una señal adicional para la media de cada estimador (en forma de diamante).
Para el primer caso vemos cómo los estimadores T1 y T3 son los más cercanos a ser insesgados al ser los de menor distancia con la media real a pesar de pecar de sobrestimación. Así mismo, parecen ser los más eficientes debido a su baja varianza, por lo cuál se podrían considerar, a pesar de la poca evidencia de la consistencia debido al tamaño de la muestra, como aquellos con las propiedades más robustas. El estimador T4 que parece tener potencial debido a su insesgadez pero tiene problemas de alta varianza. Por úlitmo, tenemos el estimador T2 que tiene una sobrestimación totalmente distorsionada del valor real.
library(ggplot2)
library(reshape2)
# Parámetros
m <- 20
lambda <- 50
# Generar los datos
set.seed(2)
X1 <- rexp(m, 1/lambda)
X2 <- rexp(m, 1/lambda)
X3 <- rexp(m, 1/lambda)
X4 <- rexp(m, 1/lambda)
data <- data.frame(X1, X2, X3, X4)
# Cálculo de los estimadores
T1 <- (X1 + X2) / 6 + (X3 + X4) / 3
T2 <- (X1 + 2 * X2 + 3 * X3 + 4 * X4) / 5
T3 <- (X1 + X2 + X3 + X4) / 4
minx <- apply(data, 1, min)
maxx <- apply(data, 1, max)
T4 <- (minx + maxx) / 2
# Crear el data frame de los estimadores
dataT <- data.frame(T1, T2, T3, T4)
# Calcular medias, varianzas y sesgo
medias <- apply(dataT, 2, mean)
varianzas <- apply(dataT, 2, var)
sesgo <- lambda - medias
library(kableExtra)
# Crear la tabla con las medias, varianzas y sesgos
resultados <- data.frame(
Estimador = c("T1", "T2", "T3", "T4"),
Media = medias,
Varianza = varianzas,
Sesgo = sesgo,
row.names = NULL
)
# Mostrar la tabla con formato mejorado usando kableExtra
resultados %>%
kbl(caption = "Tabla de resultados n = 20: Medias, varianzas y sesgos de los estimadores") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = TRUE,
position = "center")
| Estimador | Media | Varianza | Sesgo |
|---|---|---|---|
| T1 | 53.51541 | 618.9673 | -3.515413 |
| T2 | 104.72595 | 2981.6264 | -54.725952 |
| T3 | 53.13409 | 612.0700 | -3.134091 |
| T4 | 62.98271 | 1085.0040 | -12.982713 |
# Convertir dataT para ggplot2
dataT_long <- melt(dataT, variable.name = "Estimador", value.name = "Valor")
# Crear el boxplot con ggplot2
ggplot(dataT_long, aes(x = Estimador, y = Valor, fill = Estimador)) +
geom_boxplot() +
geom_hline(yintercept = lambda, linetype = "dashed", color = "red") +
stat_summary(fun = "mean", geom = "point", shape = 18, size = 3, color = "black") +
ggtitle("n = 20 | Distribución de los estimadores") +
ylab("Estimaciones") +
xlab("Estimadores") +
theme_bw() +
theme(legend.position = "none") +
labs(caption = "Línea roja indica el valor verdadero de lambda")
Para la segunda muestra vemos el mismo comportamiento de los estimadores teniendo a T1 y T3 como aquellos, aún en este caso, con una mejor insesgadez aunque con menor eficiencia que en la muestra anterior. El estimador T4 parece ajustarse mejor a esta muestra que a la anterior pero aún sigue teniendo problemas de sobrestimación.
# Parámetros
m <- 50
lambda <- 50
# Generar los datos
set.seed(2)
X1 <- rexp(m, 1/lambda)
X2 <- rexp(m, 1/lambda)
X3 <- rexp(m, 1/lambda)
X4 <- rexp(m, 1/lambda)
data <- data.frame(X1, X2, X3, X4)
# Cálculo de los estimadores
T1 <- (X1 + X2) / 6 + (X3 + X4) / 3
T2 <- (X1 + 2 * X2 + 3 * X3 + 4 * X4) / 5
T3 <- (X1 + X2 + X3 + X4) / 4
minx <- apply(data, 1, min)
maxx <- apply(data, 1, max)
T4 <- (minx + maxx) / 2
# Crear el data frame de los estimadores
dataT <- data.frame(T1, T2, T3, T4)
# Calcular medias, varianzas y sesgo
medias <- apply(dataT, 2, mean)
varianzas <- apply(dataT, 2, var)
sesgo <- lambda - medias
library(kableExtra)
# Crear la tabla con las medias, varianzas y sesgos
resultados <- data.frame(
Estimador = c("T1", "T2", "T3", "T4"),
Media = medias,
Varianza = varianzas,
Sesgo = sesgo,
row.names = NULL
)
# Mostrar la tabla con formato mejorado usando kableExtra
resultados %>%
kbl(caption = "Tabla de resultados n = 50: Medias, varianzas y sesgos de los estimadores") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = TRUE,
position = "center")
| Estimador | Media | Varianza | Sesgo |
|---|---|---|---|
| T1 | 53.64300 | 603.0559 | -3.643005 |
| T2 | 107.89327 | 2902.5452 | -57.893271 |
| T3 | 52.81637 | 517.4492 | -2.816367 |
| T4 | 63.68101 | 828.4095 | -13.681012 |
# Convertir dataT para ggplot2
dataT_long <- melt(dataT, variable.name = "Estimador", value.name = "Valor")
# Crear el boxplot con ggplot2
ggplot(dataT_long, aes(x = Estimador, y = Valor, fill = Estimador)) +
geom_boxplot() +
geom_hline(yintercept = lambda, linetype = "dashed", color = "red") +
stat_summary(fun = "mean", geom = "point", shape = 18, size = 3, color = "black") +
ggtitle("n = 50 | Distribución de los estimadores") +
ylab("Estimaciones") +
xlab("Estimadores") +
theme_minimal() +
theme(legend.position = "none") +
labs(caption = "Línea roja indica el valor verdadero de lambda")
En esta muestra podemos proponer dos conclusiones preliminares: los estimadores T1 y T3 definitivamente son, para este tipo de escenarios con distribución exponencial, los mejores del grupo en cuanto insesgadez y eficiencia pero parece que pecan de consistencia debido a que el aumento en el tamaño de la muestra ha ido aumentando su varianza (y por tanto reduciendo su eficiencia); al punto que en este escenario se acercan a los niveles del T4, por lo menos en el caso de T1. Por otro lado, el T2 no solo se ve limitado en sus insesgadez y eficiencia sino que además es totalmente inconsistente con el crecimiento de las muestras.
# Parámetros
m <- 100
lambda <- 50
# Generar los datos
set.seed(2)
X1 <- rexp(m, 1/lambda)
X2 <- rexp(m, 1/lambda)
X3 <- rexp(m, 1/lambda)
X4 <- rexp(m, 1/lambda)
data <- data.frame(X1, X2, X3, X4)
# Cálculo de los estimadores
T1 <- (X1 + X2) / 6 + (X3 + X4) / 3
T2 <- (X1 + 2 * X2 + 3 * X3 + 4 * X4) / 5
T3 <- (X1 + X2 + X3 + X4) / 4
minx <- apply(data, 1, min)
maxx <- apply(data, 1, max)
T4 <- (minx + maxx) / 2
# Crear el data frame de los estimadores
dataT <- data.frame(T1, T2, T3, T4)
# Calcular medias, varianzas y sesgo
medias <- apply(dataT, 2, mean)
varianzas <- apply(dataT, 2, var)
sesgo <- lambda - medias
library(kableExtra)
# Crear la tabla con las medias, varianzas y sesgos
resultados <- data.frame(
Estimador = c("T1", "T2", "T3", "T4"),
Media = medias,
Varianza = varianzas,
Sesgo = sesgo,
row.names = NULL
)
# Mostrar la tabla con formato mejorado usando kableExtra
resultados %>%
kbl(caption = "Tabla de resultados n = 100: Medias, varianzas y sesgos de los estimadores") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = TRUE,
position = "center")
| Estimador | Media | Varianza | Sesgo |
|---|---|---|---|
| T1 | 51.64623 | 939.2009 | -1.646232 |
| T2 | 104.24066 | 4034.7789 | -54.240664 |
| T3 | 51.93877 | 772.0182 | -1.938765 |
| T4 | 59.13545 | 1099.1176 | -9.135449 |
# Convertir dataT para ggplot2
dataT_long <- melt(dataT, variable.name = "Estimador", value.name = "Valor")
# Crear el boxplot con ggplot2
ggplot(dataT_long, aes(x = Estimador, y = Valor, fill = Estimador)) +
geom_boxplot() +
geom_hline(yintercept = lambda, linetype = "dashed", color = "red") +
stat_summary(fun = "mean", geom = "point", shape = 18, size = 3, color = "black") +
ggtitle("n = 100 | Distribución de los estimadores") +
ylab("Estimaciones") +
xlab("Estimadores") +
theme_minimal() +
theme(legend.position = "none") +
labs(caption = "Línea roja indica el valor verdadero de lambda")
Con esta muestra podemos concluir definitivamente que el estimador T3 puede ser el más recomendado para abordar este tipo de muestras bajo la consideración que la aleatoriedad usada lleva a que no sea posible garantizar que se mantenga esta consistencia en otros escenarios. Adicionalmente, y teniendo en cuenta los cuatros escenarios, el estimador T1 es el segundo en la línea de potencial uso de estimación aunque expresa una menor consistencia.
De cualquier manera, en todos los casos al parecer hubo problemas de sobrestimación aunque en esta última muestra se redujeron casi al valor real.
El estimador T4 tiene consistencia bajo sus propios niveles de insesgadez y eficiencia que suelen ser altos pero equilibrados. El estimador T4 nunca logró expresar buenas propiedades y parece siempre que en sus muestras hubo múltiples valores extremos y un profundo sesgo positivo.
# Parámetros
m <- 1000
lambda <- 50
# Generar los datos
set.seed(2)
X1 <- rexp(m, 1/lambda)
X2 <- rexp(m, 1/lambda)
X3 <- rexp(m, 1/lambda)
X4 <- rexp(m, 1/lambda)
data <- data.frame(X1, X2, X3, X4)
# Cálculo de los estimadores
T1 <- (X1 + X2) / 6 + (X3 + X4) / 3
T2 <- (X1 + 2 * X2 + 3 * X3 + 4 * X4) / 5
T3 <- (X1 + X2 + X3 + X4) / 4
minx <- apply(data, 1, min)
maxx <- apply(data, 1, max)
T4 <- (minx + maxx) / 2
# Crear el data frame de los estimadores
dataT <- data.frame(T1, T2, T3, T4)
# Calcular medias, varianzas y sesgo
medias <- apply(dataT, 2, mean)
varianzas <- apply(dataT, 2, var)
sesgo <- lambda - medias
library(kableExtra)
# Crear la tabla con las medias, varianzas y sesgos
resultados <- data.frame(
Estimador = c("T1", "T2", "T3", "T4"),
Media = medias,
Varianza = varianzas,
Sesgo = sesgo,
row.names = NULL
)
# Mostrar la tabla con formato mejorado usando kableExtra
resultados %>%
kbl(caption = "Tabla de resultados n = 1000: Medias, varianzas y sesgos de los estimadores") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = TRUE,
position = "center")
| Estimador | Media | Varianza | Sesgo |
|---|---|---|---|
| T1 | 50.12424 | 730.9149 | -0.1242380 |
| T2 | 100.23270 | 3202.6313 | -50.2326979 |
| T3 | 50.03163 | 623.6363 | -0.0316303 |
| T4 | 58.57322 | 989.5843 | -8.5732236 |
# Convertir dataT para ggplot2
dataT_long <- melt(dataT, variable.name = "Estimador", value.name = "Valor")
# Crear el boxplot con ggplot2
ggplot(dataT_long, aes(x = Estimador, y = Valor, fill = Estimador)) +
geom_boxplot() +
geom_hline(yintercept = lambda, linetype = "dashed", color = "red") +
stat_summary(fun = "mean", geom = "point", shape = 18, size = 3, color = "black") +
ggtitle("n = 1000 | Distribución de los estimadores") +
ylab("Estimaciones") +
xlab("Estimadores") +
theme_minimal() +
theme(legend.position = "none") +
labs(caption = "Línea roja indica el valor verdadero de lambda")