2 R En este laboratorio se usara principalmente datos falsos, todo con el fin de simular los datos que se busca entender.
4.2.1 Generar numeros con R
Puedes utilizar diferentes maneras de generar numeros y puedes elegir de que forma hacerlo
4.2.1.1 sample
la funcion “sample” aleatoriamente puedes poner diferentes propiedades como A o B y esperar que salgan los resultados que deseas. En este caso aleatoriamente encogio entre A y B cada vez, hecho 10 veces y se utilizo “TRUE” para poner los elementos de vuelta y que aleatoriamente vuelvan a aparecer
gumballs <- c("A","B")
sample_of_gumballs <-sample(gumballs, 10, replace=TRUE)
sample_of_gumballs
## [1] "B" "B" "A" "B" "B" "B" "A" "A" "B" "B"
Este es otro ejemplo con numeros
some_numbers <- c(1,2,3,4,5,5,5,5)
sample_of_numbers <-sample(some_numbers, 20, replace=TRUE)
sample_of_numbers
## [1] 3 2 5 1 5 1 2 5 5 3 4 2 5 3 5 5 3 1 5 5
sample. esta vea se utilizara “sample” 1000 veces con la variable de son algunos numeros y se mirara en un histograma
library(ggplot2)
some_numbers <- c(1,2,3,4,5,5,5,5)
sample_of_numbers <-sample(some_numbers, 1000, replace=TRUE)
hist(sample_of_numbers)
Estamos mirando una cantidad sorprendente de numeros y entre mas numeros 5 coloquemos en la variable, mayor porcentaje de estos tendremos.
4.2.1.2 runif uniform distribution puedes muestrear números aleatorios en cualquier rango usando la runif(n, min=0, max = 1)función para la distribución uniforme. (n, min=0, max = 1) Es la funcion para la distribucion uniforme.
Una distribución uniforme es plana, y todos los números entre el mínimo y el máximo deberían aparecer con una frecuencia aproximadamente igual. Tomemos 1000 números aleatorios entre 0. Es posible vizualizarlo en un histograma
hist(runif(1000,0,1))
Un histograma es plano. no perfectamente plano, debido a la cantidad de muestras que se tomaron, en caso de tener mas muestras, es posible que luzca mas plano, esto se ve en la diferencia entre 1000 y 10000 muestras.
hist(runif(10000,0,1))
4.2.1.3 distribucion de r binomial
La distribucion binomual puede ser la distribucion del lanzamiento de una moneda. (ejemplos de la clase lo explican de mejor manera). Usas rbinom(n, tamaño, probabilidad). n te da el numero de muestras que quieras. el tamaño es de 1 en este caso size = 1 . prob es una pequeña lista que haces, para conocer las probabilidades de que ciertas cosas sucedan y la frecuencia de esto
Un ejemplo de esto es considerar lanzar una moneda. Saldrá cara o cruz, y si la moneda es justa, debería tener un 50 % de probabilidad de ser cara o cruz. Así es como lanzamos una moneda 10 veces usando rbinom
coin_flips <- rbinom(10,1,.5)
coin_flips
## [1] 0 0 0 1 1 1 1 1 1 1
Obtenemos una cantidad considerable de 0 y 1. Podemos pretender que 0 = cruz, y 1 = cara. Podemos hacer esto una y otra vez con cara, y luego sumarlo con sum(coin_flips).
coin_flips <- rbinom(10,1,.5)
sum(coin_flips)
## [1] 9
Entre mas realices el ejercicio mas numeros te saldran, 5 es el mas frecuente
Podemos hacerlo 100 veces y guardar el numero de caras que salgan por cada pieza de datos y lanzadas, luego podemos ver la distribucion con una suma, eso nos dira acerca del rango de cosas que pueden suceder con lanzamos la moneda 10 veces.
save_number_of_heads<-length(1000) # make an empty variable to save things in
for(i in 1:1000){
save_number_of_heads[i] <- sum(rbinom(10,1,.5))
}
hist(save_number_of_heads)
that wasn’t too painful. Now we see another histogram. Este histograma muestra la frecuencia en la observamos cara en cada una de las piezas (por 10 tiradas) alrededor de 1000 simulaciones. 5 es el que mas ocurre, pero 2 ocurre algunas veces , asi como lo hace 8. Todas estas probabilidades suceden algunas veces, unas mas que otras
4.2.1.4 rnorm la distribucion normal
Con esto podemos rastrear numeros de distribucion normal “(n, mean=0, sd=1)” desde muestreo hasta distribucion normal especificamente.
hist(rnorm(10000,0,1))
Una distribucion normal en forma de campana y con media de 0, y desviacion estandar de 1. Con esto, puedes pasar de una muestra de numeros a una distribucion normal con cualquier media o desviacion estandar, solo cambiando partes especificas de la funcion r norm.
4.2.1.5 mezclarlo
Si lo pones juntos, puedes obtener diferentes cosas como resultados. Esto se demuestra si quisieras muestrear una distribución que pareciera el lomo de un camello con dos jorobas? Simplemente muestrea rnormdos veces así y mezcla.
hist( c( rnorm(100,25,5), rnorm(100,50,5)) )
4.2.1.6 summary Puedes generar cuantos numeros como tu computador puede soportar con R
4.2.2 Muestrear distribucion de la media . Podemos tomar muestras de distribuciones en R, tantas como se necesiten. Podemos crear una serie de nuestro tamaño de muestra para ser cualquier cosa que queramos y podemos tomar multiples muestras del mismo tamaño.
4.2.2.1 Tomando multiples muestras del mismo tamaño
Se tomaran 10 muestras de dsitribucion normal (mean = 0, and SD = 1). Con un tamaño de la muestra de cada serie de 20. Luego, los ponemos todos juntos en un dataframe para observar que sucede en 10 diferentes histogramas.
scores <- rnorm(10*20,0,1)
samples <- rep(1:10,each=20)
my_df <- data.frame(samples,scores)
ggplot(my_df, aes(x=scores))+
geom_histogram(color="white")+
facet_wrap(~samples)+
theme_classic()
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
Todas las muestras no tienen el mismo histograma debido a un error, todas las muestras vienen de la misma distribucion normal pero el azar hace que cada muestra sea algo diferente
4.2.2.2 Obtener media de muestras
Se puede utilizar dplyr para obtener medias de cada muestra y ponerlas en una tabla
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
sample_means <- my_df %>%
group_by(samples) %>%
summarise(means=mean(scores))
knitr::kable(sample_means)
| samples | means |
|---|---|
| 1 | 0.3320491 |
| 2 | -0.1964435 |
| 3 | -0.1709623 |
| 4 | 0.0980135 |
| 5 | -0.1520524 |
| 6 | -0.3308607 |
| 7 | -0.0623033 |
| 8 | 0.0397040 |
| 9 | 0.6063633 |
| 10 | -0.1049877 |
Estos resultados deberian de ser la estimacion de la medio de la distribucion de donde vinieron, que era 0, lo que se pueda observar en que aunque todos los numeros no son 0, son cercanos a este.
4.2.2.3 histograma para la media de las muestras
Podemos pasar 10 medias de cada muestreo en sus propio histograma
ggplot(sample_means, aes(x=means))+
geom_histogram(color="white")+
theme_classic()
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
Da como resultado una distribucion T, esta luce asi asi debido a que son solamente 10 los datos utilizados.
la media de la tabla significa la media de las medias
mean(sample_means$means)
## [1] 0.005851993
Eso es cercano a 0. Lo que es bueno. Cuando promediamos nuestras muestras,ellas mejor se deberian estimar de la distribucion de las que vinieron.
4.2.2.4 simulando la distribucion de la media
Para hacerlo de maner mas confiable, se repite este ejemplo pero con 1000 muestras
Se toman 1000 muestras. Cada muestra toma 20 puntajes de una distribucion normal (mean=0, SD=1). Luego se calcula la muestra de cada muestra (se obtienen 1000 medias de ejemplo).
# get 1000 samples with 20 scores each
scores <- rnorm(1000*20,0,1)
samples <- rep(1:1000,each=20)
my_df <- data.frame(samples,scores)
# get the means of the samples
sample_means <- my_df %>%
group_by(samples) %>%
summarise(means=mean(scores))
# make a histogram
ggplot(sample_means, aes(x=means))+
geom_histogram(color="white")+
theme_classic()
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
Las propiedades del grafico nos dicen que esta centrado en 0, lo que es coherente con que la mayorio de las medias que se sacaron estan alrededor de 0. Tiene forma de campana como la distribucion normal de donde vino. Los numeros del eje x no pasan de -.5 to +.5. Lo que le da un aspecto estrecho
4.2.3 Muestrear numeros de cualquier estadistica
Se tomara cualquier distribucion con una media de = 100, y desviacion estandar de =20. Con muestras que tengan n = 50 (50 observaciones por muestra).
all_df<-data.frame()
for(i in 1:1000){
sample<-rnorm(50,100,20)
sample_mean<-mean(sample)
sample_sd<-sd(sample)
sample_max<-max(sample)
sample_median<-median(sample)
t_df<-data.frame(i,sample_mean,sample_sd,sample_max,sample_median)
all_df<-rbind(all_df,t_df)
}
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.4.3
a<-ggplot(all_df,aes(x=sample_mean))+
geom_histogram(color="white")+
theme_classic()
b<-ggplot(all_df,aes(x=sample_sd))+
geom_histogram(color="white")+
theme_classic()
c<-ggplot(all_df,aes(x=sample_max))+
geom_histogram(color="white")+
theme_classic()
d<-ggplot(all_df,aes(x=sample_median))+
geom_histogram(color="white")+
theme_classic()
ggarrange(a,b,c,d,
ncol = 2, nrow = 2)
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
from reading the textbook and attending lecture, you should be able to start thinking about why these sampling statistic distributions might be useful…For now, just know that you can make a sampling statistic for pretty much anything in R, Es posible hacer un muestreo estadistico simplemente al simular el proceso de muestrear, , midiendo el estadístico, haciéndolo sobre un grupo y luego dibujando el histograma.
4.2.4 Teorema de limite central
El teorema de limite central es basicamente que la distrubucion de las medias de la muestra va a ser una curva normal. Esto ya se pudo ver antes. La distribucion de la media de tu muestras va a ser normal incluso si la distribucion de donde viene no lo es.
Para demostralo, se utiliza un ejemplo anteriormente presentado. Se crea 100 muestras. Cada muestra tiene 1000 observaciones. Todas vinieron de una distribucion uniforme de 0 a 1. Esto significa que todos los números entre 0 y 1 deben aparecer con la misma frecuencia. Los histogramas que salen como resultado de esto no son normales, sino practicamente planos
scores <- runif(100*1000,0,1)
samples <- rep(1:100,each=1000)
my_df <- data.frame(samples,scores)
ggplot(my_df[1:(10*1000),], aes(x=scores))+
geom_histogram(color="white", bins=10)+
facet_wrap(~samples)+
theme_classic()+
ylim(0,200)
El resultado obtenido parece con un aspecto plano, sin embargo. Podemos mirar en los muestreos de la distribucion de la media muestral.
sample_means <- my_df %>%
group_by(samples) %>%
summarise(means=mean(scores))
# make a histogram
ggplot(sample_means, aes(x=means))+
geom_histogram(color="white", bins=15)+
theme_classic()
En este caso, la distribucion muestral de la media no esta plana. sino que tiene una forma similar a la normal. Si hubiéramos tomado muchas más muestras, calculado sus medias y luego analizado un histograma, su aspecto habría sido aún más normal. Esto es el teorema de limite central
4.2.5 La distribucion normal
La razon por la que el teorema de limite central es importante, es debido a que en las investigaiones, habitualmente tomamos muchas muestras, luego analizamos la media de los muestreos
Asi que aquello que usualmente buscan las investigaciones, es por la media de las muestras. No solo por las muestras. Y considerando qeu conocemos que la media de las muestras luce como una distribucion normal podemos usar ese conocimiento. Para entender de mejor manera la distribucion normal y conocer las muestras detras.
4.2.5.1 Graficando la distribucion normal.
Esta es la manera en la que luce una distribucion normal en un sentido abstracto, de cierto modo es una guia para saber el estandar que se busca con esta.
normal_dist <- dnorm(seq(-4,4,.1), 0, 1)
values <-seq(-4,4,.1)
normal_df <-data.frame(values,normal_dist)
ggplot(normal_df, aes(x=values,y=normal_dist))+
geom_line()+
theme_classic()
. Esta distribucion normal tiene una media de 0, y desviacion estandar de 1. La altura de las lineas dice cual es cada valor. Y esta centrada en 0, sus numero van abajo a medida que estos se hacen mas pequeños o mayor. Tiene un rango. los valores no van mucho más allá de -4 y +4. Esto se debe a que estos valores no ocurren muy a menudo
4.2.5.2 calcular probabilidades de rangos especificos
Podemos usar R para calcular la probabilidad de obtener números en un rango determinado. Debería ser obvio que tienes un 50 % de probabilidad de obtener el número 0 o mayor. La mitad de la distribución es 0 o mayor, por lo que tienes un 50 % de probabilidad.
Se puede confirmar esto con p norm
pnorm(0, mean = 0, sd= 1, lower.tail=FALSE)
## [1] 0.5
p norm dice si la probabilidad esta entre 0 o 0.5
pnorm(2, mean = 0, sd= 1, lower.tail=FALSE)
## [1] 0.02275013
La probabilidad de obtener 2 o mas es de .0227 (no muy probable)
La probabilidad de obtener un puntaje entre 1 y -1
ps<-pnorm(c(-1,1), mean = 0, sd= 1, lower.tail=FALSE)
ps[1]-ps[2]
## [1] 0.6826895
Aproximadamente el 68 % de todos los números estarían entre -1 y 1. Por lo tanto, naturalmente, aproximadamente el 34 % de los números estarían entre 0 y 1.
¿Qué pasa con los números entre 1 y 2?
ps<-pnorm(c(1,2), mean = 0, sd= 1, lower.tail=FALSE)
ps[1]-ps[2]
## [1] 0.1359051
Alrededor del 13,5% de los números caen en ese rango, no mucho.
¿Qué tal entre 2 y 3?
ps<-pnorm(c(2,3), mean = 0, sd= 1, lower.tail=FALSE)
ps[1]-ps[2]
## [1] 0.02140023
Solo el 2,1 % de los números, no mucho.
4.2.5.3 summary pnorm
You can always use pnorm to figure how the probabilities of getting certain values from any normal distribution. That’s great.
Es posible usar [texto incoherente] pnormpara calcular las probabilidades de obtener ciertos valores de cualquier distribución normal. ¡Genial!
4.2.6 z-scores En caso de tener una distribución con media = 0 y desviación típica = 1, y dijera que se obtuvo un número 4.5 de esa distribución, sabrías automáticamente que 4.5 no ocurre con frecuencia. ¿Verdad? ¡Verdad!
Los puntajes z son una forma de transformar un conjunto de números en nuestra distribución normal, con media = 0 y desviación estándar = 1.
Si tienes una distribución normal con media = 550 y desviación típica = 25, ¿a qué distancia de la media está el número 575? Está a 25 (550 + 25 = 575). ¿Cuántas desviaciones típicas son? Es una desviación típica. Entonces, ¿es frecuente encontrar un número como 575? Bueno, según lo que sabes sobre distribuciones normales, una desviación típica de la media no está tan lejos, y sí ocurre con bastante frecuencia.
4.2.6.1 calculando z-scores Obten algunos numeros
some_numbers <- rnorm(20,50,25)
Calcular media y desviacion estandar
my_mean <- mean(some_numbers)
my_sd <-sd(some_numbers)
print(my_mean)
## [1] 50.97313
print(my_sd)
## [1] 24.58052
Extraer media de tus numeros
differences<-some_numbers-my_mean
print(differences)
## [1] -7.892329 -24.477757 -14.877559 40.933585 -14.795896 -23.749395
## [7] -20.601633 4.155667 8.856198 -11.142308 3.115217 23.015588
## [13] -7.058056 35.015589 23.221062 -57.506968 6.539962 32.414204
## [19] 21.489863 -16.655034
Dividir por desviacion estandar
z_scores<-differences/my_sd
print(z_scores)
## [1] -0.3210806 -0.9958193 -0.6052581 1.6652856 -0.6019358 -0.9661877
## [7] -0.8381285 0.1690634 0.3602934 -0.4532983 0.1267352 0.9363345
## [13] -0.2871402 1.4245260 0.9446937 -2.3395343 0.2660628 1.3186949
## [19] 0.8742640 -0.6775705
Asi se convierten los numeros originales en una puntuacion estandarizada. Están estandarizadas para tener las mismas propiedades (propiedades asumidas) que una distribución normal con media = 0 y DE = 1.
.
4.2.7 Ejercicio de generalización
Complete el ejercicio de generalización descrito en su documento R Markdown para este laboratorio.
Simule la distribución de muestreo de la media para un tamaño de muestra = 10, a partir de una distribución normal con media = 100 y desviación estándar = 25. Ejecute la simulación 1000 veces, tomando 1000 muestras y calculando la media de la muestra cada vez. Grafique la distribución muestral de la media en un histograma Informar la media de la distribución muestral de la media. Informar la desviación estándar de la distribución muestral de la media.
# Parámetros poblacionales
media_poblacional <- 100
desviacion_poblacional <- 25
set.seed(123)
# Simulación para n = 10
n1 <- 10
muestras_10 <- replicate(1000, mean(rnorm(n1, mean = media_poblacional, sd = desviacion_poblacional)))
# Histograma
hist(muestras_10,
main = "Distribución muestral de la media (n = 10)",
xlab = "Media muestral",
col = "skyblue",
border = "white")
# Cálculo de estadísticas
media_muestral_10 <- mean(muestras_10)
desv_muestral_10 <- sd(muestras_10)
cat("Media de la distribución muestral (n = 10):", media_muestral_10, "\n")
## Media de la distribución muestral (n = 10): 99.94071
cat("Desviación estándar de la distribución muestral (n = 10):", desv_muestral_10, "\n")
## Desviación estándar de la distribución muestral (n = 10): 7.855358
La media de la muestra en este caso (n = 10) es de 99.94, con una desviacion estandar de 7.85.
Repita todo lo anterior, excepto cambiar el tamaño de la muestra a 100 para todas las simulaciones. Grafique la distribución muestral de la media en un histograma Informar la media de la distribución muestral de la media. Informar la desviación estándar de la distribución muestral de la media.
# Simulación para n = 100
n2 <- 100
muestras_100 <- replicate(1000, mean(rnorm(n2, mean = media_poblacional, sd = desviacion_poblacional)))
# Histograma
hist(muestras_100,
main = "Distribución muestral de la media (n = 100)",
xlab = "Media muestral",
col = "lightgreen",
border = "white")
# Cálculo de estadísticas
media_muestral_100 <- mean(muestras_100)
desv_muestral_100 <- sd(muestras_100)
cat("Media de la distribución muestral (n = 100):", media_muestral_100, "\n")
## Media de la distribución muestral (n = 100): 100.0726
cat("Desviación estándar de la distribución muestral (n = 100):", desv_muestral_100, "\n")
## Desviación estándar de la distribución muestral (n = 100): 2.386263
Este ejemplo permite ver de primera mano lo establecido en el teorema de limite central, en donde una mayor numero de datos, pasar de una n = 10 a una n = 100 afecta considerablemente la manera en la que el grafico luce, de manera que entre mayor sea el n, es mas propenso a que el grafico se parezca mas a uno de distribucion normal.
La media en este caso (n=100) es de 100.07, mientras que la desviacion estandar de los datos es de 2.38. A la vez, la disminucion de la desviacion estandar respecto a la pasado, nos habla de como el error disminuye al aumentar el numero de datos.
. 4.2.8 Tarea de escritura
Explicar el concepto de error de muestreo (1 punto):
El error de muestreo a la variabilidad inherente que surge a al estimar parametros poblacional a partie de muestras finitas. Representa la diferencia entre los valores estadisticos conseguidos mediante el muestreo y los verdaderos parametros de la poblacion. Este error es una consecuencia inevitable del proceso de seleccion muestral.
Explique por qué la desviación estándar de la distribución muestral de la media se hace más pequeña a medida que aumenta el tamaño de la muestra (1 punto):
La desviacion estandar de la distribucion muestral de la media se reduce a medida que aumenta el tamaño de la muestra debido a la relacion inversa entre el error estandar y la raiz cuadrada del tamaño muestral. De modo que al incrementarse el numero de observaciones, la estimacion de la media se vuelve mas estable y menos fragil a la variabilidad individual de los datos, lo que se traduce en una menor dispersion de las medias muestrales alrededor de la de la media poblacional.