0% found this document useful (0 votes)
26 views

Sampling and Replication

1. The document discusses sampling and replication using R functions like rnorm, rep, and sample. 2. It provides examples of using rnorm to generate random normal values and rep to replicate values. Setting a seed with set.seed() ensures the same random numbers are generated each time. 3. The document simulates data on the number of times students encounter problems in an R course using rnorm. It will discuss applying functions like rep, sample, and bootstrapping to simulated data.

Uploaded by

AyariZuñiga
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views

Sampling and Replication

1. The document discusses sampling and replication using R functions like rnorm, rep, and sample. 2. It provides examples of using rnorm to generate random normal values and rep to replicate values. Setting a seed with set.seed() ensures the same random numbers are generated each time. 3. The document simulates data on the number of times students encounter problems in an R course using rnorm. It will discuss applying functions like rep, sample, and bootstrapping to simulated data.

Uploaded by

AyariZuñiga
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

6/11/2019 Chapter 7: Sampling and Replication

Traducido al: español Mostrar texto original Opciones ▼

1 configuración

2 La función rnorm y la simulación básica

2.1 A. Uso de rnorm (): ejemplos básicos y la función set.seed ().

2.2 B. Uso de rnorm para simulación básica

3 La función rep y sus aplicaciones

3.1 A. Ejemplos de replicación simple de valores individuales y vectores

3.2 B. Uso de la función rep para crear marcos de datos

4 La función de muestra

4.1 A. Ejemplos básicos con la función de muestra

4.2 B. Uso de la función de ejemplo y Bootstrapping en nuestros datos de usuario de PC y Mac simulados

5 Aplicaciones a problemas estadísticos generales

5.1 A. Demostrando la ley de los grandes números

5.2 B. Simulación de una distribución de Poisson

Capítulo 7: Muestreo y Replicación


Código

Felix Pambuccian

1 Setup
NOTE ON PACKAGES: I use the following packages in this chapter. If you do not have these packages installed, you
may use the script below to install them and load their libraries. I use the kable function of the “knitr” package to create a
table in section 5.2 B, and I use the dcast function of the “reshape2” package to restructure that table, also in section 5.2
B.

#install.packages("reshape2")
#install.packages("knitr")

library(reshape2)
library(knitr)

Before beginning, you may set your working directory if you desire:

#setwd("C:/Users/Felix/Desktop/R Working Directory")

2 The rnorm Function and Basic Simulation


In this section, I will introduce the rnorm function and provide basic use cases in the context of simulating observations
drawn from a normally distributed population.

The rnorm function is used to generate a specified number of “samples” from a normally distributed population with a
user-specified mean and standard deviation. As such, the rnorm function is often used to simulate empirical data
ll df l i ihk d d dd i i Th f i
https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors h f ll i d 1/16
6/11/2019 Chapter 7: Sampling and Replication
collected from a population with known mean and standard deviation. The rnorm function uses the following syntax and
arguments:
rnorm(n, mean = 0, sd = 1)

Where n is the number of “observations” to be generated, “mean” is the user-specified population mean, and “sd” is the
user-specified standard deviation of the population. To begin to show the usefulness of this function, I will introduce a
few basic examples.

2.1 A. Using rnorm() : Basic Examples and the


set.seed() Function.
Let’s use the rnorm function to simulate 10 observations from a population with a mean of 15 and a standard deviation of
2. I will store these 10 generated values in an object I call “rnorm.example” in order to be able to find the mean of these
values (and potentially perform other manipulations and calculations on them later on).

rnorm.example<-rnorm(10, mean=15, sd=2)


rnorm.example

## [1] 12.63554 14.68902 17.56492 12.15005 17.01833 15.01955 13.22323


## [8] 15.45385 16.45164 12.63038

mean(rnorm.example)

## [1] 14.68365

It is important to note that while these observations are drawn from a normally distributed population with a mean of 15
and a standard deviation of 2, the mean of this sample is NOT 15, as seen above. The rnorm function does not create a
normally distributed sample with specified mean, sd, and number of observations - it draws observations from a
theoretical population with specified parameters.

Note that performing the same rnorm operation will result in a different set of values being generated each time:

rnorm(10, mean = 15, sd=2)

## [1] 12.89967 18.11219 12.27217 12.36293 14.21295 16.19919 14.48325


## [8] 12.78139 14.30000 14.81097

rnorm(10, mean = 15, sd=2)

## [1] 15.122720 15.346049 13.362262 9.892635 14.313268 17.725910 14.653110


## [8] 17.224562 14.288682 13.297050

By contrast, running the named object “rnorm.example” repeatedly returns the same set of values each time:

rnorm.example

## [1] 12.63554 14.68902 17.56492 12.15005 17.01833 15.01955 13.22323


## [8] 15.45385 16.45164 12.63038

rnorm.example

## [1] 12.63554 14.68902 17.56492 12.15005 17.01833 15.01955 13.22323


## [8] 15.45385 16.45164 12.63038

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 2/16
6/11/2019 Chapter 7: Sampling and Replication

However, re-running the original expression and then calling the object will result in the values of “rnorm.example” being
changed each time the expression is re-run:

rnorm.example<-rnorm(10, mean=15, sd=2)


rnorm.example

## [1] 15.127496 17.443617 16.709997 14.789930 13.768781 9.610574 12.011626


