Primeiro, não há aleatoriedade verdadeira nos "números aleatórios" gerados por computador de hoje. Todos os geradores pseudo-aleatórios usam métodos determinísticos. (Possivelmente, os computadores quânticos mudarão isso.)
A tarefa difícil é inventar algoritmos que produzem resultados que não podem ser significativamente diferenciados dos dados provenientes de uma fonte verdadeiramente aleatória.
Você está certo que definir uma semente o inicia em um ponto de partida conhecido em uma longa lista de números pseudo-aleatórios. Para os geradores implementados em R, Python e assim por diante, a lista é imensamente longa. Tempo suficiente para que nem mesmo o maior projeto de simulação viável exceda o 'período' do gerador, para que os valores comecem a reciclar.
Em muitas aplicações comuns, as pessoas não estabelecem uma semente. Em seguida, uma semente imprevisível é selecionada automaticamente (por exemplo, nos microssegundos no relógio do sistema operacional). Os geradores pseudo-aleatórios em uso geral foram submetidos a baterias de testes, consistindo em grande parte de problemas que provaram ser difíceis de simular com geradores insatisfatórios anteriores.
Normalmente, a saída de um gerador consiste em valores que, para fins práticos, não são distinguíveis dos números escolhidos verdadeiramente aleatoriamente na distribuição uniforme emEm seguida, esses números pseudo-aleatórios são manipulados para corresponder ao que seria obtido aleatoriamente em outras distribuições, como binomial, Poisson, normal, exponencial etc.(0,1).
Um teste de um gerador é verificar se seus pares sucessivos em 'observações' simuladas como
realmente parecem estar preenchendo a unidade ao quadrado aleatoriamente. (Feito duas vezes abaixo.) A aparência levemente marmorizada é resultado da variabilidade inerente. Seria muito suspeito obter uma trama que parecesse perfeitamente uniformemente cinza. [Em algumas resoluções, pode haver um padrão de moiré regular; altere a ampliação para cima ou para baixo para se livrar desse efeito falso, se ocorrer.]Unif(0,1)
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))
Às vezes, é útil definir uma semente. Alguns desses usos são os seguintes:
Ao programar e depurar , é conveniente ter uma saída previsível. Muitos programadores colocam uma set.seed
declaração no início de um programa até que a gravação e a depuração sejam concluídas.
Ao ensinar sobre simulação. Se eu quiser mostrar aos alunos que posso simular jogadas de um dado justo usando a sample
função em R, eu poderia trapacear, executando muitas simulações e escolhendo a que mais se aproxima de um valor teórico alvo. Mas isso daria uma impressão irreal de como a simulação realmente funciona.
Se eu definir uma semente no início, a simulação sempre terá o mesmo resultado. Os alunos podem revisar sua cópia do meu programa para garantir que ele dê os resultados pretendidos. Em seguida, eles podem executar suas próprias simulações, com suas próprias sementes ou deixando o programa escolher seu próprio ponto de partida.
Por exemplo, a probabilidade de obter o total de 10 ao dois dados justos éCom um milhão de experimentos com 2 dados, devo obter precisão de dois ou três pontos. A margem de 95% de erro de simulação é de cerca de
3/36=1/12=0.08333333.
2(1/12)(11/12)/106−−−−−−−−−−−−−−−√=0.00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
Ao compartilhar análises estatísticas que envolvem simulação.
Atualmente, muitas análises estatísticas envolvem alguma simulação, por exemplo, um teste de permutação ou um amostrador de Gibbs. Ao mostrar a semente, você permite que as pessoas que leem a análise replicem os resultados exatamente, se desejarem.
Ao escrever artigos acadêmicos envolvendo randomização. Os artigos acadêmicos geralmente passam por várias rodadas de revisão por pares. Uma plotagem pode usar, por exemplo, pontos de tremulação aleatória para reduzir a plotagem. Se as análises precisarem ser levemente alteradas em resposta aos comentários do revisor, é bom que um tremor específico não relacionado não seja alterado entre as rodadas de revisão, o que pode ser desconcertante para os revisores particularmente cuidadosos, para que você defina uma semente antes do tremor.
2^19937 − 1
. A semente é o ponto dessa sequência extremamente longa em que o gerador inicia. Então, sim, é determinístico.