## [1] 0.01842309 0.23500860 0.77610068 0.84696904 0.03474655 0.89149348
## [1] 0.34261697 0.82910696 0.06396366 0.02159473 0.20978864 0.88952581
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)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"
# 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"
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
## 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
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.
# 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 %"
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
# 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")
}# 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
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.
# 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:"
## [1] "Cantidad de puntos dentro del círculo: 780"
## [1] "Estimación de π: 3.12"
## [1] "Resultados para lote con 90% de plantas enfermas:"
## [1] "Cantidad de puntos dentro del círculo: 778"
## [1] "Estimación de π: 3.112"
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
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
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)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.