## [8] 15.164009 17.854578 13.936753

rnorm.example<-rnorm(10, mean=15, sd=2)


rnorm.example

## [1] 17.85742 16.76920 11.97688 19.16544 14.06496 16.72299 18.01710


## [8] 13.43506 13.06632 12.10678

As such, if you want to obtain same set of numbers each time you run a chunk of code, you must use the set.seed()
function.

If you want to generate the same numbers each time you run an rnorm expression, you can use the set.seed function,
which uses the following syntax: set.seed(seed)

In which “seed” is an integer that sets the seed, such that specifying that same integer later will recall the particular set
of values associated with that seed integer.

To see how setting a given seed will produce the same values every time that seed is specified, even if the expression is
re-run, let’s reproduce the previous code chunk but specify a seed of “1” for “rnorm.example”:

set.seed(1)
rnorm.example<-rnorm(10, mean=15, sd=2)
rnorm.example

## [1] 13.74709 15.36729 13.32874 18.19056 15.65902 13.35906 15.97486


## [8] 16.47665 16.15156 14.38922

rnorm.example<-rnorm(10, mean=15, sd=2)

set.seed(1)
rnorm.example<-rnorm(10, mean=15, sd=2)
rnorm.example

## [1] 13.74709 15.36729 13.32874 18.19056 15.65902 13.35906 15.97486


## [8] 16.47665 16.15156 14.38922

Unlike in the previous chunk of code, this time re-running the expression does not change the numbers in
“rnorm.example”, since we set a seed. What happens when we specify a seed other than 1?

set.seed(2)
rnorm.example<-rnorm(10, mean=15, sd=2)
rnorm.example

## [1] 13.20617 15.36970 18.17569 12.73925 14.83950 15.26484 16.41591


## [8] 14.52060 18.96895 14.72243

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 3/16
6/11/2019 Chapter 7: Sampling and Replication

set.seed(2)
rnorm.example<-rnorm(10, mean=15, sd=2)
rnorm.example

## [1] 13.20617 15.36970 18.17569 12.73925 14.83950 15.26484 16.41591


## [8] 14.52060 18.96895 14.72243

Setting a seed of 2 will create a different set of 10 generated values, which can be reproduced each time the seed 2 is
specified. Thus, different seed numbers can be used to store different sets of values for the same expression. The seed
numbers I use throughout this chapter were chosen by me at random and hold no symbolic meaning whatsoever. In the
case of this chapter, the set.seed() function is useful as it ensures that that, whenever I specify a seed, the same
numbers will appear each time the full chapter code is run.

2.2 B. Using rnorm for Basic Simulation


Let’s use the rnorm function to simulate some data in a real-world context!

To set the stage for the scenario I want to simulate, I will first need to introduce a new construct:

“[REDACTED], it won’t work!”.

This construct describes the mixture of frustration, despair, and resignation that students in R courses experience when
they encounter a perplexing problem in R, whether it be packages that refuse to install, functions that yield inscrutable
error messages, or code that runs perfectly on a neighboring computer but stubbornly refuses to run on yours. We can
use the rnorm function to simulate the number of instances of this experience over the course of a semester-long R
class.

More specifically, we will use rnorm to simulate the data we might collect in surveying the number of instances of
“[REDACTED], it won’t work!” that Mac and PC users might encounter over the course of the first and second half of a
semester-long R course. Generally, when simulating data, we either [WHAT GOES HERE??? A WORD OR PHRASE IS
MISSING] on known population parameters or on theoretically driven assumptions regarding the population parameters.
The data I will generate are based on the following assumptions (derived from informal observation of my R class)
regarding what observations would look like:

1. Instances of “[REDACTED], it won’t work!” encountered during R use may be caused either by user
error/unfamiliarity with the R program or by R program bugs/compatibility issues.

2. As students become more familiar with the R program, user error decreases, leading to fewer instances of
“[REDACTED], it won’t work!” stemming from user error for both Mac and PC users in 2nd half of semester
compared to 1st half.

3. R studio is better-optimized for PC than for Mac, leading to more instances of “[REDACTED], it won’t work!”
caused by program errors and compatibility issues for Mac users than for PC users.

Based on these assumptions, given instances of “[REDACTED], it won’t work!” as the dependent variable, I would
expect to observe a main effect of Time (more instances in 1st half than 2nd half of semester) and of User Type (more
instances for Mac users than PC users). Let’s use the rnorm function to simulate this pattern of results. Note that other
factors that might influence the dependent variable, such as individual R proficiency and psychological effects of R
course professors frequently disparaging Macs, are not modeled here.

set.seed(103)
MacUsers1stHalf <- rnorm(100, mean = 500, sd = 35)
PCUsers1stHalf <- rnorm(100, mean = 450, sd = 35)
MacUsers2ndHalf <-rnorm(100, mean = 150, sd = 35)
PCUsers2ndHalf <- rnorm (100, mean = 100, sd=35)

As you see in the script above, I set the averages to simulate the hypothesized pattern of results. As I had no predictions
regarding the distribution of data, I have no strong theoretical rationale for setting a standard deviation of 35. However,
keeping the default standard deviation value of 1 would have yielded unnatural-looking simulated data as the
https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 4/16
6/11/2019 Chapter 7: Sampling and Replication
keeping the default standard deviation value of 1 would have yielded unnatural looking simulated data, as the
distribution of data would have been too tightly clustered around the mean. I used the set.seed function to ensure that

