Mostrar las estimaciones de densidad de núcleo de β̂₁ OLS y β̂₁ ROLS para sus 1000 simulaciones.
Tengo el siguiente problema: Realicé 1000 simulaciones para obtener un vector de θ^1OLS y θ^1ROLS. Ahora tengo que comparar ambos representándolos como una función de densidad en un gráfico (debo hacerlo con ggplot()). ¿Es posible graficar la densidad a partir de un vector?
A continuación mi código, disculpe el desorden:
N=10000
X <- runif(N, min = 0, max = 100)
E <- runif(N, min = -5, max = 5)
U = E * sqrt(X)
# regresión de la población
Y <- 3 + 2 * X + U
population <- data.frame(X, Y)
# tamaño de muestra y repetición
n <- 1000
reps<- 1000
# inicializar la matriz de resultados
fit_coef <- matrix(ncol = 2, nrow = reps)
fit_coef_ROLS<-matrix(ncol = 2, nrow = reps)
# bucle de muestreo y estimación de los coeficientes para OLS
set.seed(1)
for (i in 1:reps){
sample <- population[sample(1:N, n), ]
fit_coef[i,] <- lm(Y ~ X, data = sample)$coefficients
}
fit_coefβ1<- fit_coef[,-1]
fit_coef_β1
# bucle de muestreo y estimación de los coeficientes robustos para ROLS
set.seed(1)
for (i in 1:reps){
sample <- population[sample(1:N, n), ]
fit_coef_ROLS[i,] <- rlm(Y ~ X, data = sample)$coefficients
}
fit_coefβ1ROLS<- fit_coef_ROLS[,-1]
fit_coefβ1ROLS
# Gráfico
df_coefOLS<-as.data.frame(fit_coef)
plot_coefOLS<-ggplot(df_coefOLS, aes(x = fit_coefβ1)) +
geom_density()
plot_coefOLS
Obtengo un gráfico si uso esta fórmula, pero no sé cómo obtener la densidad de ambos estimadores en un solo gráfico y además la densidad no está en el rango de [0,1].
¡Agradezco cualquier ayuda!
Este es el enlace a la tarea: Enlace a la tarea
davy.ai
Sí, es posible trazar una densidad a partir de un vector utilizando ggplot. De hecho, ya has trazado la densidad de un vector en tu código. Para trazar las densidades de ambos β^1_OLS y β^1_ROLS en un solo gráfico, puedes combinar los vectores en un marco de datos y utilizar la función aes() para especificar la variable de agrupación.
Así es cómo puedes modificar tu código para lograr esto:
“`{r}
library(ggplot2)
Combinar los vectores en un marco de datos
df_coef <- data.frame(coef = c(fit_coef_ß1, fit_coef_ß1_ROLS),
estimator = rep(c(“OLS”, “ROLS”), each = reps))
Trazar la densidad de ambos vectores
plot_coef <- ggplot(df_coef, aes(x = coef, fill = estimator)) +
geom_density(alpha = 0.5) +
scale_fill_manual(values = c(“#F8766D”, “#00BFC4”),
name = “Estimador”) +
labs(x = expression(paste(“Estimación de coeficiente (“, hat(beta[1]), “)”)),
y = “Densidad”,
title = “Comparación de β^1_OLS y β^1_ROLS”) +
theme_bw()
plot_coef
“`
En el código anterior, los vectores
fit_coef_ß1
yfit_coef_ß1_ROLS
se combinan en un marco de datosdf_coef
, donde la variableestimator
especifica si el coeficiente es de OLS o ROLS. Esta variable se utiliza como el estético de relleno en la funciónggplot()
para crear un gráfico de densidad de dos colores, con la leyenda mostrando los dos tipos de estimadores.El gráfico resultante debería verse como sigue:
Ten en cuenta que los valores de densidad pueden ser mayores que 1, ya que las densidades no son probabilidades y no tienen un límite superior de 1. Sin embargo, el área bajo la curva de densidad siempre debería integrar a 1.