Início > dados, delineamento, matemática > Gerando seus próprios dados

Gerando seus próprios dados

Se você está prestes a ficar louco por causa dos seus dados que não ficaram bons ou porque você perdeu tudo! Esse post vem bem de encontro as suas expectativas.

Vamos mostrar agora como gerar seus próprios dados! Isso vai ser feito pelo uso das funções de geração de números aleatórios (pseudo aleatórios) do R, especialmente a rnorm().

É claro que é brincadeira que você vai usar os dados simulados como os dados verdadeiramente obtidos. Mas pretendemos com a demonstração da geração de dados mostrar uma boa funcionalidade do programa R.

E sem dúvida sempre que você abstrair um pouco para imaginar como gerar dados é um ótima forma de melhor compreender a mecânica envolvida no processo. Outra coisa é que a simulação é uma “bonita” forma de realizar testes, se você por acaso tiver uma idéia (ou hipótese) a testar mas ela seja meio difícil de se fazer experimentalmente a simulação é uma boa alternativa!

Para começar vamos apresentar a função rnorm(). É com ela que geramos os números pseudo-aleatórios. seus argumentos são n que é número de valores que serão gerados e depois vem os parâmetros da normal sob o qual os valores serão gerados mean e sd. Se você não especificar esses parâmetros serão gerado valores de uma distribuição normal padrão, media 0 e desvio padrão 1. O R tem função para geração de dados de outras distribuições, poisson, binomial, gamma, beta, etc. Procure a documentação!

Assim, primeiro temos que postular o que queremos simular. No nosso exemplo (CMR) vamos mostrar como gerar dados de um experimento em DIC, qualquer (qualquer mesmo…). Teremos então t tratamentos, r repetições e uma média geral mu, especificamos qual deva ser a variância entre tratamentos (sg.t) e uma variância do erro (sg.e).

Veja o CMR:

t <- 20 # número de tratamentos

r <- 10 # número de repetições

mu <- 100
sg.t <- 15
sg.e <- 9 # parâmetros (média geral, var de trat e var do erro)

a.dat <- matrix(rnorm(t, 0, sqrt(sg.t)),
                nrow = t,
                ncol = r) # iésimo efeito de tratamento

e.dat <- matrix(rnorm(t*r, 0, sqrt(sg.e)),
                nrow = t,
                ncol = r) # iésimo efeito aleatório

plan <- transform(data.frame(expand.grid(trat = 1:t, rep = 1:r), # dados
                            obs = c(round(mu + a.dat + e.dat))),
                 trat = factor(trat),
                 rep = factor(rep))

Esse conjunto de dados gerados é (digamos assim) “único”. A chance de você rodando novamente esse código obter exatamente os mesmos dados é bem improvável. Se você quiser repetir exatamente esses valores você pode especificar a semente que gera os dados, isso é feito pela função set.seed(). Faça o teste!

O modelo de DIC é: y_{ij} = \mu + t_i + \varepsilon_{ij} Portanto depois de especificar os parâmetros do nosso modelo criamos matrizes, com as dimensões do experimento que contêm simulações geradas com esses parâmetros.

Inspecione a matriz de nome a.dat, veja que a dimensão da matriz é t por r, mas são gerados apenas t simulações, assim todas células da mesma linha terão os mesmos valores, que serão os efeitos de tratamentos.

Por outro lado, a matriz e.dat tem todos os valores diferentes. Que são os desvios aleatórios. Como os efeitos de tratamentos e do erro são independentes somando-se as células dessas matrizes obtemos os dados.

É claro que esse é apenas uma simulação, é extremamente simples, mas ela serve como exemplo de como realizar uma simulação mais complexa, que envolva um outro delineamento diferente. E se você pretende usar a simulação para testar outras hipóteses seria interessante realizar mais de um conjunto de dados. E realizar alguns “testes” sobre os conjuntos gerados para verificar a consistência dos dados gerados. Mas vamos deixar isso para outro post!

Veja por exemplo que se você realizar uma análise sobre esse conjunto de dados as variâncias que você obterá não serão exatamente os parâmetros que você estipulou, isso ocorre pois como o exemplo tem uma dimensão pequena ocorrem alguns desvios devido ao processo de amostragem inerente.

Anúncios
  1. 05/11/2013 às 02:21

    Olá Fernando. Caso eu queira incluir um fator aleatório de blocos, tornando tal modelo misto, esta adição de efeito pode ser feita de maneira similar aos efeitos fixos que você gerou (e a partir de então analisar os dados no R com lme e ferramentas mistas)? Ou é necessário modificar totalmente o enfoque da programação para geração de dados trabalhando sobre o modelo y = Xb + Zu + e? Existe algum material que você possa me indicar para a simulação de modelos lineares mistos?

    • fernandohtoledo
      05/11/2013 às 13:09

      Cassio, acredito que do modo que a simulação está implementada trata-se de um modelo aleatório, pois os efeitos de tratamentos são amostrados de uma distribuição. Relendo o post confesso que acho que existem muitas coisas a melhorar no script… ! Quanto a incluir outro efeito aleatório, acho que não há problema nenhum, a primeira vista, mas se formos inspecionar mais profundamente o caso, vemos que o resíduo de uma análise em blocos pode ser interpretado como a interação tratamento blocos, desse modo, acho que além de apenas incluir tais efeitos seria o caso de incluir também o efeito dessa interação e excluir o resíduo do modo que está mostrado! Outro ponto que veja ser importante é tentar modelar efeitos aleatórios usando a normal multivariada que se adequa mais as modelagens mistas! Uma recomendação também introdutória, mas mais aprofundada é essa APOSTILA, acho que aqui tem uma implementação mais sofisticada de simulação, tem modelo fixos e aleatórios e apresenta como implementar a repetição da simulação, espero que aproveite! Por último recomento o post de paralelização, nele você pode ver como rodar as n simulações usando vários núcleos! Abraço.

      • 05/11/2013 às 14:50

        Tentarei então tal implementação, também tentarei acrescentar dependência espacial na matriz de resíduos. Muito obrigado pelas dicas e pela indicação da apostila, Fernando. Parabéns pelo post e pelo ótimo material. Qualquer dúvida, recorrerei novamente a você, tudo bem? Grande abraço.

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: