Combinando dados de diferentes fontes


8

Eu quero combinar dados de diferentes fontes.

Digamos que eu queira estimar uma propriedade química (por exemplo, um coeficiente de particionamento ):

Eu tenho alguns dados empíricos, variando devido a erro de medição em torno da média.

E, em segundo lugar, eu tenho um modelo que prevê uma estimativa de outras informações (o modelo também tem alguma incerteza).

Como posso combinar esses dois conjuntos de dados? [A estimativa combinada será usada em outro modelo como preditor].

Meta-análise e métodos bayesianos parecem ser adequados. No entanto, não encontrei muitas referências e idéias sobre como implementá-lo (estou usando R, mas também estou familiarizado com python e C ++).

Obrigado.

Atualizar

Ok, aqui está um exemplo mais real:

Para estimar a toxicidade de um produto químico (tipicamente expresso como = concentração em que 50% dos animais morrem), são realizadas experiências de laboratório. Felizmente, os resultados das experiências são reunidos em um banco de dados (EPA) .euC50.

Aqui estão alguns valores para o inseticida Lindane :

### Toxicity of Lindane in ug/L
epa <- c(850 ,6300 ,6500 ,8000, 1990 ,516, 6442 ,1870, 1870, 2000 ,250 ,62000,
         2600,1000,485,1190,1790,390,1790,750000,1000,800
)
hist(log10(epa))

# or in mol / L
# molecular weight of Lindane
mw = 290.83 # [g/mol]
hist(log10(epa/ (mw * 1000000)))

No entanto, também existem alguns modelos disponíveis para prever toxicidade a partir de propriedades químicas ( QSAR ). Um desses modelos prevê a toxicidade do coeficiente de partição octanol / água ( ):euog KOW

euog euC50.[moeu/eu]=0,94 (±0,03) euog KOW - 1,33(± 0,1)

O coeficiente de particionamento de Lindano é e a toxicidade prevista é .l o g G C 50 [ m o l / L ] = - 4,902euog KOW=3.8euog euC50.[moeu/eu]=-4,902

lkow = 3.8
mod1 <- -0.94 * lkow - 1.33
mod1

Existe uma boa maneira de combinar essas duas informações diferentes (experimentos de laboratório e previsões de modelos)?

hist(log10(epa/ (mw * 1000000)))
abline(v = mod1, col = 'steelblue')

O combinado será usado posteriormente em um modelo como preditor. Portanto, um valor único (combinado) seria uma solução simples.euC50.

No entanto, uma distribuição também pode ser útil - se isso for possível na modelagem (como?).


2
Embora outros possam encontrar o suficiente aqui para responder, ainda não vejo que haja informações suficientes para apoiar uma resposta bem fundamentada. Seria possível ser um pouco mais específico sobre os dados que você planeja combinar?
whuber

@ whuber: Obrigado pelo comentário. Eu adicionei um exemplo mais específico e espero que isso esclareça o que estou procurando.
Edi 9/07

O esclarecimento é útil - obrigado. Mas você poderia adicionar algumas palavras sobre qual seria o resultado de uma "combinação" desses resultados? Seria um único ? Uma variedade deles? Um intervalo de confiança para eles? Uma avaliação de quão bem a previsão parece funcionar? Algo mais? E, independentemente de como eles seriam combinados, em última análise, o interesse se concentrará no uso das informações da para a tomada de decisões, como a regulamentação da fabricação, uso ou descarte de produtos químicos. Como essas decisões são tomadas geralmente tem uma influência (forte) no método adequado de combinação a ser usado. euC50.euC50.
whuber

Parece que você poderia aplicar uma das abordagens de estimativa anteriores que desenvolvi aqui , com exemplos neste priors_demo.Rmd .
David LeBauer

@David. Obrigado pelo artigo - vou dar uma olhada.
EDi

Respostas:


5

A estimativa do seu modelo seria uma prévia útil.

Eu apliquei a seguinte abordagem em LeBauer et al 2013 e adaptei o código de priors_demo.Rmd abaixo.

Para parametrizar isso antes de usar a simulação, considere seu modelo

logLC50.=b0 0X+b1

b0 0N(0,94,0,03)b1N(1,33,0,1)Lkow

ϵN(0 0,1)

b0 <- rnorm(1000, -0.94, 0.03)
b1 <- rnorm(1000, -1.33, 0.1)
e <- rnorm(1000, 0, 1)
lkow <- 3.8
theprior <- b0 * lkow + b1 + e

Agora imagine theprioré o seu anterior e

thedata <- log10(epa/ (mw * 1000000))

são seus dados:

library(ggplot2)
ggplot() + geom_density(aes(theprior)) + theme_bw() + geom_rug(aes(thedata))

A maneira mais fácil de usar o prior será parametrizar uma distribuição que o JAGS reconhecerá.

fitdistrplusN(mean(theprior), sd(theprior))N(-4.9,1.04)N(-4.9,2)

Em seguida, podemos ajustar um modelo usando JAGS

writeLines(con = "mymodel.bug",
           text = "
           model{
             for(k in 1:length(Y)) {
               Y[k] ~ dnorm(mu, tau)
             }

             # informative prior on mu
             mu ~ dnorm(-4.9, 0.25) # precision tau = 1/variance
             # weak prior 
             tau ~ dgamma(0.01, 0.01)
             sd <- 1 / sqrt(tau)
           }")

require(rjags)
j.model  <- jags.model(file = "mymodel.bug", 
                                  data = data.frame(Y = thedata), 
                                  n.adapt = 500, 
                                  n.chains = 4)
mcmc.object <- coda.samples(model = j.model, variable.names = c('mu', 'tau'),
                            n.iter = 10000)
library(ggmcmc)

## look at diagnostics
ggmcmc(ggs(mcmc.object), file = NULL)

## good convergence, but can start half-way through the simulation
mcmc.o     <- window(mcmc.object, start = 10000/2)
summary(mcmc.o)

Finalmente, um enredo:

ggplot() + theme_bw() + xlab("mu") + 
     geom_density(aes(theprior), color = "grey") + 
     geom_rug(aes(thedata)) + 
     geom_density(aes(unlist(mcmc.o[,"mu"])), color = "pink") +
     geom_density(aes(unlist(mcmc.o[,"pred"])), color = "red")

E você pode considerar mu=5.08sua estimativa do valor médio do parâmetro (rosa) e sd = 0.8seu desvio padrão; a estimativa preditiva posterior do logLC_50 (de onde você está obtendo suas amostras) está em vermelho.

insira a descrição da imagem aqui

Referência

LeBauer, DS, D. Wang, K. Richter, C. Davidson e MC Dietze. (2013). Facilitar feedbacks entre medições de campo e modelos de ecossistema. Monografias Ecológicas 83: 133–154. doi: 10.1890 / 12-0137.1


Eu deveria ter substituído -1,33 por b1 no cálculo anterior, mas não tenho tempo para corrigi-lo agora. Não fará muita diferença.
David LeBauer

@ EDi obrigado - por favor, cite a referência incluída, se você a usar!
David LeBauer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.