Ajustando um modelo misto especial em R - alternativas para optim ()

8

Eu gostaria de fazer algo em R que o SAS possa fazer usando o proc misto do SAS (existe alguma maneira de se fazer isso no STATA), ou seja, ajustar o chamado modelo bivariado de Reitsma et al (2005). Este modelo é um modelo misto especial em que a variação depende do estudo (veja abaixo). Pesquisando e conversando com algumas pessoas familiarizadas com o modelo não produzimos uma abordagem direta e rápida ao mesmo tempo (ou seja, uma boa função de ajuste de modelo de alto nível). No entanto, tenho certeza de que há algo rápido no R que se pode construir.

Em poucas palavras, nos deparamos com a seguinte situação: Dados pares de proporções em , gostaríamos de ajustar uma normal bivariada aos pares transformados em logit. Como as proporções vêm de uma tabela 2x2 (isto é, dados binomiais), cada proporção observada transformada em logit possui uma estimativa de variação que deve ser incluída no processo de ajuste, digamos . Então, alguém gostaria de ajustar uma normal bivariada aos pares, onde a matriz de covariância depende da observação, ou seja,(p1,p2)[0,1]2(s1,s2)Σ

(logit(p1),logit(p2))N((mu1,mu2),Σ+S)

onde S é a matriz diagonal com e depende inteiramente dos dados, mas varia de observação para observação. mu e Sigma são os mesmos para todas as observações.(s1,s2)

No momento, estou usando uma chamada para optim()(usando BFGS) para estimar os cinco parâmetros ( , e três parâmetros para ). No entanto, isso é dolorosamente lento e especialmente inadequado para simulação. Também um dos meus objetivos é introduzir coeficientes de regressão para mu posteriormente, aumentando o número de parâmetros.μ1μ2Σ

Tentei acelerar o ajuste fornecendo valores iniciais e também pensei em calcular gradientes para os cinco parâmetros. Como a probabilidade se torna bastante complexa devido à adição de , senti o risco de introduzir erros dessa maneira era muito grande e não tentei ainda, nem vi uma maneira de verificar meus cálculos.S

O cálculo dos gradientes normalmente vale a pena? Como você os verifica?

Além disso optim(), conheço outro otimizador , ou seja, nlm()e também conheço a visualização Tarefa CRAN: Otimização. Quais valem a pena tentar?

Que tipo de truques existem para acelerar, optim()além de reduzir a precisão?

Ficaria muito grato por qualquer dica.

Philipp
fonte
Alguma discussão aqui
Henry
As respostas a esta pergunta pode ser útil: stats.stackexchange.com/questions/9535/...
Jason Morgan
@mbq: Obrigado por migrar a pergunta. Também obrigado por sugerir outras perguntas.
Philipp

Respostas: