library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.1.3
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.1.3
library(readxl)
## Warning: package 'readxl' was built under R version 4.1.3
library(knitr)
## Warning: package 'knitr' was built under R version 4.1.3
library(moments)
## Warning: package 'moments' was built under R version 4.1.3
library(CGPfunctions)
## Warning: package 'CGPfunctions' was built under R version 4.1.3
## Warning in .recacheSubclasses(def@className, def, env): undefined subclass
## "packedMatrix" of class "replValueSp"; definition not updated
## Warning in .recacheSubclasses(def@className, def, env): undefined subclass
## "packedMatrix" of class "mMatrix"; definition not updated
Funcion1a = function(Tamaño = 1000, Enfermos = 0.5, Sanos = 0.5) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
Poblacion1 = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(Poblacion1)
}
Lote = Funcion1a(Tamaño = 1000, Enfermos = 0.5, Sanos = 0.5)
## [1] "Lote Generado de tamaño: 1000 Enfermos: 500 Sanos: 500"
Funcion1b = function(Poblacion1, Tamaño, Condicion) {
if (Tamaño<=length(Poblacion1)) {
muestra = sample(x = Poblacion1, size = Tamaño)
P_muestra = sum(muestra == Condicion)/Tamaño
return(P_muestra)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
n = 300
muestra = Funcion1b (Poblacion = Lote, Tamaño = n, Condicion = "Enfermo")
print(paste("Para una muestra de tamaño:", n, "se obtuvo un ^P =",muestra))
## [1] "Para una muestra de tamaño: 300 se obtuvo un ^P = 0.49"
Funcion_Iter = function(Poblacion1, Tamaño, Condicion, Iteraciones) {
if (Tamaño<=length(Poblacion1)) {
muestras_iter = array(NA,Iteraciones)
for (i in 1:Iteraciones) {
muestras_iter[i] = Funcion1b (Poblacion1, Tamaño, Condicion)
}
return(muestras_iter)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
iter = 500
P_muestras = Funcion_Iter (Poblacion1 = Lote, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
hist(P_muestras, prob = TRUE, main = "Histogram with density curve",col="#C6E2FF")
line = mean(P_muestras)
abline(v=line, col="blue", lwd=3)
lines(density(P_muestras), col = 2, lwd = 2)
Resultado=data.frame("ID"=0,"Tamaño_muestra"=n, "Media"=mean(P_muestras),"Mediana"=median(P_muestras),"Desvest"=sd(P_muestras),"Varianza"=var(P_muestras), "Mín."=min(P_muestras), "Máx"=max(P_muestras),"Asimetría"=skewness(P_muestras), "Curtosis"= kurtosis(P_muestras))
Resultado
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín. Máx
## 1 0 300 0.5005733 0.5 0.02524836 0.0006374796 0.43 0.5633333
## Asimetría Curtosis
## 1 0.01137758 2.729669
El parametro para individuos enfermos de la población del Lote P = 0.5, al obtener 500 muestras de tamaño 300 se obtiene un estimador promedio ^P, con base en la proporción de individuos enfermos de cada muestra, muy cercano al parametro, cada vez que se cambian las muestras el valor de ^P puede variar. Al graficar el historgrama de los ^P podemos ver que la gráfica no es 100% simétrica pues tiene un coeficiente de asimetría diferente de cero. Por su parte, la varianza es cercana a cero pero esta depende no solo del tamaño de la muestra si no de como este compuesta.
n_muestras = c(5,10,15,20,30,50,60,100,200,500)
iter = 500
for (i in 1:length(n_muestras)) {
P_muestras = Funcion_Iter (Poblacion = Lote, Tamaño = n_muestras[i], Condicion = "Enfermo",Iteraciones = iter)
par(mfrow=c(1,2))
hist(P_muestras, las=1, ylab = "Frecuencia", main = paste("Muestra de tamaño:",n_muestras[i]), col = "#C6E2FF",prob = TRUE)
abline(v=mean(P_muestras), col="blue", lwd=3)
lines(density(P_muestras), col = 2, lwd = 2)
qqnorm(P_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",las=1,main="qq-normalidad",col = "blue")
qqline(P_muestras,col = 'red', lwd = 2, lty = 2)
print(paste('Para una muestra de tamaño: ', n_muestras[i]))
print(shapiro.test(P_muestras))
x=data.frame("ID"=i,"Tamaño_muestra"=n_muestras[i],
"Media"=mean(P_muestras),
"Mediana"=median(P_muestras),
"Desvest"=sd(P_muestras),
"Varianza"=var(P_muestras),
"Mín."=min(P_muestras),
"Máx"=max(P_muestras),
"Asimetría"=skewness(P_muestras),
"Curtosis"= kurtosis(P_muestras)
)
Resultado=rbind(Resultado,x)
}
## [1] "Para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.92525, p-value = 4.54e-15
## [1] "Para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.96418, p-value = 1.093e-09
## [1] "Para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.97798, p-value = 7.415e-07
## [1] "Para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.97907, p-value = 1.356e-06
## [1] "Para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.98596, p-value = 9.505e-05
## [1] "Para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99095, p-value = 0.003715
## [1] "Para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99384, p-value = 0.03999
## [1] "Para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99343, p-value = 0.02841
## [1] "Para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99622, p-value = 0.281
## [1] "Para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99425, p-value = 0.05645
Resultado
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín.
## 1 0 300 0.5005733 0.5000000 0.02524836 0.0006374796 0.43000000
## 2 1 5 0.5000000 0.6000000 0.21875948 0.0478557114 0.00000000
## 3 2 10 0.5026000 0.5000000 0.15780699 0.0249030461 0.00000000
## 4 3 15 0.4960000 0.4666667 0.13542777 0.0183406814 0.06666667
## 5 4 20 0.4908000 0.5000000 0.10643315 0.0113280160 0.15000000
## 6 5 30 0.5073333 0.5000000 0.08649384 0.0074811846 0.23333333
## 7 6 50 0.5019200 0.5000000 0.07052845 0.0049742621 0.30000000
## 8 7 60 0.4986667 0.5000000 0.06399454 0.0040953017 0.30000000
## 9 8 100 0.5034400 0.5100000 0.04567207 0.0020859383 0.37000000
## 10 9 200 0.5009000 0.5000000 0.03156077 0.0009960822 0.40000000
## 11 10 500 0.4994000 0.5000000 0.01561229 0.0002437435 0.45000000
## Máx Asimetría Curtosis
## 1 0.5633333 0.0113775813 2.729669
## 2 1.0000000 0.0275928151 2.540971
## 3 0.9000000 -0.0244692754 2.788141
## 4 0.8666667 -0.0408566082 2.899059
## 5 0.8000000 -0.0284456189 2.911860
## 6 0.7666667 0.0515777444 3.020477
## 7 0.7000000 0.0491472344 2.943295
## 8 0.7000000 0.0009882548 2.873651
## 9 0.6600000 -0.0846519669 2.906851
## 10 0.6200000 0.0498750987 3.191358
## 11 0.5420000 -0.1438918543 3.225631
Cuando calculamos los estimadores ^P cambiando el tamaño de la muestra podemos observar cómo ^P está muy cerca del valor del parametro P = 0.5 y aunque se esperaría que a mayor tamaño de la muestra menor el error y menor la asimetría, pero no lo podemos concluir con certeza, por su parte la varianza a mayor tamaño de muestra es menor validando el teorema del límite central. Cuando utilizamos la prueba shapiro wilks, se encontraron ocasiones con muestras en las que su valor era mayor que 0.05 rechazando la hipótesis nula H0 generalmente cuando el tamaño de muestra era grande. Cuando nos apoyamos con las gráficas qq-norm en la mayoría de las muestras de tamaños grandes vemos que los puntos(observaciones) están muy cercanos a la línea (nominal) para una distribución normal, hecho que no pasa con las muestras de tamaños pequeños.
Lote de 10% enfermas
Funcion2a = function(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
Poblacion2 = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(Poblacion2)
}
Lote = Funcion2a(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9)
## [1] "Lote Generado de tamaño: 1000 Enfermos: 100 Sanos: 900"
Funcion2b = function(Poblacion2, Tamaño, Condicion) {
if (Tamaño<=length(Poblacion2)) {
muestra = sample(x = Poblacion2, size = Tamaño)
P_muestra = sum(muestra == Condicion)/Tamaño
return(P_muestra)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
n = 300
muestra = Funcion2b (Poblacion = Lote, Tamaño = n, Condicion = "Enfermo")
print(paste("Para una muestra de tamaño:", n, "se obtuvo un ^P =",muestra))
## [1] "Para una muestra de tamaño: 300 se obtuvo un ^P = 0.116666666666667"
Funcion_Iter2 = function(Poblacion2, Tamaño, Condicion, Iteraciones) {
if (Tamaño<=length(Poblacion2)) {
muestras_iter = array(NA,Iteraciones)
for (i in 1:Iteraciones) {
muestras_iter[i] = Funcion2b (Poblacion2, Tamaño, Condicion)
}
return(muestras_iter)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
iter = 500
P_muestras = Funcion_Iter2 (Poblacion2 = Lote, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
hist(P_muestras, prob = TRUE, main = "Histogram with density curve",col="#C6E2FF")
line = mean(P_muestras)
abline(v=line, col="blue", lwd=3)
lines(density(P_muestras), col = 2, lwd = 2)
Resultado2=data.frame("ID"=0,"Tamaño_muestra"=n, "Media"=mean(P_muestras),"Mediana"=median(P_muestras),"Desvest"=sd(P_muestras),"Varianza"=var(P_muestras), "Mín."=min(P_muestras), "Máx"=max(P_muestras),"Asimetría"=skewness(P_muestras), "Curtosis"= kurtosis(P_muestras))
Resultado2
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín. Máx
## 1 0 300 0.09890667 0.1 0.01435328 0.0002060167 0.06 0.1566667
## Asimetría Curtosis
## 1 0.08878936 3.235786
n_muestras = c(5,10,15,20,30,50,60,100,200,500)
iter = 500
for (i in 1:length(n_muestras)) {
P_muestras = Funcion_Iter2 (Poblacion2 = Lote, Tamaño = n_muestras[i], Condicion = "Enfermo",Iteraciones = iter)
par(mfrow=c(1,2))
hist(P_muestras, las=1, ylab = "Frecuencia", main = paste("Muestra de tamaño:",n_muestras[i]), col = "#C6E2FF",prob = TRUE)
abline(v=mean(P_muestras), col="blue", lwd=3)
lines(density(P_muestras), col = 2, lwd = 2)
qqnorm(P_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",las=1,main="qq-normalidad",col = "blue")
qqline(P_muestras,col = 'red', lwd = 2, lty = 2)
print(paste('Para una muestra de tamaño: ', n_muestras[i]))
print(shapiro.test(P_muestras))
x=data.frame("ID"=i,"Tamaño_muestra"=n_muestras[i],
"Media"=mean(P_muestras),
"Mediana"=median(P_muestras),
"Desvest"=sd(P_muestras),
"Varianza"=var(P_muestras),
"Mín."=min(P_muestras),
"Máx"=max(P_muestras),
"Asimetría"=skewness(P_muestras),
"Curtosis"= kurtosis(P_muestras)
)
Resultado2=rbind(Resultado2,x)
}
## [1] "Para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.72918, p-value < 2.2e-16
## [1] "Para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.82888, p-value < 2.2e-16
## [1] "Para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.87684, p-value < 2.2e-16
## [1] "Para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.92331, p-value = 2.788e-15
## [1] "Para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.95062, p-value = 7.141e-12
## [1] "Para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.97346, p-value = 7.125e-08
## [1] "Para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.96876, p-value = 7.812e-09
## [1] "Para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.98454, p-value = 3.697e-05
## [1] "Para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.9921, p-value = 0.009387
## [1] "Para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99352, p-value = 0.03056
Resultado2
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín.
## 1 0 300 0.09890667 0.10000000 0.014353280 2.060167e-04 0.06000000
## 2 1 5 0.10880000 0.00000000 0.137551448 1.892040e-02 0.00000000
## 3 2 10 0.09500000 0.10000000 0.091715995 8.411824e-03 0.00000000
## 4 3 15 0.09746667 0.06666667 0.082505737 6.807197e-03 0.00000000
## 5 4 20 0.10380000 0.10000000 0.066440867 4.414389e-03 0.00000000
## 6 5 30 0.09520000 0.10000000 0.053086268 2.818152e-03 0.00000000
## 7 6 50 0.10100000 0.10000000 0.040712591 1.657515e-03 0.00000000
## 8 7 60 0.09506667 0.10000000 0.036231645 1.312732e-03 0.01666667
## 9 8 100 0.09918000 0.10000000 0.028607068 8.183643e-04 0.03000000
## 10 9 200 0.10176000 0.10000000 0.018971617 3.599222e-04 0.05000000
## 11 10 500 0.10004800 0.10000000 0.009470008 8.968106e-05 0.07200000
## Máx Asimetría Curtosis
## 1 0.1566667 0.0887893565 3.235786
## 2 0.6000000 1.0254724892 3.367707
## 3 0.4000000 0.9101186401 3.623092
## 4 0.4000000 0.9698296898 4.201118
## 5 0.4000000 0.6453870707 3.593677
## 6 0.3000000 0.4301947262 3.055665
## 7 0.2400000 0.2389498591 2.728164
## 8 0.2166667 0.4270446803 3.042933
## 9 0.1800000 0.1972383161 2.996661
## 10 0.1650000 0.0615408162 2.906324
## 11 0.1340000 -0.0003688938 2.992897
Lote de 90% enfermas
Funcion3a = function(Tamaño = 1000, Enfermos = 0.9, Sanos = 0.1) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
Poblacion3 = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(Poblacion3)
}
Lote = Funcion3a(Tamaño = 1000, Enfermos = 0.9, Sanos = 0.1)
## [1] "Lote Generado de tamaño: 1000 Enfermos: 900 Sanos: 100"
Funcion3b = function(Poblacion3, Tamaño, Condicion) {
if (Tamaño<=length(Poblacion3)) {
muestra = sample(x = Poblacion3, size = Tamaño)
P_muestra = sum(muestra == Condicion)/Tamaño
return(P_muestra)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
n = 300
muestra = Funcion3b (Poblacion = Lote, Tamaño = n, Condicion = "Enfermo")
print(paste("Para una muestra de tamaño:", n, "se obtuvo un ^P =",muestra))
## [1] "Para una muestra de tamaño: 300 se obtuvo un ^P = 0.886666666666667"
Funcion_Iter3 = function(Poblacion3, Tamaño, Condicion, Iteraciones) {
if (Tamaño<=length(Poblacion3)) {
muestras_iter = array(NA,Iteraciones)
for (i in 1:Iteraciones) {
muestras_iter[i] = Funcion3b (Poblacion3, Tamaño, Condicion)
}
return(muestras_iter)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
iter = 500
P_muestras = Funcion_Iter3 (Poblacion3 = Lote, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
hist(P_muestras, prob = TRUE, main = "Histogram with density curve",col="#C6E2FF")
line = mean(P_muestras)
abline(v=line, col="blue", lwd=3)
lines(density(P_muestras), col = 2, lwd = 2)
Resultado3=data.frame("ID"=0,"Tamaño_muestra"=n, "Media"=mean(P_muestras),"Mediana"=median(P_muestras),"Desvest"=sd(P_muestras),"Varianza"=var(P_muestras), "Mín."=min(P_muestras), "Máx"=max(P_muestras),"Asimetría"=skewness(P_muestras), "Curtosis"= kurtosis(P_muestras))
Resultado3
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín.
## 1 0 300 0.8993667 0.9 0.01421042 0.0002019361 0.8633333
## Máx Asimetría Curtosis
## 1 0.9466667 -0.1531266 3.054568
n_muestras = c(5,10,15,20,30,50,60,100,200,500)
iter = 500
for (i in 1:length(n_muestras)) {
P_muestras = Funcion_Iter3 (Poblacion3 = Lote, Tamaño = n_muestras[i], Condicion = "Enfermo",Iteraciones = iter)
par(mfrow=c(1,2))
hist(P_muestras, las=1, ylab = "Frecuencia", main = paste("Muestra de tamaño:",n_muestras[i]), col = "#C6E2FF",prob = TRUE)
abline(v=mean(P_muestras), col="blue", lwd=3)
lines(density(P_muestras), col = 2, lwd = 2)
qqnorm(P_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",las=1,main="qq-normalidad",col = "blue")
qqline(P_muestras,col = 'red', lwd = 2, lty = 2)
print(paste('Para una muestra de tamaño: ', n_muestras[i]))
print(shapiro.test(P_muestras))
x=data.frame("ID"=i,"Tamaño_muestra"=n_muestras[i],
"Media"=mean(P_muestras),
"Mediana"=median(P_muestras),
"Desvest"=sd(P_muestras),
"Varianza"=var(P_muestras),
"Mín."=min(P_muestras),
"Máx"=max(P_muestras),
"Asimetría"=skewness(P_muestras),
"Curtosis"= kurtosis(P_muestras)
)
Resultado3=rbind(Resultado3,x)
}
## [1] "Para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.71278, p-value < 2.2e-16
## [1] "Para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.8316, p-value < 2.2e-16
## [1] "Para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.90141, p-value < 2.2e-16
## [1] "Para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.92116, p-value = 1.64e-15
## [1] "Para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.94901, p-value = 4.18e-12
## [1] "Para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.97244, p-value = 4.322e-08
## [1] "Para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.97523, p-value = 1.726e-07
## [1] "Para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.98122, p-value = 4.689e-06
## [1] "Para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99063, p-value = 0.002899
## [1] "Para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: P_muestras
## W = 0.99417, p-value = 0.05286
Resultado3
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín.
## 1 0 300 0.8993667 0.9000000 0.014210422 2.019361e-04 0.8633333
## 2 1 5 0.8980000 1.0000000 0.133685240 1.787174e-02 0.4000000
## 3 2 10 0.9044000 0.9000000 0.091199093 8.317275e-03 0.4000000
## 4 3 15 0.8988000 0.9333333 0.074838980 5.600873e-03 0.6666667
## 5 4 20 0.8994000 0.9000000 0.072041794 5.190020e-03 0.6500000
## 6 5 30 0.8974000 0.9000000 0.050953020 2.596210e-03 0.7333333
## 7 6 50 0.9009200 0.9000000 0.042354946 1.793941e-03 0.7600000
## 8 7 60 0.8998333 0.9000000 0.038109334 1.452321e-03 0.7833333
## 9 8 100 0.8994400 0.9000000 0.028978715 8.397659e-04 0.8000000
## 10 9 200 0.8999200 0.9000000 0.019448653 3.782501e-04 0.8300000
## 11 10 500 0.8997960 0.9000000 0.009295763 8.641121e-05 0.8700000
## Máx Asimetría Curtosis
## 1 0.9466667 -0.15312657 3.054568
## 2 1.0000000 -0.99116367 2.959498
## 3 1.0000000 -0.91193453 4.365321
## 4 1.0000000 -0.48253165 2.662277
## 5 1.0000000 -0.66306743 3.143860
## 6 1.0000000 -0.41782254 2.884353
## 7 1.0000000 -0.29228845 2.727149
## 8 1.0000000 -0.35014896 3.076708
## 9 0.9700000 -0.32461131 2.873026
## 10 0.9550000 -0.21288746 2.956275
## 11 0.9320000 0.07999803 3.239206
Cuando se modificó la población para generar el Lote A y el Lote B con proporciones de 10% y 90% de individuos enfermos respectivamente, podemos observar que estimadores ^P para ambos casos están muy cercanos del valor del parámetro P = 0.1 y P = 0.9 respectivamente. Cuando se compara la distribución muestral con n > 30 es notable como la varianza disminuye cuando n aumenta, esto permite confirmar que los valores del estimador convergen al parámetro real (teorema del límite central). Con relación a la aplicación de la prueba Shapiro-Wilk normality test para muestras de tamaño n > 200 se logra aceptación y rechazo de la hipótesis nula H0 hecho que se respalda con la gráfica qq-plot de normalidad, donde las observaciones se sobreponen cada vez más con muestras de tamaño n > 200 en la línea compuesta por los valores nominales, acercándose más a una distribución Gaussiana.
FuncionP2a = function(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
PoblacionP2a = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(PoblacionP2a)
}
LoteA = FuncionP2a(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9)
## [1] "Lote Generado de tamaño: 1000 Enfermos: 100 Sanos: 900"
FuncionP2b = function(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
PoblacionP2b = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(PoblacionP2b)
}
LoteB = FuncionP2b(Tamaño = 1500, Enfermos = 0.1, Sanos = 0.9)
## [1] "Lote Generado de tamaño: 1500 Enfermos: 150 Sanos: 1350"
GenerarMuestra_P1P2 = function(PoblacionP2a, PoblacionP2b, Tamaño, Condicion) {
if (Tamaño<=length(PoblacionP2a)||Tamaño<=length(PoblacionP2b)) {
muestra_1 = sample(x = PoblacionP2a, size = Tamaño)
P_muestra_1 = sum(muestra_1 == Condicion)/Tamaño
muestra_2 = sample(x = PoblacionP2b, size = Tamaño)
P_muestra_2 = sum(muestra_2 == Condicion)/Tamaño
return(P_muestra_1-P_muestra_2)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
n = 300
P1P2 = GenerarMuestra_P1P2(PoblacionP2a = LoteA, PoblacionP2b = LoteB, n, Condicion = "Enfermo")
print(paste("Para una muestra de tamaño:", n, "de ambos lotes se tiene un P1-P2 =",P1P2))
## [1] "Para una muestra de tamaño: 300 de ambos lotes se tiene un P1-P2 = -0.0166666666666667"
GenerarMuestras_Iter_P1P2 = function(PoblacionP2a, PoblacionP2b, Tamaño, Condicion, Iteraciones) {
if (Tamaño<=length(PoblacionP2a)||Tamaño<=length(PoblacionP2b)) {
muestras_iter = array(NA,Iteraciones)
for (i in 1:Iteraciones) {
muestras_iter[i] = GenerarMuestra_P1P2(PoblacionP2a, PoblacionP2b, Tamaño, Condicion)
}
return(muestras_iter)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
iter = 500
P1P2_muestras = GenerarMuestras_Iter_P1P2 (PoblacionP2a = LoteA, PoblacionP2b = LoteB, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
hist(P1P2_muestras,prob = TRUE, main = "Histogram with density curve",col="#C6E2FF")
line = mean(P1P2_muestras)
abline(v=line, col="blue", lwd=3)
lines(density(P1P2_muestras), col = 2, lwd = 2)
Resultado4=data.frame("ID"=0,"Tamaño_muestra"=n, "Media"=mean(P1P2_muestras),"Mediana"=median(P1P2_muestras),"Desvest"=sd(P1P2_muestras),"Varianza"=var(P1P2_muestras), "Mín."=min(P1P2_muestras), "Máx"=max(P1P2_muestras),"Asimetría"=skewness(P1P2_muestras), "Curtosis"= kurtosis(P1P2_muestras))
Resultado4
## ID Tamaño_muestra Media Mediana Desvest Varianza Mín. Máx
## 1 0 300 -0.0003133333 0 0.01974598 0.0003899039 -0.06 0.05
## Asimetría Curtosis
## 1 -0.007976821 2.845159
Para una muestra de tamaño 300 la media obtenida ^P <> 0, aunque su mediana si es igual a 0, podemos ver que no todas las diferencias son cero. La asimetría es muy baja para el caso de las diferencias.
n_Muestras = c(5,10,15,20,30,50,60,100,200,500)
for (i in 1:length(n_Muestras)) {
P1P2_muestras = GenerarMuestras_Iter_P1P2 (PoblacionP2a = LoteA, PoblacionP2b = LoteB, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
par(mfrow=c(1,2))
hist(P1P2_muestras, las=1, ylab = "Frecuencia", main = paste("Muestra de tamaño:", n_Muestras[i]), col = "#C6E2FF",prob = TRUE)
abline(v=mean(P1P2_muestras), col="blue", lwd=3)
lines(density(P1P2_muestras), col = 2, lwd = 2)
qqnorm(P1P2_muestras, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",main="qq-normalidad",col = "blue")
qqline(P1P2_muestras,col = 'red', lwd = 2, lty = 2)
print(paste('Para una muestra de tamaño: ', n_Muestras[i]))
print(shapiro.test(P1P2_muestras))
x=data.frame("ID"=i,"Tamaño_muestra"=n_Muestras[i],
"Media"=mean(P1P2_muestras),
"Mediana"=median(P1P2_muestras),
"Desvest"=sd(P1P2_muestras),
"Varianza"=var(P1P2_muestras),
"Mín."=min(P1P2_muestras),
"Máx"=max(P1P2_muestras),
"Asimetría"=skewness(P1P2_muestras),
"Curtosis"= kurtosis(P1P2_muestras)
)
Resultado4=rbind(Resultado4,x)
}
## [1] "Para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99514, p-value = 0.119
## [1] "Para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99439, p-value = 0.06361
## [1] "Para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99479, p-value = 0.08893
## [1] "Para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99562, p-value = 0.1752
## [1] "Para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99562, p-value = 0.176
## [1] "Para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99201, p-value = 0.008704
## [1] "Para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.9954, p-value = 0.1474
## [1] "Para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99608, p-value = 0.2528
## [1] "Para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99398, p-value = 0.0451
## [1] "Para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras
## W = 0.99568, p-value = 0.1842
Resultado4
## ID Tamaño_muestra Media Mediana Desvest Varianza
## 1 0 300 -0.0003133333 0.000000000 0.01974598 0.0003899039
## 2 1 5 0.0003333333 0.000000000 0.02153898 0.0004639279
## 3 2 10 -0.0008266667 0.000000000 0.02193858 0.0004813014
## 4 3 15 0.0004666667 0.000000000 0.02082693 0.0004337609
## 5 4 20 -0.0000400000 0.000000000 0.02241088 0.0005022473
## 6 5 30 0.0005466667 0.000000000 0.02176398 0.0004736707
## 7 6 50 0.0007400000 0.001666667 0.02057640 0.0004233881
## 8 7 60 -0.0007266667 0.000000000 0.02057471 0.0004233186
## 9 8 100 -0.0009600000 0.000000000 0.02113066 0.0004465047
## 10 9 200 -0.0015600000 -0.001666667 0.02064992 0.0004264192
## 11 10 500 0.0003000000 0.000000000 0.02060051 0.0004243810
## Mín. Máx Asimetría Curtosis
## 1 -0.06000000 0.05000000 -0.007976821 2.845159
## 2 -0.06333333 0.06333333 -0.117484161 3.069725
## 3 -0.05333333 0.07333333 0.156623728 3.013158
## 4 -0.06666667 0.06000000 -0.049995513 3.209923
## 5 -0.07000000 0.06333333 -0.133770911 2.903981
## 6 -0.06666667 0.07000000 0.039218423 3.205429
## 7 -0.05000000 0.05333333 -0.006498846 2.721918
## 8 -0.06333333 0.05333333 -0.028359061 2.897942
## 9 -0.06000000 0.05666667 -0.035693208 2.777289
## 10 -0.06000000 0.07333333 0.198083940 3.173019
## 11 -0.06666667 0.05333333 -0.092354369 2.899813
Para analizar la normalidad nos fijaremos en el test de Shapiro-Wilks que plantea la hipótesis nula que una muestra proviene de una distribución normal. Eligimos un nivel de significancia, de 0.05, y tenemos una hipótesis alternativa que sostiene que la distribución no es normal. Así pues: H0 -> La distribución es normal, H1 -> La distribución no es normal. Los resultados obtenidos nos arrojan P-values superiores a 0.05 con muestras de tamaño más grande por lo que no rechazamos la hipótesis nula para ellas.
FuncionP2e = function(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
PoblacionP2e = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(PoblacionP2e)
}
LoteA2 = FuncionP2e(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9)
## [1] "Lote Generado de tamaño: 1000 Enfermos: 100 Sanos: 900"
FuncionP2e2 = function(Tamaño = 1000, Enfermos = 0.1, Sanos = 0.9) {
Enfermos = round(Tamaño * Enfermos, 0)
Sanos = round(Tamaño * Sanos, 0)
PoblacionP2e2 = c(rep("Enfermo", Enfermos), rep("Sana",Sanos))
print(paste("Lote Generado de tamaño: ", Tamaño, " Enfermos: ",Enfermos,"Sanos: ",Sanos))
return(PoblacionP2e2)
}
LoteB2 = FuncionP2e2(Tamaño = 1500, Enfermos = 0.15, Sanos = 0.85)
## [1] "Lote Generado de tamaño: 1500 Enfermos: 225 Sanos: 1275"
GenerarMuestra_P1P2_2 = function(PoblacionP2e, PoblacionP2e2, Tamaño, Condicion) {
if (Tamaño<=length(PoblacionP2e)||Tamaño<=length(PoblacionP2e2)) {
muestra_1 = sample(x = PoblacionP2e, size = Tamaño)
P_muestra_1 = sum(muestra_1 == Condicion)/Tamaño
muestra_2 = sample(x = PoblacionP2e2, size = Tamaño)
P_muestra_2 = sum(muestra_2 == Condicion)/Tamaño
return(P_muestra_1-P_muestra_2)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
n = 300
P1P2_2 = GenerarMuestra_P1P2_2(PoblacionP2e = LoteA, PoblacionP2e2 = LoteB, n, Condicion = "Enfermo")
print(paste("Para una muestra de tamaño:", n, "de ambos lotes se tiene un P1-P2 =",P1P2_2))
## [1] "Para una muestra de tamaño: 300 de ambos lotes se tiene un P1-P2 = 0.01"
GenerarMuestras_Iter_P1P2_2 = function(PoblacionP2e, PoblacionP2e2, Tamaño, Condicion, Iteraciones) {
if (Tamaño<=length(PoblacionP2e)||Tamaño<=length(PoblacionP2e2)) {
muestras_iter = array(NA,Iteraciones)
for (i in 1:Iteraciones) {
muestras_iter[i] = GenerarMuestra_P1P2(PoblacionP2e, PoblacionP2e2, Tamaño, Condicion)
}
return(muestras_iter)
}
else {
print("Error: el tamaño de la muestra supera el tamaño de la población.")
return(-1)
}
}
iter = 500
P1P2_muestras_2 = GenerarMuestras_Iter_P1P2_2 (PoblacionP2e = LoteA, PoblacionP2e2 = LoteB, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
hist(P1P2_muestras_2,prob = TRUE, main = "Histogram with density curve",col="#C6E2FF")
line = mean(P1P2_muestras_2)
abline(v=line, col="blue", lwd=3)
lines(density(P1P2_muestras_2), col = 2, lwd = 2)
Resultado5=data.frame("ID"=0,"Tamaño_muestra"=n, "Media"=mean(P1P2_muestras_2),"Mediana"=median(P1P2_muestras_2),"Desvest"=sd(P1P2_muestras_2),"Varianza"=var(P1P2_muestras_2), "Mín."=min(P1P2_muestras_2), "Máx"=max(P1P2_muestras_2),"Asimetría"=skewness(P1P2_muestras_2), "Curtosis"= kurtosis(P1P2_muestras_2))
Resultado5
## ID Tamaño_muestra Media Mediana Desvest Varianza
## 1 0 300 -0.002706667 -0.003333333 0.02301594 0.0005297334
## Mín. Máx Asimetría Curtosis
## 1 -0.07333333 0.07 -0.02552711 2.92413
n_Muestras2 = c(5,10,15,20,30,50,60,100,200,500)
for (i in 1:length(n_Muestras)) {
P1P2_muestras = GenerarMuestras_Iter_P1P2_2 (PoblacionP2e = LoteA, PoblacionP2e2 = LoteB, Tamaño = n, Condicion = "Enfermo",Iteraciones = iter)
par(mfrow=c(1,2))
hist(P1P2_muestras, las=1, ylab = "Frecuencia", main = paste("Muestra de tamaño:", n_Muestras2[i]), col = "#C6E2FF",prob = TRUE)
abline(v=mean(P1P2_muestras_2), col="blue", lwd=3)
lines(density(P1P2_muestras_2), col = 2, lwd = 2)
qqnorm(P1P2_muestras_2, xlab="Cuantiles teóricos", ylab="Cuantiles muestrales",main="qq-normalidad",col = "blue")
qqline(P1P2_muestras_2,col = 'red', lwd = 2, lty = 2)
print(paste('Para una muestra de tamaño: ', n_Muestras[i]))
print(shapiro.test(P1P2_muestras_2))
x=data.frame("ID"=i,"Tamaño_muestra"=n_Muestras[i],
"Media"=mean(P1P2_muestras_2),
"Mediana"=median(P1P2_muestras_2),
"Desvest"=sd(P1P2_muestras_2),
"Varianza"=var(P1P2_muestras_2),
"Mín."=min(P1P2_muestras_2),
"Máx"=max(P1P2_muestras_2),
"Asimetría"=skewness(P1P2_muestras_2),
"Curtosis"= kurtosis(P1P2_muestras_2)
)
Resultado5=rbind(Resultado5,x)
}
## [1] "Para una muestra de tamaño: 5"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 10"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 15"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 20"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 30"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 50"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 60"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 100"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 200"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
## [1] "Para una muestra de tamaño: 500"
##
## Shapiro-Wilk normality test
##
## data: P1P2_muestras_2
## W = 0.99704, p-value = 0.5028
Resultado5
## ID Tamaño_muestra Media Mediana Desvest Varianza
## 1 0 300 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 2 1 5 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 3 2 10 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 4 3 15 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 5 4 20 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 6 5 30 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 7 6 50 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 8 7 60 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 9 8 100 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 10 9 200 -0.002706667 -0.003333333 0.02301594 0.0005297334
## 11 10 500 -0.002706667 -0.003333333 0.02301594 0.0005297334
## Mín. Máx Asimetría Curtosis
## 1 -0.07333333 0.07 -0.02552711 2.92413
## 2 -0.07333333 0.07 -0.02552711 2.92413
## 3 -0.07333333 0.07 -0.02552711 2.92413
## 4 -0.07333333 0.07 -0.02552711 2.92413
## 5 -0.07333333 0.07 -0.02552711 2.92413
## 6 -0.07333333 0.07 -0.02552711 2.92413
## 7 -0.07333333 0.07 -0.02552711 2.92413
## 8 -0.07333333 0.07 -0.02552711 2.92413
## 9 -0.07333333 0.07 -0.02552711 2.92413
## 10 -0.07333333 0.07 -0.02552711 2.92413
## 11 -0.07333333 0.07 -0.02552711 2.92413
A nivel estadístico ambos escenarios hacen que el ^P1-P2 converja a P1-P2. Es notable que ver como en el escenario B que presenta un mejor desempeño en el loteA del 5%. ^P1-P2 converjan a esta diferencia -0.05 lo que nos indicaría de manera general que, si hay un mejoramiento diefrencial X entre las Poblaciones, las diferencias en muestras de ambos lotes ^P1-P2 tenderían a ser X.
El artículo “Statistical Errors: P values, the ‘gold estándar’ of statistical validity, are not as reliable as many scientists assume” nos invita a reflexionar sobre la interpretación y variedad de conclusiones erradas o más bien generalizadas que pueden surgir al utilizar este criterio estadístico como apoyo a la toma de decisiones.
En muchas disciplinas, la importancia de los hallazgos se juzga por los valores de p. Se utilizan para probar (y rechazar) la “hipótesis nula”, que generalmente supone que el efecto que se está probando no existe. Cuanto menor sea el valor p encontrado para un conjunto de resultados, es menos probable que los resultados sean puramente aleatorios. Los resultados se consideraron “estadísticamente significativos” si el valor era inferior a 0,05. Sin embargo, también hay una gran diferencia en este valor. Algunas propuestas deberían ser menos, y algunas se atreven a garantizar valores ideales.
Este artículo examina el caso de Motyl, estudiante de doctorado en psicología en la Universidad de Virginia en Charlottesville. Realizó una encuesta a casi 2000 personas que parecía mostrar que los políticos moderados ven las sombras grises con más precisión que los extremistas de extrema derecha o izquierda. Su estudio preliminar arrojó un valor P de 0,01, que generalmente se interpreta como “altamente significativo”. Sin embargo, ante las críticas, decidieron repetir las medidas con datos adicionales y encontraron un valor de P de 0,59, ni siquiera cerca del nivel de significación tradicional de 0,05. En ese punto, todo se vino abajo. Pero el problema no son los datos, es el valor P sorprendentemente parejo, que no es tan confiable ni tan objetivo como la mayoría de los científicos piensan. En otro caso, en 2005 John Ioannidis, epidemiólogo de la Universidad de Stanford en California, demostró que la mayoría de los resultados publicados estaban equivocados;2 desde entonces, una serie de problemas de replicación de alto perfil han obligado a los científicos a repensar cómo evalúan los resultados. El valor p siempre ha sido criticado. en sus casi nueve décadas de existencia. Hay mucha literatura sobre P que lo respalda, y hay advertencias importantes sobre su inestabilidad. El valor p es muy sensible a los datos, como el tamaño de los datos, la presencia de valores atípicos, la aleatoriedad de la muestra, etc. Por lo tanto, estos factores pueden afectar sus resultados, no solo los datos en sí son importantes, sino también el contexto en el que se analiza la información.
Como reflexión personal, cuando analizo el escenario del taller, veo que a medida que cambian los datos, también cambia el valor de P. Se aceptaron resultados hipotéticos para un tamaño de muestra dado, pero se rechazaron en otra corrida. Considero que el análisis de datos debe considerar no solo los criterios de decisión, sino que también encuentro muy interesante el apoyo de métodos gráficos y simulaciones que permitan extraer conclusiones para lograr una mayor convergencia sobre la validez o invalidez de los supuestos. Finalmente, el artículo destaca un punto muy importante: los críticos también lamentan cómo el valor P contribuye a la confusión. Cualquier reforma debe barrer las culturas arraigadas. Debe cambiar la forma en que se enseña la estadística, la forma en que se realiza el análisis de datos y la forma en que se informan e interpretan los resultados.