the same values will be generated each time this code is run. Again, why not just use the object like you did with
rnorm.example? Why always use set.seed? If you give the explanation before this mention of it, I wouldn’t be
questioning it down here.La siguiente sección discute la función rep. Una vez que hayamos aprendido los conceptos
básicos de la función rep, podremos hacer más con las observaciones que hemos simulado.

3 La función rep y sus aplicaciones


En esta sección, presentaré la función rep y proporcionaré un caso de uso básico en el contexto de la creación de un
marco de datos a partir de los datos simulados que hemos generado. La función rep replica los valores en un objeto
dado (un vector o una función) un número específico de veces. La función rep utiliza la siguiente sintaxis y argumentos:

```rep(x, ...)```

Donde "x" es el valor a replicar o el vector que contiene valores a replicar, y "..." denota argumentos adicionales, como
"times =" (que especifica el número de veces que se replicará "x"), "each = "(Que especifica el número de veces que se
repetirá cada elemento de" x ") y" len = "(que especifica la longitud deseada de un vector de salida). A continuación,
repaso algunos ejemplos muy básicos de cada uno de estos usos de la función rep.

3.1 A. Ejemplos de replicación simple de valores


individuales y vectores
3.1.0.1 El uso más simple de la función replicar es replicar un texto o valor numérico un
número determinado de veces. Para comenzar, repliquemos el número 5 diez veces:

rep(5, 10)

## [1] 5 5 5 5 5 5 5 5 5 5

Como puede ver arriba, al ingresar un valor n tal que la sintaxis lea "rep (x, n)" tiene el mismo significado que la sintaxis
"rep (x, times = n)". Además de los valores individuales, también podemos replicar una etiqueta de texto de la misma
manera:

rep("Kitty Cat", 10)

## [1] "Kitty Cat" "Kitty Cat" "Kitty Cat" "Kitty Cat" "Kitty Cat"
## [6] "Kitty Cat" "Kitty Cat" "Kitty Cat" "Kitty Cat" "Kitty Cat"

Un posible uso para replicar valores individuales o etiquetas de texto es llenar columnas para datos continuos o
categóricos en un marco de datos. Exploro este uso en la sección 5.2 B a continuación.

Además de replicar texto individual o valores numéricos, la función rep se usa comúnmente para replicar (elementos
dentro) de vectores. A continuación, creo un vector simple de siete valores numéricos y luego repito ese vector, como un
todo, 3 veces.

ExampleRepVector<-c(1,2,5,7,7,8,10)
rep(ExampleRepVector, 3)

## [1] 1 2 5 7 7 8 10 1 2 5 7 7 8 10 1 2 5 7 7 8 10

También podemos replicar cada elemento de este vector un número determinado de veces. A continuación, primero
replico cada elemento del vector dos veces. A continuación, reproduzco cada elemento dos veces, al tiempo que replica
el vector como un todo (con cada elemento presente dos veces) tres veces.

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 5/16
6/11/2019 Chapter 7: Sampling and Replication

rep(ExampleRepVector, each=2)

## [1] 1 1 2 2 5 5 7 7 7 7 8 8 10 10

rep(ExampleRepVector, times=3, each=2)

## [1] 1 1 2 2 5 5 7 7 7 7 8 8 10 10 1 1 2 2 5 5 7 7 7
## [24] 7 8 8 10 10 1 1 2 2 5 5 7 7 7 7 8 8 10 10

Finalmente, veamos qué sucede cuando especificamos un vector de salida de una longitud diferente al número de
términos en el vector original (7):

20 términos:

rep(ExampleRepVector, len=20)

## [1] 1 2 5 7 7 8 10 1 2 5 7 7 8 10 1 2 5 7 7 8

5 términos:

rep(ExampleRepVector, len=5)

## [1] 1 2 5 7 7

Cuando sale a un vector más largo que el vector original, el vector original se replica hasta que el vector de salida se
haya llenado. En nuestro caso, llenar el vector de salida de 20 términos requiere que el vector original se repita dos
veces, con una tercera replicación incompleta de solo los primeros seis términos.

Cuando se envía a un vector más corto que el vector original, el vector de salida se llena antes de que todos los valores
del vector original puedan replicarse. En nuestro caso, el vector original tiene 7 valores y el vector de salida solo tiene
espacio para 5, por lo que los últimos 2 valores no se replican.

3.2 B. Uso de la función rep para crear marcos de


datos
3.2.0.1 Ahora que hemos repasado los usos básicos de la función rep, usemos la función
rep para ayudarnos a crear un marco de datos para los datos simulados que creamos en
la sección 5.1. Recuerde que tenemos una variable entre sujetos, UserType (usuario de
Mac o usuario de PC), y una variable dentro de sujetos, Time (primera y segunda mitad del
semestre). Como tenemos 100 usuarios de Mac y 100 usuarios de PC, nuestro número
total de sujetos es de 200.
Al crear el marco de datos, usaré la función rep para replicar las etiquetas de cada nivel de cada IV en el rango relevante
de temas. A continuación, establezco estos argumentos y creo el marco de datos:

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 6/16
6/11/2019 Chapter 7: Sampling and Replication

n.MacUsers=100
n.PCUsers=100
N=n.MacUsers + n.PCUsers

SimulatedData <- data.frame(


Subject = c(seq(1,N),seq(1,N)),
Time = c(rep("1st Half", N), rep("2nd Half", N)),
UserType = c(rep(c(rep("Mac User", n.MacUsers), rep("PC User", n.PCUsers)),2)),
Instances = c(MacUsers1stHalf,PCUsers1stHalf,
MacUsers2ndHalf,PCUsers2ndHalf

)
)

El uso de la función rep para denotar a qué nivel de los sujetos IV dentro y entre sujetos con los que se asocia cada
punto de datos, como en la sintaxis del marco de datos anterior, nos permite ver qué valores corresponden a usuarios
de Mac y usuarios de PC, y al primer La mitad y la segunda mitad del semestre. Hagamos una tabla de estos datos.
Como hay un total de 400 columnas en la tabla completa, usaré la función head () para mostrar solo las primeras
columnas. Usaré la función kable en el paquete knitr para producir esta tabla; Puede encontrar más documentación y
ayuda para este paquete en la siguiente URL: http://yihui.name/knitr/ (http://yihui.name/knitr/)

knitr::kable(head(SimulatedData))

Tema Hora Tipo de usuario Instancias

1 1er tiempo Usuario de Mac 472.4909

2 1er tiempo Usuario de Mac 501.9159

3 1er tiempo Usuario de Mac 458.9604

4 1er tiempo Usuario de Mac 494.1441

5 1er tiempo Usuario de Mac 434.7239

6 1er tiempo Usuario de Mac 495.7846

Esta tabla podría interpretarse más fácilmente si los dos niveles de Tiempo, 1. ° tiempo y 2. ° tiempo, estuvieran
representados en columnas separadas. Podemos usar la función dcast () (parte del paquete "reshape2") para cambiar la
estructura del marco de datos y luego crear una nueva tabla. A continuación, utilizo la función dcast para reestructurar el
marco de datos dividiendo el tiempo variable en dos columnas correspondientes a los 2 niveles de la variable: Primera
mitad y Segunda mitad. Nuevamente, uso la función head () para mostrar solo las primeras columnas de una tabla que
tiene 200 columnas en total. Puede encontrar más documentación y ayuda con el paquete Reshape 2 en la siguiente
URL: http://seananderson.ca/2013/10/19/reshape.html (http://seananderson.ca/2013/10/19/reshape.html)

SimulatedData.Wide<-dcast(SimulatedData, Subject + UserType ~ Time, value.var="Instances")


knitr::kable(head(SimulatedData.Wide))

Tema Tipo de usuario 1er tiempo 2da mitad

1 Usuario de Mac 472.4909 142.7769

2 Usuario de Mac 501.9159 154.4736

3 Usuario de Mac 458.9604 111.5123

4 Usuario de Mac 494.1441 189.0489

5 Usuario de Mac 434.7239 111.8786

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 7/16
6/11/2019 Chapter 7: Sampling and Replication
6 Usuario
Tema Tipo de de Mac
usuario 495.7846
1er tiempo 138.1905
2da mitad

Como puede ver, la variable "Tiempo" ahora se ha dividido en dos columnas, "1er tiempo" y "2do tiempo". Para ver la
tabla completa, con o sin división, vea el objeto en el Entorno global.

4 La función de muestra
En esta sección, presentaré la función de muestra, proporcionaré ejemplos de uso básico y analizaré el muestreo con y
sin reemplazo y bootstrapping. La función de muestra se usa más comúnmente para tomar una muestra de los
elementos de un vector, lo que se puede hacer con o sin reemplazo. La función de muestra utiliza la siguiente sintaxis y
argumentos:

sample(x, size, replace = FALSE)

Donde "x" es un vector de elementos para elegir, "tamaño" es el número de elementos a muestrear y "reemplazar =" se
puede configurar como "VERDADERO" o "FALSO" dependiendo de si desea muestrear con o sin reemplazo Especificar
replace = “TRUE” se muestra con reemplazo, mientras que especificar replace = “FALSE” se muestreará sin reemplazo.
A continuación, repaso los usos básicos de la función "muestra" para muestrear con y sin reemplazo.

4.1 A. Ejemplos básicos con la función de muestra


Primero, creemos un vector de valores que no incluya elementos repetidos. Esto hará que sea más fácil ver la diferencia
entre el muestreo con y sin reemplazo.

ExampleSampleVector<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)

Muestreemos quince valores de este vector SIN reemplazo

sample(ExampleSampleVector,15,replace = FALSE)

## [1] 18 4 6 8 3 13 14 5 10 12 15 16 9 20 7

Como puede ver, así como no apareció ningún valor en el vector original más de una vez, no aparece ningún valor en
nuestra muestra más de una vez. El muestreo sin reemplazo significa que una vez que se ha muestreado un valor, se
"elimina" del vector original y no se puede volver a muestrear al azar.

Ahora, muestreemos quince valores de este vector CON reemplazo


Texto original
sample(ExampleSampleVector,15,replace = TRUE)
1 Setup

Sugiere una traducción mejor


## [1] 11 11 15 6 17 9 1 14 10 16 8 13 15 18 13

