Se construye la población de plantas enfermas
set.seed(3)
n <- 1000
p <- 0.5
enf <- rep(c(0, 1), each = n*p)
Se construye una función que permita obtener una muestra aleatoria de la población anterior y el calculo del estimador de la proporción muestral.
muestraEst <- function(pob, m) {
muestra <- sample(pob, m, replace = TRUE)
pE <- mean(muestra)
return(list(muestraP=muestra, pEstimado = pE))
}
muestraEst(enf,80)
## $muestraP
## [1] 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 0 0 0 1 1 0 1 0 1 0 0 1 0 0 1 1 0 1 1 1 1 0
## [39] 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0
## [77] 1 0 0 0
##
## $pEstimado
## [1] 0.5125
Se procede a repetir la función 500 veces con el objetivo de analizar el comportamiento del estimador
n_rep <- 500
resu <- data.frame(repeticion = numeric(n_rep), estimacionP = numeric(n_rep))
for (i in 1:n_rep) {
resu$repeticion[i] <- i
resu$estimacionP[i] <- muestraEst(enf,80)$pEstimado
}
Se calcula el sesgo para observar que tan alejado esta el valor estimado del real
sesgo <- mean(resu$estimacionP) - p
abs(sesgo)
## [1] 0.000175
library(ggplot2)
ggplot(resu, aes(x=estimacionP)) +
geom_histogram(aes(y=after_stat(count)), binwidth=0.1, colour="black", fill="white") +
geom_vline(aes(xintercept=0.5), color="red", linetype="dashed") +
labs(title=bquote("Histograma de los valores de" ~ hat(p)), x=expression(hat(p)), y="Frecuencia") +
annotate("text", x = 0.5, y = Inf, label = "Parámetro"~ P, vjust = 2, hjust=-1, color = "red") +
theme(plot.title = element_text(hjust = 0.5))
Los resultados obtenidos para el sesgo son bajos, con lo que se puede asumir que el estimador ˆp es insesgado. Por otra parte el histograma muestra que las 500 estimaciones para ˆp se distribuyen de manera simétrica.
Para observar la variabilidad vamos calcular el coeficiente de variación
cvar <- (sd(resu$estimacionP) / mean(resu$estimacionP)) * 100
cvar
## [1] 11.08458
Se observa que valor del coeficiente de variación es bajo, lo que nos indica que los valores estimados ˆp son bastante precisos (homogeneos).
Se utiliza la función creada anteriormente en el punto b para estimar los valores de ˆp para distintos tamaños de muestra propuestos n=5,10,15,20,30,50,60,100,200,500 y comparar los resultados obtenidos respecto a normalidad.
m <- 1000 #
X <- matrix(unlist(lapply(1:m, function(i) muestraEst(enf, 80)$muestraP)), ncol=m)
# Generación de muestras
X5=X[ ,1:5]
X10=X[ ,1:10]
X15=X[ ,1:15]
X20=X[ ,1:20]
X30=X[ ,1:30]
X50=X[ ,1:50]
X60=X[ ,1:60]
X100=X[ ,1:100]
X200=X[ ,1:200]
X500=X[ ,1:500]
Mx5=apply(X5,1,mean)
Mx10=apply(X10,1,mean)
Mx15=apply(X15,1,mean)
Mx20=apply(X20,1,mean)
Mx30=apply(X30,1,mean)
Mx50=apply(X50,1,mean)
Mx60=apply(X60,1,mean)
Mx100=apply(X100,1,mean)
Mx200=apply(X200,1,mean)
Mx500=apply(X500,1,mean)
Ahora se procedera a usar la prueba de Shapiro-Wilk la cual se utiliza para determinar si una muestra de datos proviene de una distribución normal. Las hipótesis que plantea esta prueba son:
H0: Los datos siguen una distribución normal.
H1: Los datos no siguen una distribución normal.
medias_list <- list(Mx5, Mx10, Mx15, Mx20, Mx30, Mx50, Mx60, Mx100, Mx200, Mx500)
names(medias_list) <- c("n=5", "n=10", "n=15", "n=20", "n=30", "n=50", "n=60", "n=100", "n=200", "n=500")
resultados_shapiro <- lapply(medias_list, shapiro.test)
valores_p <- sapply(resultados_shapiro, function(resultado) resultado$p.value)
options(scipen=999)
valores_p
## n=5 n=10 n=15 n=20 n=30 n=50
## 0.0004182696 0.0025717211 0.0079500892 0.0088014786 0.0021525115 0.2779254456
## n=60 n=100 n=200 n=500
## 0.4563259644 0.0148150335 0.4147764327 0.3116454867
Se va rechazar la H0 si valor-p < 0.05
valores_p < 0.05
## n=5 n=10 n=15 n=20 n=30 n=50 n=60 n=100 n=200 n=500
## TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE
Se observa que a medida que el tamaño de muestra aumenta no se tiende a rechazar H0. Ahora se grafican los histogramas para ver su comportamiento
par(mfrow=c(2,5), mar = c(4.1, 3.1, 3.1, 1.1)) # divide la gráfica en una matriz
hist(Mx5, main = "n=5", freq=FALSE, xlab="", ylab="")
hist(Mx10, main = "n=10",freq=FALSE, xlab="", ylab="")
hist(Mx15, main = "n=15",freq=FALSE, xlab="", ylab="")
hist(Mx20, main = "n=20",freq=FALSE, xlab="", ylab="")
hist(Mx30, main = "n=30",freq=FALSE,xlab="", ylab="")
hist(Mx50, main = "n=50",freq=FALSE,xlab="", ylab="")
hist(Mx60, main = "n=60", freq = FALSE,xlab="", ylab="")
hist(Mx100, main = "n=100", freq = FALSE,xlab=expression(hat(p)), ylab="")
hist(Mx200, main = "n=200",freq = FALSE,xlab="", ylab="")
hist(Mx500, main = "n=500", freq = FALSE,xlab="", ylab="")
Con los histogramas se observa que a medida que aumenta el tamaño de las
muestra la distribución adquiere cada vez más una forma simétrica, un
comportamiento de los datos que siguen una distribución normal.
Ahora se realiza una prueba gráfica conocida como qqplot(). La idea de esta prueba es que los puntos generados por los cuantiles por cada muestra, a medida que aumentan, se ajusten cada vez mejor a la curva qqline. Esto demuestra que existe un ajuste hacia la distribución normal.
par(mfrow=c(2,5), mar = c(4.1, 3.1, 3.1, 1.1))
qqnorm(Mx5, main="n=5", xlab="", ylab="") ; qqline(Mx5, col="red")
qqnorm(Mx10, main ="n=10", xlab="", ylab="") ; qqline(Mx10, col="red")
qqnorm(Mx15, main ="n=15", xlab="", ylab="") ; qqline(Mx15, col="red")
qqnorm(Mx20, main ="n=20", xlab="", ylab="") ; qqline(Mx20, col="red")
qqnorm(Mx30, main = "n=30", xlab="", ylab="") ; qqline(Mx30, col="red")
qqnorm(Mx50, main = "n=50", xlab="", ylab="") ; qqline(Mx50, col="red")
qqnorm(Mx60, main ="n=60", xlab="", ylab="") ; qqline(Mx60, col="red")
qqnorm(Mx100, main ="n=100",xlab="Cuantiles Teorícos" ,ylab="") ; qqline(Mx100, col="red")
qqnorm(Mx200, main ="n=200", xlab="", ylab="") ; qqline(Mx200, col="red")
qqnorm(Mx500, main="n=500", xlab="", ylab="") ; qqline(Mx500, col="red")
Como paso con los histogramas se puede observar que a medida que aumenta el tamaño de muestra, el ajuste hacia la qqline mejora. Esto demuestra una convergencia entre los cuantiles teóricos normales y los cuantiles muestrales, lo que sugiere que estas estimaciones tienden a seguir una distribución normal.
n <- 1000
p10 <- 0.1
enf10 <- c(rep(1,n*p10), rep(0,n-(n*p10)))
muestraEst(enf10,80)
## $muestraP
## [1] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
## [39] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [77] 0 0 0 0
##
## $pEstimado
## [1] 0.0875
resu10 <- data.frame(repeticion = numeric(n_rep), estimacionP = numeric(n_rep))
for (i in 1:n_rep) {
resu10$repeticion[i] <- i
resu10$estimacionP[i] <- muestraEst(enf10,80)$pEstimado
}
¿Qué tan simétricos o sesgados son los resultados obtenidos?
Se calcula el sesgo para observar que tan alejado esta el valor estimado del real
sesgo10 <- mean(resu10$estimacionP) - p10
abs(sesgo10)
## [1] 0.001675
library(ggplot2)
ggplot(resu10, aes(x=estimacionP)) +
geom_histogram(aes(y=after_stat(count)), binwidth=0.1, colour="black", fill="white") +
geom_vline(aes(xintercept=0.1), color="red", linetype="dashed") +
labs(title=bquote("Histograma de los valores de" ~ hat(p)), x=expression(hat(p)), y="Frecuencia") +
annotate("text", x = 0.1, y = Inf, label = "Parámetro"~ P, vjust = 2, hjust=-1, color = "red") +
theme(plot.title = element_text(hjust = 0.1))
Los resultados obtenidos para el sesgo son bajos, con lo que se puede asumir que el estimador ˆp es insesgado. Por otra parte el histograma muestra que las 500 estimaciones para ˆp se distribuyen de manera simétrica.
¿Qué se puede observar en cuanto a variabilidad?
Para observar la variabilidad vamos calcular el coeficiente de variación
cvar10 <- (sd(resu10$estimacionP) / mean(resu10$estimacionP)) * 100
cvar10
## [1] 35.47153
Se observa que valor del coeficiente de variación es algo alto, lo que nos indica que los valores estimados ˆp son pueden a llegar a ser poco precisos ( no homogeneos).
Ahora se estiman los valores de ˆp para distintos tamaños de muestra propuestos n=5,10,15,20,30,50,60,100,200,500 y comparar los resultados obtenidos respecto a normalidad.
m <- 1000
X10 <- matrix(unlist(lapply(1:m, function(i) muestraEst(enf10, 80)$muestraP)), ncol=m)
X105=X10[ ,1:5]
X1010=X10[ ,1:10]
X1015=X10[ ,1:15]
X1020=X10[ ,1:20]
X1030=X10[ ,1:30]
X1050=X10[ ,1:50]
X1060=X10[ ,1:60]
X10100=X10[ ,1:100]
X10200=X10[ ,1:200]
X10500=X10[ ,1:500]
Mx105=apply(X105,1,mean)
Mx1010=apply(X1010,1,mean)
Mx1015=apply(X1015,1,mean)
Mx1020=apply(X1020,1,mean)
Mx1030=apply(X1030,1,mean)
Mx1050=apply(X1050,1,mean)
Mx1060=apply(X1060,1,mean)
Mx10100=apply(X10100,1,mean)
Mx10200=apply(X10200,1,mean)
Mx10500=apply(X10500,1,mean)
Ahora se procedera a usar la prueba de Shapiro-Wilk la cual se utiliza para determinar si una muestra de datos proviene de una distribución normal. Las hipótesis que plantea esta prueba son:
H0: Los datos siguen una distribución normal.
H1: Los datos no siguen una distribución normal.
medias_list10 <- list(Mx105, Mx1010, Mx1015, Mx1020, Mx1030, Mx1050, Mx1060, Mx10100, Mx10200, Mx10500)
names(medias_list10) <- c("n=5", "n=10", "n=15", "n=20", "n=30", "n=50", "n=60", "n=100", "n=200", "n=500")
resultados_shapiro10 <- lapply(medias_list10, shapiro.test)
valores_p10 <- sapply(resultados_shapiro10, function(resultado10) resultado10$p.value)
options(scipen=999)
valores_p10
## n=5 n=10 n=15
## 0.000000000004452209 0.000000007063930279 0.000000771795869672
## n=20 n=30 n=50
## 0.000017254969081139 0.000789716758196705 0.021972921624026719
## n=60 n=100 n=200
## 0.165260017874583248 0.035833268420154156 0.068334284531243975
## n=500
## 0.164052432257846381
Se va rechazar la H0 si valor-p < 0.05
valores_p10 < 0.05
## n=5 n=10 n=15 n=20 n=30 n=50 n=60 n=100 n=200 n=500
## TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE
Se observa que a medida que el tamaño de muestra aumenta no se tiende a rechazar H0. Ahora se grafican los histogramas para ver su comportamiento
par(mfrow=c(2,5), mar = c(4.1, 3.1, 3.1, 1.1)) # divide la gráfica en una matriz
hist(Mx105, main = "n=5", freq=FALSE, xlab="", ylab="")
hist(Mx1010, main = "n=10",freq=FALSE, xlab="", ylab="")
hist(Mx1015, main = "n=15",freq=FALSE, xlab="", ylab="")
hist(Mx1020, main = "n=20",freq=FALSE, xlab="", ylab="")
hist(Mx1030, main = "n=30",freq=FALSE,xlab="", ylab="")
hist(Mx1050, main = "n=50",freq=FALSE,xlab="", ylab="")
hist(Mx1060, main = "n=60", freq = FALSE,xlab="", ylab="")
hist(Mx10100, main = "n=100", freq = FALSE,xlab=expression(hat(p)), ylab="")
hist(Mx10200, main = "n=200",freq = FALSE,xlab="", ylab="")
hist(Mx10500, main = "n=500", freq = FALSE,xlab="", ylab="")
Con los histogramas se observa que a medida que aumenta el tamaño de las muestra la distribución adquiere cada vez más una forma simétrica, un comportamiento de los datos que siguen una distribución normal.
Ahora se realiza una prueba gráfica conocida como qqplot(). La idea de esta prueba es que los puntos generados por los cuantiles por cada muestra, a medida que aumentan, se ajusten cada vez mejor a la curva qqline. Esto demuestra que existe un ajuste hacia la distribución normal.
par(mfrow=c(2,5), mar = c(4.1, 3.1, 3.1, 1.1))
qqnorm(Mx105, main="n=5", xlab="", ylab="") ; qqline(Mx105, col="red")
qqnorm(Mx1010, main ="n=10", xlab="", ylab="") ; qqline(Mx1010, col="red")
qqnorm(Mx1015, main ="n=15", xlab="", ylab="") ; qqline(Mx1015, col="red")
qqnorm(Mx1020, main ="n=20", xlab="", ylab="") ; qqline(Mx1020, col="red")
qqnorm(Mx1030, main = "n=30", xlab="", ylab="") ; qqline(Mx1030, col="red")
qqnorm(Mx1050, main = "n=50", xlab="", ylab="") ; qqline(Mx1050, col="red")
qqnorm(Mx1060, main ="n=60", xlab="", ylab="") ; qqline(Mx1060, col="red")
qqnorm(Mx10100, main ="n=100",xlab="Cuantiles Teorícos" ,ylab="") ; qqline(Mx10100, col="red")
qqnorm(Mx10200, main ="n=200", xlab="", ylab="") ; qqline(Mx10200, col="red")
qqnorm(Mx10500, main="n=500", xlab="", ylab="") ; qqline(Mx10500, col="red")
Como paso con los histogramas se puede observar que a medida que aumenta el tamaño de muestra, el ajuste hacia la qqline mejora. Esto demuestra una convergencia entre los cuantiles teóricos normales y los cuantiles muestrales, lo que sugiere que estas estimaciones tienden a seguir una distribución normal.
n <- 1000
p90 <- 0.9
enf90 <- c(rep(1,n*p90), rep(0,n-(n*p90)))
muestraEst(enf90,80)
## $muestraP
## [1] 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
## [39] 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1
## [77] 1 0 1 0
##
## $pEstimado
## [1] 0.85
resu90 <- data.frame(repeticion = numeric(n_rep), estimacionP = numeric(n_rep))
for (i in 1:n_rep) {
resu90$repeticion[i] <- i
resu90$estimacionP[i] <- muestraEst(enf90,80)$pEstimado
}
¿Qué tan simétricos o sesgados son los resultados obtenidos?
Se calcula el sesgo para observar que tan alejado esta el valor estimado del real
sesgo90 <- mean(resu90$estimacionP) - p90
abs(sesgo90)
## [1] 0.000925
library(ggplot2)
ggplot(resu90, aes(x=estimacionP)) +
geom_histogram(aes(y=after_stat(count)), binwidth=0.1, colour="black", fill="white") +
geom_vline(aes(xintercept=0.9), color="red", linetype="dashed") +
labs(title=bquote("Histograma de los valores de" ~ hat(p)), x=expression(hat(p)), y="Frecuencia") +
annotate("text", x = 0.9, y = Inf, label = "Parámetro"~ P, vjust = 2, hjust=-1, color = "red") +
theme(plot.title = element_text(hjust = 0.9))
Los resultados obtenidos para el sesgo son bajos, con lo que se puede asumir que el estimador ˆp es insesgado. Por otra parte el histograma muestra que las 500 estimaciones para ˆp se distribuyen de manera simétrica.
¿Qué se puede observar en cuanto a variabilidad?
Para observar la variabilidad vamos calcular el coeficiente de variación
cvar90 <- (sd(resu90$estimacionP) / mean(resu90$estimacionP)) * 100
cvar90
## [1] 3.584349
Se observa que valor del coeficiente de variación es bajo, lo que nos indica que los valores estimados ˆp son bastantes precisos (homogeneos).
Ahora se estiman los valores de ˆp para distintos tamaños de muestra propuestos n=5,10,15,20,30,50,60,100,200,500 y comparar los resultados obtenidos respecto a normalidad.
m <- 1000
X90 <- matrix(unlist(lapply(1:m, function(i) muestraEst(enf90, 80)$muestraP)), ncol=m)
X905=X90[ ,1:5]
X9010=X90[ ,1:10]
X9015=X90[ ,1:15]
X9020=X90[ ,1:20]
X9030=X90[ ,1:30]
X9050=X90[ ,1:50]
X9060=X90[ ,1:60]
X90100=X90[ ,1:100]
X90200=X90[ ,1:200]
X90500=X90[ ,1:500]
Mx905=apply(X905,1,mean)
Mx9010=apply(X9010,1,mean)
Mx9015=apply(X9015,1,mean)
Mx9020=apply(X9020,1,mean)
Mx9030=apply(X9030,1,mean)
Mx9050=apply(X9050,1,mean)
Mx9060=apply(X9060,1,mean)
Mx90100=apply(X90100,1,mean)
Mx90200=apply(X90200,1,mean)
Mx90500=apply(X90500,1,mean)
Ahora se procedera a usar la prueba de Shapiro-Wilk la cual se utiliza para determinar si una muestra de datos proviene de una distribución normal. Las hipótesis que plantea esta prueba son:
H0: Los datos siguen una distribución normal.
H1: Los datos no siguen una distribución normal.
medias_list90 <- list(Mx905, Mx9010, Mx9015, Mx9020, Mx9030, Mx9050, Mx9060, Mx90100, Mx90200, Mx90500)
names(medias_list90) <- c("n=5", "n=10", "n=15", "n=20", "n=30", "n=50", "n=60", "n=100", "n=200", "n=500")
resultados_shapiro90 <- lapply(medias_list90, shapiro.test)
valores_p90 <- sapply(resultados_shapiro90, function(resultado90) resultado90$p.value)
options(scipen=999)
valores_p90
## n=5 n=10 n=15 n=20
## 0.00000000000107486 0.00000001736145573 0.00000123187668557 0.00001701375663141
## n=30 n=50 n=60 n=100
## 0.00000821550065356 0.00082879964162259 0.00025314974857987 0.00071979794620815
## n=200 n=500
## 0.40238222576504623 0.48014111054381242
Se va rechazar la H0 si valor-p < 0.05
valores_p90 < 0.05
## n=5 n=10 n=15 n=20 n=30 n=50 n=60 n=100 n=200 n=500
## TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
Se observa que a medida que el tamaño de muestra aumenta no se tiende a rechazar H0. Ahora se grafican los histogramas para ver su comportamiento
par(mfrow=c(2,5), mar = c(4.1, 3.1, 3.1, 1.1)) # divide la gráfica en una matriz
hist(X905, main = "n=5", freq=FALSE, xlab="", ylab="")
hist(Mx9010, main = "n=10",freq=FALSE, xlab="", ylab="")
hist(Mx9015, main = "n=15",freq=FALSE, xlab="", ylab="")
hist(Mx9020, main = "n=20",freq=FALSE, xlab="", ylab="")
hist(Mx9030, main = "n=30",freq=FALSE,xlab="", ylab="")
hist(Mx9050, main = "n=50",freq=FALSE,xlab="", ylab="")
hist(Mx9060, main = "n=60", freq = FALSE,xlab="", ylab="")
hist(Mx90100, main = "n=100", freq = FALSE,xlab=expression(hat(p)), ylab="")
hist(Mx90200, main = "n=200",freq = FALSE,xlab="", ylab="")
hist(Mx90500, main = "n=500", freq = FALSE,xlab="", ylab="")
Con los histogramas se observa que a medida que aumenta el tamaño de las muestra la distribución adquiere cada vez más una forma simétrica, un comportamiento de los datos que siguen una distribución normal.
Ahora se realiza una prueba gráfica conocida como qqplot(). La idea de esta prueba es que los puntos generados por los cuantiles por cada muestra, a medida que aumentan, se ajusten cada vez mejor a la curva qqline. Esto demuestra que existe un ajuste hacia la distribución normal.
par(mfrow=c(2,5), mar = c(4.1, 3.1, 3.1, 1.1))
qqnorm(Mx905, main="n=5", xlab="", ylab="") ; qqline(Mx905, col="red")
qqnorm(Mx9010, main ="n=10", xlab="", ylab="") ; qqline(Mx9010, col="red")
qqnorm(Mx9015, main ="n=15", xlab="", ylab="") ; qqline(Mx9015, col="red")
qqnorm(Mx9020, main ="n=20", xlab="", ylab="") ; qqline(Mx9020, col="red")
qqnorm(Mx9030, main = "n=30", xlab="", ylab="") ; qqline(Mx9030, col="red")
qqnorm(Mx9050, main = "n=50", xlab="", ylab="") ; qqline(Mx9050, col="red")
qqnorm(Mx9060, main ="n=60", xlab="", ylab="") ; qqline(Mx9060, col="red")
qqnorm(Mx90100, main ="n=100",xlab="Cuantiles Teorícos" ,ylab="") ; qqline(Mx90100, col="red")
qqnorm(Mx90200, main ="n=200", xlab="", ylab="") ; qqline(Mx90200, col="red")
qqnorm(Mx90500, main="n=500", xlab="", ylab="") ; qqline(Mx90500, col="red")
Como paso con los histogramas se puede observar que a medida que aumenta el tamaño de muestra, el ajuste hacia la qqline mejora. Esto demuestra una convergencia entre los cuantiles teóricos normales y los cuantiles muestrales, lo que sugiere que estas estimaciones tienden a seguir una distribución normal.