quarta-feira, 4 de novembro de 2015

Como gerar dados aleatoriamente com Excel

A necessidade de gerar aleatoriamente bases de dados surge quer no ensino da Bioestatística quer em estudos de simulação. O ponto de partida é o conhecimento das variáveis que se querem criar, definido-se:
  • Para cada variável qualitativa - quais são as possíveis categorias que a variável pode tomar, expressas por números. Por exemplo, para uma variável "grupo" que exprima o estado de saúde, as categorias poderão ser 1=Controlo e 2=Paciente.
  • Para cada variável quantitativa, qual é o valor mínimo e máximo que a mesma pode tomar. Por exemplo, para uma variável "idade" que exprima o número de anos de vida de um sujeito do estudo, poderemos definir como mínimo 0 anos e máximo 120 anos.
Tomemos como exemplo uma base de dados em que temos dois grupos (variável "grupo": 1=Controlo, 2=Paciente). Para cada sujeito regista-se a sua idade (variável "idade", que para o estudo assumimos estar compreendida entre 35 e 45 anos) e a sua frequência cardíaca (variável "freq", que para o estudo assumimos estar compreendida entre 60 e 100 batimentos por minuto). A base de dados a preencher (gerar aleatoriamente) terá o seguinte aspecto:


A geração da variável grupo é simples. Basta definir quantos controlos saudáveis (grupo=1) se quer ter na base de dados e quantos pacientes (grupo=2) se pretende inserir. Para este exemplo, considerarmos ter 14 controlos saudáveis e apenas 9 pacientes.


Relativamente à variável idade, iremos recorrer à função do Excel RANDBETWEEN(., .) - ou, em português, ALEATÓRIOENTRE(.; .). Esta é uma função que gera números aleatoriamente. Funciona de uma forma muito simples. Escrevendo numa célula do Excel "=RANDBETWEEN(35, 45)", este irá gerar números inteiros entre 35 e 45:


Procedendo como na animação em cima, as idades são geradas de forma igual para doentes e controlos. Suponhamos que relativamente às frequências cardíacas se espera que os doentes tenham valores elevados (entre 70 e 120 batimentos por minutos) quando comparados com os controlos (entre 60 e 100 batimentos por minuto). Nesse caso, deverá usar-se a função RANDBETWEEN(60, 100) para gerar dados de controlos e RANDBETWEEN(70, 120) para gerar dados de doentes:


 Notas:
  • Podem-se ainda querer acrescentar-se valores fora dos intervalos definidos para um ou dois sujeitos (acrescentando valores atípicos ou outliers). Tal poderá ser feito manualmente: após a geração de dados para a variável, alguns destes poderão ser substituídos como se entender. Por exemplo, poderemos querer considerar um controlo com frequência cardíaca reduzida (36 batimentos por minuto) e um paciente com frequência cardíaca alta (140 batimentos por minuto):
  •  Suponhamos que queríamos ser muito precisos na idade. Em vez de números inteiros entre 35 e 45, queríamos números com uma casa decimal. Nesse caso, basta usar a função "RANDBETWEEN(350, 450)/10":

  • A função RANDBETWEEN(., .) gera números uniformemente distribuídos. Podemos ainda querer gerar números normalmente distribuídos. Tal é possível com a função NORMINV(RAND(), ., .) - em português, INV.NORMAL(ALEATÓRIO(); .; .). Por exemplo, escrevendo numa célula "=NORMINV(RAND(), 10, 1)" e arrastando para gerar novos números, estes serão gerados seguindo uma distribuição normal com média 10 e desvio padrão 1.
  •  Cada vez que há mudanças à base de dados, os números aleatórios são gerados de novo.

1 comentário: