9.1 Funções para gerar permutações e simular dados

A função sample() aleatoriza valores em um vetor, com ou sem repetição, ou amostra um certo número de valores aleatoriamente de um vetor de valores.

# ALEATORIZANDO DADOS SEM AMOSTRAGEM
?sample
# suponha um vetor de numeros
v1 <- 1:20
v1 # os numeros sao sequenciais
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
# se quiser embaralhar aleatoriamente
sample(v1)
##  [1] 19 12 14  4  2 15 20  6 17 10  8  3  1 16 18  5 11  7 13  9
sample(v1) # cada vez será diferente
##  [1] 16  8  2 14  4  6 13 15 17 18  3  1 12  9 20 19  7 11 10  5
sample(v1) # diferente de novo
##  [1] 19 17  8  4  5 11  2 13 18 15  9 16 10 12 14  3  7  6  1 20
# no exemplo acima, os numeros sao apenas embaralhados
table(v1) # cada valor só aparece uma vez
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
table(sample(v1)) # aqui tambem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
# se eu quiser amostras com repeticao
table(sample(v1, replace = TRUE))
1 2 3 4 5 6 7 8 9 10 13 15 17 18 20
1 1 1 1 1 3 2 1 1 1 1 1 1 2 2
# ele repetiu alguns valores aleatoriamente
table(sample(v1, replace = TRUE)) # vai ser diferente toda vez que voce executa
1 2 4 5 6 9 12 14 16 17 18 20
3 2 1 1 2 2 1 1 1 2 2 2
# mas o comprimento é sempre o mesmo
length(v1)
## [1] 20
length(sample(v1))
## [1] 20
length(sample(v1, replace = T))
## [1] 20
# agora com textos
table(LETTERS)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
table(sample(LETTERS, replace = T))
A B D E F G I J K M Q R S X Y Z
1 1 2 1 1 1 1 1 2 1 1 5 3 1 1 3

Amostraremos N valores de um vetor qualquer:

# agora amostra um número qualquer de valores de um vetor qualquer:
umvetor <- seq(from = 0, to = 1000, by = 0.1)
length(umvetor)
## [1] 10001
head(umvetor, 10) # primeiros 10 elementos
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
# agora amostra 100 valores desse vetor que tem 9991 valores
umaamostra <- sample(umvetor, size = 100, replace = T)
# entao isso deve ser verdadeiro
length(umaamostra) == 100
## [1] TRUE
# primeiros 10 valores amostrados
head(umaamostra, 10)
##  [1] 144.8 886.8 993.6 200.0 746.7 904.8 688.3 848.2  97.6 732.1
# histograma da amostra
hist(umaamostra, col = "red")
# note que a distribuição é uniforme, qualquer valor tem a mesma chance de ser amostrado
# faco outra vez e adiciono
outraamostra <- sample(umvetor, size = 100, replace = T)
# adiciono ao histograma anterior
hist(outraamostra, density = 10, add = T, col = "black")

# cada vez é diferente a sequencia de valores amostrados