You are on page 1of 10

Taller/gua de evaluacin de examen

Simulacin y muestreo en R

Modelacin y simulacin de redes de comunicaciones, MIRC

Alberto Castro R.
4 de diciembre de 2015

La gua tiene 3 partes:


1. Uso de funcin sample
2. Muestreo de modelos de datos simulados
3. Visualizacin de muestreo de una distribucin
Reporte de evaluacin:
Los estudiantes deben responder las 6 preguntas de desarrollo, a detalle, y entregar reporte
del desarrollo de sus repuestas.

1. Funcin sample
Script simple de inicio
rm(list=ls())
sample(1:10,3)
## [Repetir comando unas 5 veces]
sample(1:10,3)
## Ejemplo de salida: [1] 7 10 1
sample(1:10,3)
## Ejemplo de salida: [1] 9 4 8
sample(1:10,3)
## Ejemplo de salida: [1] 7 9 6
sample(1:10,3)
## Ejemplo de salida: [1] 9 3 5
sample(1:10,3)
## Ejemplo de salida: [1] 9 2 1
1. [Pregunta de desarrollo] Funcin sample
Explique cmo opera la funcin sample, ms referencias con: ?sample (ejecutar en consola de
R)
sample(x, size, replace = FALSE, prob = NULL)

1
Muestreo de una serie de tiempo
rm(list=ls())
str(lynx)
## Ejemplo de salida
## Time-Series [1:114] from 1821 to 1934: 269 321 585 871 1475
## Nota: serie de ejemplo, lynx de R, serie no lineal, que corresponde a la cantidad anual de los
## lince atrapados en el distrito del ro Mackenzie, noroeste de Canad para el perodo
## 1821-1934.
summary(lynx)
## Ejemplo de salida
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 39.0 348.2 771.0 1538.0 2567.0 6991.0
plot(lynx)

## Muestreo de la serie
sample_size <-30
n_rep <- 20
s_means <- rep(NA, n_rep)
for (i in 1:n_rep){
my_samp <- sample(lynx, sample_size)
s_means[i] <- mean(my_samp)
}
## Revisin de histograma
hist(s_means, breaks=30)
abline(v=mean(lynx), lty=3, col="blue")

2
2. Efecto de aumento de nmero de repeticiones, de muestreo de serie; pregunta de desarrollo
Aumentar el nmero de repeticiones 1000 y 10000 (variable n_rep, de script previo)
rm(list=ls())
sample_size <-30
n_rep <- 1000 ## Aumentar a 1000 y 10000
s_means <- rep(NA, n_rep)
for (i in 1:n_rep){
my_samp <- sample(lynx, sample_size)
s_means[i] <- mean(my_samp)
}
hist(s_means, breaks=30)
abline(v=mean(lynx), lty=3, col="blue")

2. Pregunta de desarrollo
Explicar que significa aumentar el nmero de repeticiones del muestreo, y que efecto tiene
sobre la estimacin de las medias.

3
Distribuciones estadsticas en R
Se proporcionan funciones para evaluar la funcin de distribucin acumulada P (X <= x), la
funcin de densidad de probabilidad, la funcin cuantil (dado q, el ms pequeo x tal que P (X
<= x)> q), y la funcin para simular de la distribucin, con el prefijo r antes del nombre de la
distribucin. Usaremos las funciones para simular, con muestras pseudo-aleatorias de las
distintas distribuciones.

Distribucin Nombre Algunos argumentos


beta beta shape1, shape2, ncp

binomial binom size, prob

Cauchy cauchy location, scale

chi-squared chisq df, ncp

exponential exp rate

F f df1, df1, ncp

gamma gamma shape, scale

geometric geom prob

hypergeometric hyper m, n, k

log-normal lnorm meanlog, sdlog

logistic logis location, scale

negative binomial nbinom size, prob

normal norm mean, sd

Poisson pois lambda

Student's t t df, ncp

uniform unif min, max

Weibull weibull shape, scale

Wilcoxon wilcox m, n

Simulacin de una correlacin simple entre dos variables en base a su correlacin con una
variable latente:

rm(list=ls())
samplesize<-1000
size.r<-.6
theta<-rnorm(samplesize,0,1) ## Generar algunas desviaciones normales al azar
e1<-rnorm(samplesize,0,1) ## Generar errores para x

4
e2<-rnorm(samplesize,0,1) # Generar errores para y
weight<-sqrt(size.r) # Pesos para la funcin de correlacin
x<-weight*theta+e1*sqrt(1-size.r) ## Combinar la puntuacin verdadera (theta) con el error
y<-weight*theta+e2*sqrt(1-size.r)
cor(x,y) ## Correlacionar el par resultante
df<-data.frame(cbind(theta,e1,e2,x,y)) ## Generacin de un data-frame para contener todos
los elementos
round(cor(df),2) ## Mostrar la estructura de correlacin
pairs(df) ## plot de la estructura de correlacin

3. [Pregunta de desarrollo] Explicar la estructura de correlacin entre x e y, del script


previo.

5
2. Muestreo de modelos de datos simulados
Modelo lineal
y = B1 + B2*x + e
si
x ~ N(0,1)
e ~ N(0,4)
B1 = 0.5
B2 = 2

