Por que os geradores de números aleatórios, como runif()
em R, não geram o mesmo resultado todas as vezes?
Por exemplo:
X <- runif(100)
X
está gerando saídas diferentes a cada vez.
Qual é o motivo para gerar resultados diferentes a cada vez?
Que funcionalidades existem em segundo plano para fazer isso?
r
algorithms
random-generation
uniform
Himabindu Kunani
fonte
fonte
Respostas:
No fundo, isso não é realmente apenas uma pergunta R; relaciona-se à geração de números aleatórios de maneira mais geral.
Números "aleatórios" são muito importantes em muitas partes das estatísticas. Precisamos dos valores aleatórios que geramos para ter certas propriedades e (geralmente) muito esforço é necessário na construção de geradores de números aleatórios e na verificação de suas propriedades.
A idéia é que queremos obter uma sequência de valores que sejam um bom proxy para números realmente aleatórios. O cavalo de batalha usual da geração de números aleatórios é a distribuição uniforme (a partir da qual construímos outros, como números aleatórios gaussianos).
Por exemplo, muitos trabalham apenas no anterior:
Veja
?runif
em R e observe que ele explica sobre a existência da semente aleatória, com um link para a ajuda sobre o?.Random.seed
que explica o grande número de geradores de números aleatórios disponíveis no R (você pode até fornecer o seu próprio). A mesma página de ajuda explica que, se você nunca usou a geração de números aleatórios antes ou configurou a semente, para começar com a semente é retirada do relógio e, a partir daí, o valor anterior é armazenado (para que o próximo número aleatório obtido seja o mesmo que você obteria se tivesse gerado mais um valor da última vez - ele lembra "onde você está fazendo").A função
runif
em R (como muitas outras rotinas de geração de número aleatório em outros pacotes que geralmente podem fazer algo semelhante) sabe sobre o local onde a semente de número aleatório é mantida. Ele continua atualizando esse valor à medida que avança. Portanto, ele pode operar sem ter que receber explicitamente uma semente, mas ainda usa uma; se você não deu um, apenas usa o que salvou por último.Quanto ao motivo pelo qual ele produz resultados diferentes a cada vez (se você não diz para dar a mesma sequência): faz isso porque os mesmos valores sempre seriam geralmente muito contraproducentes - não teriam as propriedades que se repetiam a amostragem aleatória teria, tornando-a pouco útil para as posturas para as quais usamos geradores de números aleatórios.
fonte
Você precisa definir a semente aleatória para obter o mesmo resultado a cada vez. Use ? Set.seed para fazer isso. Considerar:
Você pode estar interessado em ler o seguinte: Motivos para usar a função set.seed .
fonte