Esta vez, es probable que haya al menos un valor duplicado en nuestra muestra. El muestreo con reemplazo significa
que los valores muestreados se “reemplazan” en el vector original y, por lo tanto, se pueden muestrear aleatoriamente
nuevamente.

Al dibujar muestras aleatorias de algunas observaciones, generalmente se muestreará un conjunto diferente de


observaciones cada vez que ejecute la función de muestra. Si desea mantener el mismo conjunto de observaciones
muestreadas para realizar más manipulaciones utilizando ese conjunto en particular, también puede usar la función
set.seed aquí:

set.seed(2); sample(ExampleSampleVector, 15)

## [1] 4 14 11 3 16 15 2 18 6 7 12 17 13 19 9

set.seed(2); sample(ExampleSampleVector, 15)

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 8/16
6/11/2019 Chapter 7: Sampling and Replication

## [1] 4 14 11 3 16 15 2 18 6 7 12 17 13 19 9

Como puede ver, los dos conjuntos muestreados son idénticos, gracias a la función set.seed. Puedo usar esta semilla
para recuperar este conjunto particular de quince valores muestreados si quiero usarlos en el futuro.

4.2 B. Uso de la función de ejemplo y Bootstrapping


en nuestros datos de usuario de PC y Mac simulados
Ahora, discutiremos el muestreo en el contexto de nuestros datos simulados e introduciremos el concepto de
bootstrapping. Bootstrapping implica volver a muestrear de una población o conjunto de valores un número específico
de veces para que la media de sus muestras se aproxime más a la media de la población o conjunto de valores original.
Si bien hay varias formas de realizar un muestreo de arranque en R, la más simple es usar la función de replicación, que
analizaré solo en lo que respecta al arranque. La función de replicación repite una función determinada un número
específico de veces, utilizando la siguiente sintaxis y argumentos:

replicate(n, expr)

Donde n es el número de réplicas deseadas y "expr" es la expresión a replicar, generalmente un objeto ya ingresado en
el entorno global.

El boostrapping se usa a menudo al tomar muestras de una población distribuida normalmente. Aquí, analizo muestras
de muestreo y bootstrapping de un conjunto más amplio de observaciones. En la siguiente sección, 5.4, analizo el
muestreo de una población en el contexto de la demostración de la Ley de los grandes números.

Muestreemos diez valores de nuestros datos correspondientes a los usuarios de Mac en la primera mitad del semestre,
y comparemos la media de esa muestra con la media del conjunto de datos que se está muestreando:

mean(MacUsers1stHalf)

## [1] 500.3287

set.seed(14)
MacUsersSample.1<- sample(MacUsers1stHalf, 10)
MacUsersSample.1

## [1] 525.9583 451.4742 453.5782 509.6634 482.8383 465.0211 451.4292


## [8] 509.0998 507.0654 499.6237

mean(MacUsersSample.1)

## [1] 485.5752

Una muestra aleatoria de diez valores no siempre es representativa del conjunto más grande del que se extrae. En este
caso, hemos muestreado al azar diez valores de los 100 valores que representan el número de instancias de "
[ELIMINADO], ¡no funcionará!" De 100 usuarios de Mac durante la primera mitad del semestre. Sabemos que el número
promedio de instancias para este grupo es 500.33, pero el promedio de nuestros diez valores muestreados es
aproximadamente 486. Podemos mejorar la precisión de la estimación promedio obtenida a través del muestreo
utilizando bootstrapping.

set.seed(993)
TenSampleBootstrapNR<-replicate(10, sample(MacUsers1stHalf, 10, replace = FALSE))
TenSampleBootstrapNR

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 9/16
6/11/2019 Chapter 7: Sampling and Replication

## [,1] [,2] [,3] [,4] [,5] [,6] [,7]


## [1,] 482.8383 474.9895 458.9604 504.5545 553.3036 466.6709 532.2691
## [2,] 501.3101 494.6208 467.3723 446.8776 446.8776 467.3774 553.3036
## [3,] 510.7601 537.5814 482.2247 483.4794 528.7878 511.9421 479.1027
## [4,] 504.0899 527.7317 479.1027 472.4909 501.3101 516.9374 494.1441
## [5,] 494.1441 501.3101 494.1441 464.3050 498.2764 461.7992 484.4387
## [6,] 483.4794 561.6610 516.2847 509.0998 522.1641 527.7317 457.2586
## [7,] 522.1641 505.9178 490.5675 560.1585 486.8711 535.5993 458.9604
## [8,] 434.7239 536.5534 522.9261 504.0382 458.3491 494.1441 494.6208
## [9,] 466.6709 501.1626 458.3491 495.7846 511.9421 536.5534 561.6610
## [10,] 461.7992 491.9022 448.3091 529.8700 497.9852 465.0211 453.4769
## [,8] [,9] [,10]
## [1,] 467.3774 453.4769 464.0428
## [2,] 522.9261 479.1027 541.6556
## [3,] 569.8026 463.1552 482.7156
## [4,] 502.8677 446.8776 510.7601
## [5,] 458.9604 495.0046 509.0998
## [6,] 546.8735 505.9178 569.8026
## [7,] 560.8189 448.3091 515.2273
## [8,] 501.3091 465.0211 516.2847
## [9,] 466.7099 524.3736 465.0211
## [10,] 497.9852 451.4742 424.9227

