Em quase todo o trabalho de análise que já fiz, uso:
set.seed(42)
É uma homenagem ao Guia do Mochileiro das Galáxias . Mas estou pensando se estou criando viés usando a mesma semente repetidamente.
Em quase todo o trabalho de análise que já fiz, uso:
set.seed(42)
É uma homenagem ao Guia do Mochileiro das Galáxias . Mas estou pensando se estou criando viés usando a mesma semente repetidamente.
Respostas:
Não há viés se o RNG for bom. Porém, ao sempre usar a mesma semente, você cria uma forte interdependência entre todas as simulações que realiza em sua carreira. Isso cria um tipo incomum de risco.
Ao usar a mesma semente de cada vez, ou você sempre obtém uma sequência pseudo-aleatória bastante agradável e todo o seu trabalho corre bem ou - com uma probabilidade muito baixa, mas diferente de zero - você está sempre usando uma sequência muito ruim e suas simulações não são como representante das distribuições subjacentes como você pensa que elas possam ser. Todo o seu trabalho é muito bom ou muito ruim!
Compare isso com o uso de sementes iniciais verdadeiramente aleatórias de cada vez. De vez em quando, você pode obter uma sequência de valores aleatórios que não são representativos da distribuição que está modelando, mas na maioria das vezes você fica bem. Se você nunca tentou reproduzir seu próprio trabalho (com uma nova semente), uma ou duas vezes na carreira poderá obter resultados enganosos, mas na grande maioria das vezes você estará bem.
Existe uma cura simples e óbvia: sempre, sempre verifique seu trabalho reiniciando com outra semente. É praticamente impossível que duas sementes acidentalmente dêem resultados enganosos da mesma maneira.
Por outro lado, há um mérito extraordinário em ter uma "semente pessoal" conhecida: mostra o mundo em que você está sendo honesto. Uma maneira astuta e sutil de se deitar com simulações é repeti-las até que elas produzam um resultado predeterminado. Aqui está um R
exemplo prático para "demonstrar" que mesmo uma moeda justa é altamente provável que caia cara mais da metade do tempo:
n.flips <- 100
seeds <- 1:10^3
#
# Run some preliminary simulations.
#
results <- sapply(seeds, function(seed) {
set.seed(seed)
mean(runif(n.flips) > 1/2)
})
#
# Now do the "real" simulation.
#
seed <- seeds[which.max(results)]
set.seed(seed)
x <- mean(runif(n.flips) > 1/2)
z <- (x - 1/2) * 2 * sqrt(n)
cat("Mean:", x, "Z:", z, "p-value:", pnorm(z, lower.tail=FALSE), "\n")
As implicações podem ser fascinantes e importantes. Por exemplo, se eu soubesse de antemão quem estaria recrutando para um estudo controlado randomizado, duplo-cego e em que ordem (que eu poderia controlar como professor universitário testando um grupo de graduados ou ratos de laboratório), então de antemão, eu poderia executar um conjunto de simulações para encontrar uma semente que agrupasse os alunos mais ao meu gosto para favorecer o que eu esperava "provar". Eu poderia incluir a ordem planejada e essa semente no meu plano experimental antesconduzindo o experimento, criando, assim, um procedimento que nenhum revisor crítico jamais poderia acusar - mas, mesmo assim, empilhando o baralho a meu favor. (Acredito que existem ramos inteiros da pseudociência que usam alguma variante desse truque para ganhar credibilidade. Você acreditaria que eu realmente usei o ESP para controlar o computador? Também posso fazer isso à distância com o seu!)
Alguém cuja semente padrão é conhecida não pode jogar este jogo.
Minha semente pessoal é 17 , como atesta uma grande parte das minhas postagens (atualmente 155 das 161 postagens que definiram uma semente usam essa). Em R
que é uma semente difícil trabalhar com, porque (como se vê) a maioria dos pequenos conjuntos de dados que criar com ele têm um outlier forte. Isso não é uma característica ruim ....
R
o comportamento é puramente acidental.
Como afirmado acima, um bom RNG não gerará viés abaixo do uso da mesma semente. No entanto, haverá uma correlação entre os resultados. (O mesmo número pseudo-aleatório iniciará cada cálculo.) Se isso importa não é uma questão de matemática.
Às vezes, usar a mesma semente é bom: para depuração ou quando você sabe que deseja resultados correlacionados.