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
## [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