MeanTenSampleBootstrapNR<-replicate(10, mean(sample(MacUsers1stHalf, 10, replace = FALSE)))


MeanTenSampleBootstrapNR

## [1] 486.6228 507.5105 496.0812 505.0298 491.6476 506.2274 489.8495


## [8] 496.4604 489.9878 491.1184

mean(MeanTenSampleBootstrapNR)

## [1] 496.0535

Si se toman 10 muestras de diez valores, sin reemplazo, cada una arroja un promedio de aproximadamente 496, una
mejora. Probemos lo mismo para el muestreo con reemplazo:

set.seed(82)
TenSampleBoostrapWR<-replicate(10, sample(MacUsers1stHalf,10,replace = TRUE))
TenSampleBoostrapWR

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 10/16
6/11/2019 Chapter 7: Sampling and Replication

## [,1] [,2] [,3] [,4] [,5] [,6] [,7]


## [1,] 501.1626 515.2273 524.3736 504.0899 424.9227 499.6237 560.4686
## [2,] 461.7992 501.9159 525.9583 537.5814 527.7317 516.0727 467.3774
## [3,] 535.5993 465.0211 511.9421 477.8833 453.5782 501.1626 461.7992
## [4,] 507.0654 479.1027 516.9374 479.1027 451.4742 537.5814 458.3491
## [5,] 544.4890 504.0382 465.0211 463.1552 465.0211 509.6634 494.6208
## [6,] 532.2691 490.5675 461.7992 532.2691 491.4081 560.1585 479.1027
## [7,] 461.7992 525.9583 544.4890 505.9178 541.6556 510.7601 504.7141
## [8,] 509.1655 504.7141 516.9374 511.0911 451.4549 482.7156 509.1655
## [9,] 560.8189 472.8796 491.9022 497.9852 467.3774 451.4549 463.1552
## [10,] 491.4081 472.4909 468.9095 482.7156 434.7239 484.1997 522.1641
## [,8] [,9] [,10]
## [1,] 528.7878 511.0911 446.8776
## [2,] 524.3736 486.8711 453.4769
## [3,] 527.7317 446.8776 501.1626
## [4,] 484.4387 477.8833 466.6709
## [5,] 509.1655 525.9583 466.6709
## [6,] 491.4081 528.7878 510.7601
## [7,] 474.9895 467.3723 498.8165
## [8,] 463.1552 453.5452 497.9852
## [9,] 434.7239 536.5534 504.2742
## [10,] 483.4794 453.5782 528.7878

MeanTenSampleBootstrapWR<-replicate(10, mean(sample(MacUsers1stHalf,10,replace = TRUE)))


MeanTenSampleBootstrapWR

## [1] 514.7425 498.8315 491.6189 494.2262 497.2734 497.1704 498.6680


## [8] 502.5443 503.0764 492.2138

mean(MeanTenSampleBootstrapWR)

## [1] 499.0365

Aquí, nuestra media es aproximadamente 499. Nuevamente, esta es una mejora con respecto a tomar solo una muestra.
Sin embargo, podemos garantizar estimaciones cada vez más precisas de la media tomando incluso más muestras de
arranque, como se ve en el siguiente ejemplo.

Ahora, intentemos estimar la media en base a 100 muestras de arranque de diez observaciones cada una, primero sin y
luego con reemplazo:

set.seed(90)
HundredSampleBootstrapNR<-replicate(100, sample(MacUsers1stHalf, 10, replace = FALSE))
MeanHundredSampleBootsrapNR<-replicate(100, mean(sample(MacUsers1stHalf, 10, replace = FALSE))
)
MeanHundredSampleBootsrapNR

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 11/16
6/11/2019 Chapter 7: Sampling and Replication

## [1] 483.9443 482.1300 501.8791 497.3724 521.8733 495.3230 504.2639


## [8] 502.6423 490.4462 499.9054 505.3837 496.8223 498.4532 504.4094
## [15] 493.6311 484.4697 506.3115 507.2337 502.4622 506.0444 493.9876
## [22] 479.9301 505.4607 485.3938 499.5878 498.2262 511.7374 501.2629
## [29] 500.0467 487.8291 504.6782 514.9830 499.7610 485.8169 516.1472
## [36] 491.6890 499.5895 505.9952 484.8721 505.3810 516.2393 501.0103
## [43] 494.4457 503.0997 497.2621 515.9588 508.0401 501.7428 516.8377
## [50] 500.4021 500.2011 500.6698 507.9374 516.0995 511.6492 497.5592
## [57] 512.4951 499.4033 483.3637 496.6662 511.4488 499.6909 503.0627
## [64] 511.9006 485.8086 489.7278 499.6084 493.6650 497.9322 494.2967
## [71] 492.8505 500.1848 501.2082 513.1225 497.2403 484.4841 514.7898
## [78] 495.1924 501.3294 498.0645 490.8601 496.2211 487.8071 497.7390
## [85] 502.5861 498.2383 472.8172 508.5017 498.8662 500.0314 494.8469
## [92] 482.0513 505.2282 500.5006 501.6754 513.7240 513.7879 491.4527
## [99] 496.3572 497.7718

mean(MeanHundredSampleBootsrapNR)

## [1] 499.7513