Script en R:
set.seed(1)
x <- rnorm(100)
e <- rnorm(100, 0, 2)
B1 <- 0.5
B2 <- 2
y <- B1 + B2*x + e
summary(y)
## Ejemplo de salida
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -5.4820 -1.1490 0.7582 0.6422 2.3400 6.1530
plot(x,y)

4. [Pregunta de desarrollo] Aproximar modelo lineal previo, por regresin lineal, comparar al
menos unos 3 modelos por AIC, y elegir modelo, para finalmente graficar lnea de la regresin
lineal, con un intervalo de confianza al 95%

6
Modelo lineal, x variable binaria
rm(list=ls())
set.seed(1)
x <- rbinom(100,1,0.5)
e <- rnorm(100, 0, 2)
B1 <- 0.5
B2 <- 2
y <- B1 + B2*x + e
summary(y)
## Ejemplo de salida
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -3.3290 -0.1764 1.1100 1.4250 3.1970 6.8450
plot(x,y)

Muestreo de media desde una simulacin de modelo lineal


Script en R
rm(list=ls())
set.seed(1)
x <- rnorm(100)
e <- rnorm(100, 0, 2)
B1 <- 0.5
B2 <- 2
y <- B1 + B2*x + e
lm_model <- lm(y~x)
lm_model$coefficients
AIC(lm_model)
x_mod <- lm_model$model$x
y_mod <- lm_model$model$y

7
# Comparar grficos de datos simulados y de modelo de los datos simulados
plot(x_mod ~ y_mod)
plot(x ~ y)
# Muestreo de modelo
sample_size <-30
n_rep <- 20 # repetir para 100, 1000 y 10000
s_means <- rep(NA, n_rep)
for (i in 1:n_rep){
my_samp <- sample(y_mod, sample_size)
s_means[i] <- mean(my_samp)
}
hist(s_means, breaks=30)
abline(v=mean(y), lty=3, col="blue")
mean(y)

Ejemplo de histograma

5. [Pregunta de desarrollo] Aproximar media del modelo lineal (variable lm_model, de script
previo), por muestreo, comparar al menos para un nmero de repeticiones de 20, 100, 1000 y
10000 (variable n_rep, de script previo), y explicar diferencias con media del modelo simulado
(mean(y)). Realizar grficos de x_mod ~ y_mod, x ~ y, e histogramas de aproximacin de la
media.

8
3. Visualizacin de muestreo de una distribucin
Ejecutar el siguiente script en R, para visualizacin grfica del muestreo de una distribucin. El
script genera un archivo en formato pdf, para visualizar por cada iteracin, la aproximacin del
muestreo de la distribucin, y el error estndar (SE).
6. [Pregunta de desarrollo] Explicar script en R, que se lista a continuacin. Y cambiar tamao
de la muestra de 20 a 100, para explicar el efecto en la distribucin del error estndar.

Script en R
## Autor: Corey Chivers [http://bayesianbiologist.com/]
## El script realiza los grficos sucesivos desde una poblacin simulada y compara su
## distribucin con el error estndar de la media de la distribucin, que se est muestreando.
## Revisar el efecto del cambio del tamao (n) de la muestra en la distribucin
## del error estndar (SE).
rm(list=ls())
set.seed(1)
var_ <- new.env()
n<-20 ## Muestra de tamao n cada vez
p_mean<-0 ## Media de la poblacin
p_sd<-1 ## Error estndar (standard deviation) de la poblacin
N<-500 ## Nmero de veces que el muestreo se repite
## Generacin de archivo pdf, queda en directorio de trabajo actual de R
pdf('SE-MIRC.pdf')
for(i in 1:N) ## Repetir experimento N veces
{
smp<-rnorm(n,p_mean,p_sd) ## Muestra de tamao n de la poblacin
var_$x_bar<-c(var_$x_bar,mean(smp))
hist(var_$x_bar,probability=TRUE,col="red",xlim=c(-4,4),xlab="x / x_bar",main="",ylim=c(0,2.2))
##
points(mean(smp),0,pch=19,cex=1.5,col='black')
curve(dnorm(x,p_mean,p_sd/sqrt(n)),lwd=3,add=TRUE)
text(2.5,1.75,labels=paste('sd/sqrt(n) = ',round(p_sd/sqrt(n),2),sep=''))
text(2.5,1.5,labels=paste('standard deviation of\nsample means = ',round(sd(var_$x_bar),2),sep='') )
## Grfico de la muestra
curve(dnorm(x,p_mean,p_sd),main="",ylab="",xlim=c(-4,4),xlab="X",col="blue",lwd=3,add=TRUE)
text(2.5,0.5,labels=paste('# of means drawn = ',i,sep=''))
text(2.5,0.35,labels=paste('Sample size (n) = ',n,sep=''))
points(smp,rep(0,n),pch=19,cex=1.5,col='purple')
abline(v= mean(smp),col='purple',lwd=4)
legend("topleft",legend=c('Sample points','Population Distribution','Sample mean','Theoretical
SE','Empirical SE'),

9
lty=c(0,1,1,1,1,1,1),lwd=c(0,3,3,3,3,3,3),pch=c(16,NA,NA,NA,NA,NA,NA),col=c('purple','blue','purple','blac
k','red'))
print(paste(i," of ",N))
}
dev.off()
##

Ejemplo de grfico del archivo pdf generado (ltima pgina, de 500)

10

You might also like