Simulação de novo de dados a partir de um quadro de dados de projeto experimental.
Com foco em R (embora outra solução de idioma seja ótima).
Ao projetar um experimento ou uma pesquisa, a simulação de dados e a realização de uma análise desses dados simulados podem fornecer informações excelentes sobre as vantagens e fraquezas do projeto.
Essa abordagem também pode ser essencial para a compreensão e uso adequado dos testes estatísticos.
No entanto, esse processo tende a ser um pouco tedioso e muitos são levados a pular essa importante etapa de um experimento ou pesquisa.
Os modelos e testes estatísticos contêm a maioria das informações necessárias para simular os dados (incluindo uma suposição ou uma declaração explícita da distribuição).
Dado um modelo de análise (e suas suposições associadas, por exemplo, normalidade e equilíbrio), os níveis de um fator e uma medida de significância (como valor-p), eu gostaria de obter dados simulados (idealmente com uma função generalizada semelhante a imprimir (), prever (), simular ()).
É possível uma estrutura de simulação tão generalizada?
Em caso afirmativo, essa estrutura está disponível atualmente?
Exemplo, eu gostaria de uma função, como:
sim(aov(response~factor1+factor2*factor3),
p.values=list(factor1=0.05,
factor2=0.05,
factor3=0.50,
factor2:factor3=0.05),
levels=list(factor1=1:10,
factor2=c("A", "B", "C"),
factor3=c("A", "B", "C")))
ou seja, uma versão generalizada de:
sim.lm<-function(){
library(DoE.base)
design<-fac.design(nlevels=c(10,3,3),
factor.names=c("factor1", "factor2", "factor3"),
replications=3,
randomize=F)
response<-with(design, as.numeric(factor1)+
as.numeric(factor2)+
as.numeric(factor3)+
as.numeric(factor2)*as.numeric(factor3)+
rnorm(length(factor1)))
simulation<-data.frame(design, response)}
OU
sim(glm(response~factor1+factor2*factor3, family=poisson),
p.values=list(factor1=0.05,
factor2=0.05,
factor3=0.50,
factor2:factor3=0.05),
levels=list(factor1=1:10,
factor2=c("A", "B", "C"),
factor3=c("A", "B", "C")))
OU
library(lme4)
sim(lmer(response~factor1+factor2 + (factor2|factor3)),
F_value=list(factor1=50,
factor2=50),
levels=list(factor1=1:10,
factor2=c("A", "B", "C"),
factor3=c("A", "B", "C")))
que criaria um data.frame correspondente completo
exemplos potenciais de funções específicas (edite à vontade)
- arima.sim
existe uma função para criar um quadro de dados dos níveis dos fatores, sem a resposta modelada:
por exemplo, conf.design
http://cran.r-project.org/web/views/ExperimentalDesign.html
fonte
Respostas:
Na verdade, existe um S3 genérico
simulate
que até retorna o quadro de dados (ou outra lista) que você deseja. TipoJá possui métodos para as classes lm (funciona também para glm ou para seu exemplo aov) e glm.nb (no MASS). Agora você pode escrever
simulate
métodos S3 para outras classes de objetos, por exemplo, para objetos do lme4. Você pode verificar quais classes existem métodos digitandoou
fonte
>getAnywhere("simulate.class") no object named ‘simulate.class’ was found
>getS3method("simulate","class") Error in getS3method("simulate", "class") : S3 method 'simulate.class' not found
Há uma nova função chamada
simfun
noTeachingDemos
pacote para R (atualmente ela está apenas na versão de desenvolvimento no R-forge , levará um tempo até que esteja no CRAN). Destina-se a ajudar na criação de funções para fazer simulações.Um dos usos pretendidos é que um professor usaria o
simfun
function para criar uma função e distribuí-la aos alunos (possivelmente tenha uma interface da web em algum momento como alternativa). Os alunos criariam um quadro de dados dos fatores que representam um projeto experimental, passariam esse quadro de dados para a função criada e receberiam o quadro de dados com uma coluna adicional da resposta simulada de acordo com os parâmetros e a distribuição de erros configurados pelo professor , o aluno pode analisar os dados. Isso permite que o professor estabeleça um relacionamento "Verdadeiro", mas permite que os alunos tentem muitos projetos experimentais diferentes para explorar maneiras de alcançar a "Verdade" em muito menos tempo do que fazer um experimento real e exigir menos trabalho para o professor do que crie ou encontre vários conjuntos de dados de amostra diferentes, representando os diferentes designs possíveis.A
simfun
função foi projetada para ser flexível, de modo que o professor / criador possa basear as simulações em um modelo de regressão adequado, parâmetros fornecidos pelo professor / criador ou parâmetros fornecidos pelo aluno / usuário.A função criada também pode ser facilmente usada em simulações (com o
replicate
comando) para explorar potência, tamanho da amostra, tamanho do efeito, etc. Embora a simulação resultante possa ser mais lenta que a elaboração manual do processo de simulação.Isso se parece com o que você descreve, com a exceção de que não são necessários valores-p para criar os dados, mas o uso de
power.
funções oupwr.
dopwr
pacote pode ser incorporado para criar simulações com base na especificação de poder e alfa, em vez de meios e diferenças.Aqui está um exemplo da página de ajuda (existem vários outros exemplos) que pressupõe que você está medindo alturas de sujeitos (masculino e feminino) aninhados em cidades aninhadas em estados; existe um efeito aleatório para um estado com um SD de 1 e um efeito aleatório para a cidade (dentro do estado) com um DP de 0,5, o SD "erro" é 3, as fêmeas têm uma média de simulação de 64 polegadas e os machos têm uma média de 69 polegadas (o erro SD e as médias são realistas , os efeitos aleatórios são um pouco artificial). A
simfun
função é usada para criar uma nova função chamadasimheight
, em seguida, um quadro de dados é criado com IDs de estado, IDs de cidade e uma coluna para o sexo do sujeito (o design experimental ou o design de amostragem), que é passado parasimheight
e o resultado em um novo quadro de dados com as alturas simuladas (além das outras variáveis) que poderiam ser analisadas usando as ferramentas apropriadas.fonte
install.packages("TeachingDemos", repos="http://R-Forge.R-project.org")
. Você precisa de "http: //" no início e não ";".Digitando
methods(simulate)
ougetAnywhere("simulate")
deve funcionar. O primeiro fornece alguns métodos, se o pacote lme4 estiver carregado:[1] simulate.lm * simulate.merMod * simulate.negbin * simulate.polr *
Os objetos Lm são usados para os modelos lm e glm.
fonte