set.seed(92)
HundredSampleBootstrapWR<-replicate(100, sample(MacUsers1stHalf, 10, replace = TRUE))
MeanHundredSampleBootstrapWR<-replicate(100, mean(sample(MacUsers1stHalf, 10, replace = TRUE))
)
MeanHundredSampleBootstrapWR

## [1] 501.6860 497.1856 499.6808 495.2185 524.2279 494.7761 507.2499


## [8] 490.6339 516.4108 478.7056 501.4649 500.1753 496.9795 498.5235
## [15] 489.4741 506.9105 501.8296 483.6765 500.2106 492.0935 502.8805
## [22] 501.4384 491.0846 487.5533 494.4862 491.7782 495.9216 499.3074
## [29] 493.5227 494.7585 490.3979 502.3776 498.2886 483.9435 502.6134
## [36] 499.6300 507.9872 501.9230 493.7481 500.8062 492.6423 490.5927
## [43] 510.2734 481.4542 498.5302 515.0135 505.5613 493.5074 515.0532
## [50] 500.5499 503.1455 498.9470 492.1895 499.8119 482.2462 514.1567
## [57] 498.2753 508.2647 488.7334 508.0879 490.0728 493.2714 490.4271
## [64] 498.7075 496.0585 507.2410 502.0665 497.6320 503.8993 509.9675
## [71] 479.2922 512.2531 504.1145 494.1574 506.8482 507.0131 489.9587
## [78] 503.6567 478.6168 504.7695 482.8386 500.7073 498.8247 512.1134
## [85] 499.9993 483.4650 510.6256 489.4198 508.0756 508.6300 504.6548
## [92] 513.8521 497.0976 497.8362 501.1025 504.4786 504.7135 520.8636
## [99] 513.7015 492.8148

mean(MeanHundredSampleBootstrapWR)

## [1] 499.2443

Tomar 100 muestras bootstrapped mejora aún más nuestra estimación de la media del grupo del que estamos tomando
muestras. Ahora, nuestra media está muy cerca de 500, el verdadero valor. Cuanto mayor sea el tamaño de la población
de la muestra, menor será la diferencia entre el muestreo con y sin reemplazo. En nuestro caso, dado que había 100
valores en el grupo de los que se tomaban muestras y tomamos muestras de diez valores a la vez, no hizo una gran
diferencia si tomamos muestras con o sin reemplazo.

Dado que la función rnorm genera una muestra de un número específico de valores a partir de una distribución
hipotética normal con una desviación estándar y media especificada por el usuario, las simulaciones de arranque a
menudo también se realizan utilizando la función rnorm.
https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 12/16
6/11/2019 Chapter 7: Sampling and Replication

5 Aplicaciones a problemas estadísticos


generales
5.1 A. Demostrando la ley de los grandes números
Reconocimiento: Esta sección se inspiró en una demostración de la Ley de grandes números creada por Pedro F.
Quintana-Ascencio y James Angelo en UCF, que se puede encontrar en la siguiente URL: http://pascencio.cos.ucf.edu/
clases / Métodos / R% 20demos / R% 20 Demostración% 20Law% 20Large% 20numbers% 202012.pdf
(http://pascencio.cos.ucf.edu/classes/Methods/R%20demos/R%20Demonstration%20Law%20Large%20numbers%202012.pdf)

La Ley de Grandes Números establece que a medida que aumenta el número de observaciones en una muestra
aleatoria dada de la población, la media de esa muestra se aproxima al verdadero valor medio de la población.

Se puede hacer un simple corolario al acto de lanzar una moneda. Sabemos que la tasa real de cada resultado, cara o
cruz, es 0.5. Sin embargo, si lanzamos una moneda cinco veces, podríamos obtener fácilmente un resultado de cuatro
caras y 1 cruz, produciendo una tasa de 0.8 para caras y 0.2 para colas. En este caso, la media estimada a partir de una
muestra de cinco sería muy inexacta. Sin embargo, si lanzamos una moneda mil veces, es prácticamente imposible
obtener una estimación tan inexacta de la tasa real de cada resultado. Lanzar una moneda mil veces produciría una tasa
muy cercana a 0.5 tanto para cara como para cruz.

Demostremos la Ley de Números Grandes en R. Para comenzar, necesitamos establecer una población de la cual tomar
muestras. Elegí usar la distribución de las alturas de los hombres japoneses como mi población, ya que Japón era el
país más destacado para el que podía encontrar una desviación estándar y media para la altura (ver
http://www.mext.go.jp/ b_menu / toukei / 001/022/2004 / 002.pdf
(http://www.mext.go.jp/b_menu/toukei/001/022/2004/002.pdf) ). A continuación, introduzco la media de la población,
172 centímetros, como un objeto "mu", y la desviación estándar, 5,42 centímetros, como un objeto "sigma". Mu es la
letra griega utilizada para denotar la media de la población y sigma es la letra griega utilizada para denotar la desviación
estándar de la población

mu = 172
sigma = 5.42

Para demostrar la Ley de los grandes números, tomaré muestras de esta población 50 veces, y el número de
observaciones por muestra aumentará de 1 a 50 en incrementos de uno. Una vez que se hayan recolectado todas las
muestras, trazaré el promedio de cada muestra para observar si la distribución de medias cambia a medida que
aumenta el número de muestras.

Primero, crearé un vector vacío de longitud 50, que eventualmente se completará por medio de mis 50 muestras:

Vector_of_Means <- rep(0,50)

Al verificar el vector, podemos ver que actualmente está poblado por 50 ceros:

Vector_of_Means

## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [36] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

A continuación, necesito comenzar a poblar el vector. Construiré el vector de modo que el primer valor sea la media de
una muestra de 1 observación, el segundo valor será la media de una muestra de 2 observaciones, etc., hasta el valor
50, que es la media de Una muestra de 50 observaciones. Para comenzar, necesito tomar una muestra de uno,
encontrar la media e ingresar la media en el vector de promedios. Combino estos pasos en una de las siguientes
https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 13/16
6/11/2019 Chapter 7: Sampling and Replication

funciones:

Vector_of_Means[1]<-mean(rnorm(1,mean=mu,sd=sigma))

Ahora, tengo que repetir el proceso para muestras de 2 a 50 valores para llenar el segundo a través de la ranura 50 en el
vector. Para hacer esto, podría escribir 49 expresiones más como la anterior, pero una solución más elegante es usar un
bucle "for" para lograr lo mismo. Para obtener ayuda con la comprensión de los diferentes tipos de bucles en R,
consulte el Capítulo 3: Bucles y lógicos . En el siguiente ciclo, estoy especificando que para un valor de i de 2 a 50 (la
longitud del vector), el i-ésimo valor del vector debería ser la media de una muestra de valores de i, con la media y la sd
establecidas previamente :

for (i in 2:length(Vector_of_Means)) {
Vector_of_Means[i] <- mean(rnorm(i, mean=mu, sd=sigma))
}

Al verificar el vector, podemos ver que ahora está poblado por los 50 valores que hemos generado:

Vector_of_Means

## [1] 172.4067 174.4181 166.8237 173.8780 174.8917 169.7871 175.6439


## [8] 171.2992 174.9572 171.1308 172.4583 172.1380 170.9901 174.8588
## [15] 171.2705 173.6047 171.6975 172.3292 171.5491 172.9344 172.4017
## [22] 171.0498 170.7853 172.5667 172.7151 173.8499 171.3387 171.9326
## [29] 172.0962 171.6051 171.9281 172.2289 173.1625 172.1153 172.4185
## [36] 172.1944 173.4946 173.1161 172.6899 171.9070 173.1682 170.0475
## [43] 172.6212 173.1910 171.4739 172.0959 172.3849 172.6251 172.7516
## [50] 171.6788

Finalmente, creo un diagrama de dispersión de las medias, con Tamaño de muestra en el eje xy Centímetros en el eje Y.
La línea azul indica la media real de la población, 172 centímetros. Para obtener ayuda con gráficos y diagramas de
dispersión, consulte el Capítulo 10: GGplot 1 (Diagramas de dispersión y densidad) .

plot(seq(1,50), Vector_of_Means, xlab = "Sample Size", ylab = "Centimeters")


abline(h=mu, col="blue")

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 14/16
6/11/2019 Chapter 7: Sampling and Replication

A partir del diagrama de dispersión, está claro que la distribución de puntos (medias de muestra) se agrupa cada vez
más cerca de la media real de la población a medida que aumenta el tamaño de la muestra, lo que demuestra la Ley de
los grandes números. El aumento del tamaño de la muestra continuaría esta tendencia.

5.2 B. Simulación de una distribución de Poisson


Una distribución de Poisson es una distribución de probabilidad discreta que expresa la probabilidad de que ocurra un
número determinado de eventos en un intervalo de tiempo determinado, con el requisito de que estos eventos ocurran
con una tasa promedio conocida y que la probabilidad de cada evento sea independiente de la probabilidad de los
eventos anteriores. En una distribución de Poisson, la variable lambda, a veces llamada parámetro de velocidad,
representa el número promedio de eventos en un intervalo de tiempo dado.

La función rpois () se puede usar para simular una distribución de Poisson en R usando la siguiente sintaxis:

```rpois(n, lambda)```

Donde n es el número de números de Poisson aleatorios que se generarán y lambda es el parámetro de velocidad
mencionado anteriormente de la distribución.

Simulemos una distribución de Poisson para un escenario del mundo real. Podemos utilizar una distribución de Poisson
para simular la cantidad de correos electrónicos que recibe un estudiante de posgrado de psicología de la UIC cada día
(incluido UIC MASSMAIL) durante un período de 100 días. Debido a que la probabilidad de cada correo electrónico
recibido suele ser independiente de los correos electrónicos anteriores recibidos, una distribución de Poisson es una
buena opción para modelar estos datos. Simulemos los datos de un estudiante típico durante 100 días, suponiendo una
tasa promedio de 30 correos electrónicos por día (lambda = 30):

PoissonEmails<-rpois(100, 30)

Para visualizar estos datos, hagamos un diagrama de dispersión:

plot(PoissonEmails,xlab="Day Number", ylab = "Number of Emails Received")


abline(h=30 col="blue")
https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 15/16
6/11/2019 Chapter 7: Sampling and Replication
abline(h=30, col= blue )

The plot above shows the simulated data representing the number of emails received each day over the 100 day period.
The blue line represents the average rate of 30 which I set for this distribution. As expected, data points for specific days
fall both above and below this specified average daily rate.

https://ademos.people.uic.edu/Chapter7.html#31_a_examples_of_simple_replication_of_individual_values_and_vectors 16/16

You might also like