m <- as.integer(c(1000,10000,100000))
for (variable in m) {
n <- variable
x <- runif(n,0,1)
y <- runif(n,0,1)
xy <- data.frame(x,y)
xy <- as.data.frame(xy)
fx = function(x,y){
sqrt(
(x-0.5)^2+(y-0.5)^2
)
}
xy$dist <- mapply(fx,xy$x,xy$y)
puntos_dentro <- xy[xy$dist <= 0.5,]
rad <- 0.5 # Valor del radio
xcenter <- 0.5 # Coordenada en x del centro
ycenter <- 0.5 # Coordenada en y del centro
numero_puntos_dentro <- sum(xy$dist < 0.5)
pii <- numero_puntos_dentro / n
estimar_pi <- 4 * pii
par(mfrow = c(1, 2))
plot(c(0, 1), c(0, 1), type="n", xlab="X", ylab="Y", cex.main=0.7, cex.sub=0.5,
sub=paste0("Para una Muestra: ",n),
main = paste0("Estimación de π: ", round(estimar_pi, digits = 4),
" Puntos dentro del circulo: ",numero_puntos_dentro))
theta <- seq(0, 2 * pi, length = 200)
polygon(x=rad * cos(theta) + xcenter,
y=rad * sin(theta) + ycenter,
lwd=3, col='steelblue1', border='steelblue4')
abline(v = seq(0, 1, 0.1), lty = 2, col = "gray50")
abline(h = seq(0, 1, 0.1), lty = 2, col = "gray50")
points(puntos_dentro$x, puntos_dentro$y, col="red")
puntos_fuera <- xy[xy$dist > 0.5,]
plot(c(0, 1), c(0, 1), type="n", xlab="X", ylab="Y", cex.main=0.7, cex.sub=0.5,
sub=paste0("Para una Muestra: ",n),
main = paste0(" Puntos fuera del circulo: ",
length(puntos_fuera$x)))
theta <- seq(0, 2 * pi, length = 200)
polygon(x=rad * cos(theta) + xcenter,
y=rad * sin(theta) + ycenter,
lwd=3, col='steelblue1', border='steelblue4')
abline(v = seq(0, 1, 0.1), lty = 2, col = "gray50")
abline(h = seq(0, 1, 0.1), lty = 2, col = "gray50")
points(puntos_fuera$x, puntos_fuera$y, col="black")
}
m <- c(20,50,100,1000)
#par(mfrow = c(1, 1))
funcion <- function(n) {
n <- n
lambda <- 0.5
x1 <- rexp(n,lambda)
x2 <- rexp(n,lambda)
x3 <- rexp(n,lambda)
x4 <- rexp(n,lambda)
base <- data.frame(x1,x2,x3,x4)
fx1 <- function(x1,x2,x3,x4){
((x1+x2)/6)+((x3+x4)/3)
}
fx2 <- function(x1,x2,x3,x4){
(x1+(2*x2)+(3*x3)+(4*x4))/5
}
fx3 <- function(x1,x2,x3,x4){
(x1+x2+x3+x4)/4
}
fx4 <- function(x1,x2,x3,x4){
(min(x1,x2,x3,x4)+max(x1,x2,x3,x4))/2
}
#fx1(base$x1[1],base$x2[1],base$x3[1],base$x4[1])
T1 <- mapply(fx1,base$x1,base$x2,base$x3,base$x4)
T2 <- mapply(fx2,base$x1,base$x2,base$x3,base$x4)
T3 <- mapply(fx3,base$x1,base$x2,base$x3,base$x4)
T4 <- mapply(fx4,base$x1,base$x2,base$x3,base$x4)
W <- data.frame(T1,T2,T3,T4)
boxplot(W, main=paste0("Numero de muestras n:", n," Lambda:" ,lambda))
abline(h=2, col="red3")
print(
summary(W),
)
print(
"-------------------------insesgadez-----------------------------------"
)
print(
if(mean(W$T1) >1.7 && mean(W$T1) <2.3){
paste("Promedio T1: ",round(mean(W$T1), digits = 3),"Insesgado: cerca a la media")
}else{paste("Promedio T1: ",round(mean(W$T1), digits = 3),"Sesgado: lejos de la media")}
)
print(
if(mean(W$T2) >1.7 && mean(W$T2) <2.3){
paste("Promedio T2: ",round(mean(W$T2), digits = 3),"Insesgado: cerca a la media")
}else{paste("Promedio T2: ",round(mean(W$T2), digits = 3),"Sesgado: lejos de la media")}
)
print(
if(mean(W$T3) >1.7 && mean(W$T3) <2.3){
paste("Promedio T3: ",round(mean(W$T3), digits = 3),"Insesgado: cerca a la media")
}else{paste("Promedio T3: ",round(mean(W$T3), digits = 3),"Sesgado: lejos de la media")}
)
print(
if(mean(W$T4) >1.7 && mean(W$T4) <2.3){
paste("Promedio T4: ",round(mean(W$T4), digits = 3),"Insesgado: cerca a la media")
}else{paste("Promedio T4: ",round(mean(W$T4), digits = 3),"Sesgado: lejos de la media")}
)
print(
"-------------------------Varianzas-----------------------------------"
)
print(
if(var(W$T1) <1.3){
paste("Varianza T1: ",round(var(W$T1), digits = 3)," Eficiente")
}else{paste("Varianza T1: ",round(var(W$T1), digits = 3)," Ineficiente")}
)
print(
if(var(W$T2) <1.3){
paste("Varianza T1: ",round(var(W$T2), digits = 3)," Eficiente")
}else{paste("Varianza T1: ",round(var(W$T2), digits = 3)," Ineficiente")}
)
print(
if(var(W$T3) <1.3){
paste("Varianza T1: ",round(var(W$T3), digits = 3)," Eficiente")
}else{paste("Varianza T1: ",round(var(W$T3), digits = 3)," Ineficiente")}
)
print(
if(var(W$T4) <1.3){
paste("Varianza T1: ",round(var(W$T4), digits = 3)," Eficiente")
}else{paste("Varianza T1: ",round(var(W$T4), digits = 3)," Ineficiente")}
)
}
funcion(20)
## T1 T2 T3 T4
## Min. :0.5265 Min. :0.9375 Min. :0.638 Min. :0.6898
## 1st Qu.:1.1246 1st Qu.:2.4047 1st Qu.:1.147 1st Qu.:1.2935
## Median :1.7188 Median :3.3108 Median :1.876 Median :2.4182
## Mean :1.9260 Mean :3.7150 Mean :2.041 Mean :2.2740
## 3rd Qu.:2.4387 3rd Qu.:4.4976 3rd Qu.:2.620 3rd Qu.:3.1369
## Max. :4.2273 Max. :8.1654 Max. :4.012 Max. :4.1196
## [1] "-------------------------insesgadez-----------------------------------"
## [1] "Promedio T1: 1.926 Insesgado: cerca a la media"
## [1] "Promedio T2: 3.715 Sesgado: lejos de la media"
## [1] "Promedio T3: 2.041 Insesgado: cerca a la media"
## [1] "Promedio T4: 2.274 Insesgado: cerca a la media"
## [1] "-------------------------Varianzas-----------------------------------"
## [1] "Varianza T1: 1.032 Eficiente"
## [1] "Varianza T1: 3.852 Ineficiente"
## [1] "Varianza T1: 1.143 Eficiente"
## [1] "Varianza T1: 1.252 Eficiente"
funcion(50)
## T1 T2 T3 T4
## Min. :0.3126 Min. :0.6135 Min. :0.3192 Min. :0.2994
## 1st Qu.:1.2751 1st Qu.:2.6143 1st Qu.:1.2987 1st Qu.:1.3824
## Median :1.9265 Median :3.8724 Median :1.8882 Median :2.1519
## Mean :2.0467 Mean :4.0993 Mean :1.9861 Mean :2.2743
## 3rd Qu.:2.6344 3rd Qu.:5.3018 3rd Qu.:2.6034 3rd Qu.:2.9724
## Max. :4.5999 Max. :9.4644 Max. :4.8106 Max. :5.3245
## [1] "-------------------------insesgadez-----------------------------------"
## [1] "Promedio T1: 2.047 Insesgado: cerca a la media"
## [1] "Promedio T2: 4.099 Sesgado: lejos de la media"
## [1] "Promedio T3: 1.986 Insesgado: cerca a la media"
## [1] "Promedio T4: 2.274 Insesgado: cerca a la media"
## [1] "-------------------------Varianzas-----------------------------------"
## [1] "Varianza T1: 1.011 Eficiente"
## [1] "Varianza T1: 4.197 Ineficiente"
## [1] "Varianza T1: 0.974 Eficiente"
## [1] "Varianza T1: 1.355 Ineficiente"
funcion(100)
## T1 T2 T3 T4
## Min. :0.2978 Min. : 0.5432 Min. :0.3151 Min. :0.367
## 1st Qu.:1.4098 1st Qu.: 2.7743 1st Qu.:1.4012 1st Qu.:1.485
## Median :1.9001 Median : 3.8187 Median :1.8164 Median :2.080
## Mean :2.0380 Mean : 4.0684 Mean :1.9700 Mean :2.356
## 3rd Qu.:2.5370 3rd Qu.: 5.0326 3rd Qu.:2.6094 3rd Qu.:2.986
## Max. :5.3316 Max. :11.7506 Max. :4.5622 Max. :6.729
## [1] "-------------------------insesgadez-----------------------------------"
## [1] "Promedio T1: 2.038 Insesgado: cerca a la media"
## [1] "Promedio T2: 4.068 Sesgado: lejos de la media"
## [1] "Promedio T3: 1.97 Insesgado: cerca a la media"
## [1] "Promedio T4: 2.356 Sesgado: lejos de la media"
## [1] "-------------------------Varianzas-----------------------------------"
## [1] "Varianza T1: 0.906 Eficiente"
## [1] "Varianza T1: 4.034 Ineficiente"
## [1] "Varianza T1: 0.748 Eficiente"
## [1] "Varianza T1: 1.522 Ineficiente"
funcion(1000)
## T1 T2 T3 T4
## Min. :0.1968 Min. : 0.384 Min. :0.2631 Min. :0.2689
## 1st Qu.:1.2557 1st Qu.: 2.430 1st Qu.:1.3384 1st Qu.:1.4585
## Median :1.7860 Median : 3.538 Median :1.8675 Median :2.1209
## Mean :1.9753 Mean : 3.946 Mean :1.9920 Mean :2.3401
## 3rd Qu.:2.5112 3rd Qu.: 5.013 3rd Qu.:2.5109 3rd Qu.:2.9633
## Max. :5.9694 Max. :13.717 Max. :5.9838 Max. :7.8954
## [1] "-------------------------insesgadez-----------------------------------"
## [1] "Promedio T1: 1.975 Insesgado: cerca a la media"
## [1] "Promedio T2: 3.946 Sesgado: lejos de la media"
## [1] "Promedio T3: 1.992 Insesgado: cerca a la media"
## [1] "Promedio T4: 2.34 Sesgado: lejos de la media"
## [1] "-------------------------Varianzas-----------------------------------"
## [1] "Varianza T1: 0.973 Eficiente"
## [1] "Varianza T1: 4.387 Ineficiente"
## [1] "Varianza T1: 0.854 Eficiente"
## [1] "Varianza T1: 1.461 Ineficiente"
library(moments)
library(nortest)
TeoremaLC <- function(n,porc,m,q){
n<-n
porc <- porc
#a) aun que el punto a me dice que cree una poblacion 1.000, le doy la opcion
#al usuario de crear la poblacion del numero que el quiera para comprobar
#el teorema del limite central, de igaul forma para el porcentaje (porc)
#de plantas enfermas
poblacion <- rbinom(n, 1, porc)
#b) Funcion que calcula el pˆ para n=x
estimador <- function(muestras) {
muestra <- sample(poblacion, muestras, replace = FALSE)
estimar <- mean(muestra)
return(estimar)
}
##Funcion tlc que genera una matrix por el numero de poblacion con
##Respecto al numero de muestras generadas y llama la funcion anterior estimar
##Para estimar la muestra de los resultados, por ultimo guarda los resultados de
##cada muestra y grafica los histograma por cada muestra con su varianza, sesgo, y
##coeficiente de variación de Skewness
tlc <-function(n,m){
resultados <- matrix(nrow = n, ncol = length(m))
for (i in 1:n) {
for (j in 1:length(m)) {
estimadorAux <- estimador(m[j])
resultados[i, j] <- estimadorAux
}
}
resultados <- as.data.frame(resultados)
if (length(m)==1) {
columnas<-1
}else{columnas<-2}
par(cex=0.5, cex.axis=.5,
cex.lab=.5, cex.main=.5,
cex.sub=.5, mfrow=c(as.integer(ceiling(length(m)/2)),columnas),
mai = c(.5, .5, .5, .5))
for (variable in 1:length(m)) {
media <- mean(resultados[,variable])
ds <- sd(resultados[,variable])
varianza <- var(resultados[,variable])
CoeSkewness <- skewness(resultados[,variable])
#CoeFisher <- kurtosis(resultados[,variable])
#if (m[variable]<51) {
prueba <- shapiro.test(resultados[,variable])
nombre <- "Shapiro"
#}else{
#pruebaks <- ks.test(resultados[,variable])
# nombreks <- "Kolmogorov"
#}
prueba <- as.numeric(prueba$p.value)
sesgo <- mean(resultados[,variable]) - porc
varianza <- signif(var(resultados[,variable]), 3)
sesgo <- signif(mean(resultados[,variable]) - porc, 3)
CoeSkewness <- signif(CoeSkewness, 3)
h <-hist(resultados[,variable],
main = paste0("Muestra:",m[variable],"\n",
"Varianza: ", varianza," | ",
"Sesgo: ", sesgo,"\n",
"Asimetria Skewness:", CoeSkewness," | ",
nombre," Test:",signif(prueba, 3)
),
col="darkseagreen2"
)
text(h$mids, h$counts, labels=h$counts, adj=c(0.5,0.25),col="#3b5998")
abline(v = media, col="red", lwd=3, lty=2)
if (q==1) {
qqnorm(resultados[,variable],
main =paste0("Muestra:",m[variable],"\n",
"Varianza: ", varianza," | ",
"Sesgo: ", sesgo,"\n",
"Asimetria Skewness:", CoeSkewness," | ",
nombre," Test:",signif(prueba, 3)
))
qqline(resultados[,variable],col="red")
}
}
}
return(tlc(n,m))
}
#Poblacion: tamaño de poblacion
#%Enferma: Porcentaje de poblacion enferma
#Numero de muestra: Numero de las muestras < poblacion
#q: 1:si quieren el grafico qqnorm 0:No
#TeoremaLC(Poblacion,%Enferma,Numero de muestra,qqnorm)
TeoremaLC(1000,0.5,c(500),0)
Según los resultados obtenidos cuando se ejecuto la función TeoremaLC con los parametros Población 1000, plantas enfermas 0.5(50%) y numero de muestras 500 (TeoremaLC(1000,0.5,c(500))), esto nos genera una variabilidad en los datos casi nula, con un resultado de varianza < 0.005. Genera muy poco sesgo > -0.005 y < 0.005, Cuando le aplicamos el coeficiente de asimetría de Skewness nos da como resultado que la distribución es negativamente sesgada, esto ultimo indica que la cola de la distribución es mas pesada del lado izquierdo que del derecho.
TeoremaLC(1000,0.5,c(5,10,15),1)
TeoremaLC(1000,0.5,c(20,30,50),1)
TeoremaLC(1000,0.5,c(60,100,200),1)
TeoremaLC(1000,0.5,c(500),1)
Observamos que a medida que va creciendo el numero de muestras no importando que sea aleatorio los datos van tomando una distribución normal esto comprueba el teorema del limite central (TLC) el cual dice que entre mas grande sea la muestra los datos tomaran forma de una distribución normal, vemos de igual forma la prueba de shapiro wilk (shapiro.test) que para las dos muestra que hicimos de 500 no hay evidencia suficiente para rechazar la hipótesis nula (H0) y que los datos siguen una distribución normal.
TeoremaLC(1000,0.1,c(5,10,15),1)
TeoremaLC(1000,0.1,c(20,30,50),1)
TeoremaLC(1000,0.1,c(60,100,200),1)
TeoremaLC(1000,0.1,c(500),1)
TeoremaLC(1000,0.9,c(5,10,15),1)
TeoremaLC(1000,0.9,c(20,30,50),1)
TeoremaLC(1000,0.9,c(60,100,200),1)
TeoremaLC(1000,0.9,c(500),1)
library(ggplot2,warn.conflicts = FALSE)
## Warning: package 'ggplot2' was built under R version 4.2.3
#Semilla para que los datos den igual
set.seed(1)
#Muestra
DatosMP <- c(7.69, 4.97, 4.56, 6.49, 4.34, 6.24, 4.45)
#Muestra con reemplazo de 70000
Muestras <- sample(DatosMP,7000, replace = TRUE)
#DataFrame de datos de 1000*7
DataFrame<-data.frame(matrix(Muestras,nrow=1000,ncol=7))
#Media por cada fila
DataFrame$Media <- apply(DataFrame,1,mean)
#Calculo de metodo 1
IntervaloMetodo1=quantile(DataFrame$Media, probs=c(0.025, 0.975))
#Calculo de metodo 2
IntervaloMetodo2<-c(2*mean(DataFrame$Media)-IntervaloMetodo1[2],
2*mean(DataFrame$Media)-IntervaloMetodo1[1])
IntervaloMetodo1
## 2.5% 97.5%
## 4.747000 6.418964
IntervaloMetodo2
## 97.5% 2.5%
## 4.655576 6.327540
##Grafico
ggplot()+
geom_histogram(aes(x=DataFrame$Media),
bins = 12, color="#034A94", fill="#F4CCCC")+
labs(fill="",x="",y="")+
geom_vline(xintercept = IntervaloMetodo1,
linewidth=1, color="#FFFF00")+
geom_vline(xintercept = IntervaloMetodo2,
linewidth=1, color="#6EF68A")
##Medias para estimacion de sesgo
media_original <- mean(DatosMP)
medias_bootstrap <- mean(DataFrame$Media)
sesgo <- mean(medias_bootstrap - media_original)
sesgo <- signif(sesgo,3)
print(paste("Sesgo de la media:", sesgo))
## [1] "Sesgo de la media: 0.00298"
Debido al ultimo calculo de sesgo (0.00298) el cual es muy bajo y los intervalos de confianzas 2.5% 4.747 97.5% 6.419, podriamos decir que si confiariamos en las estimaciones del metodo de boostrap