O artigo de O'Hara e Kotze (Methods in Ecology and Evolution 1: 118–122) não é um bom ponto de partida para discussão. Minha preocupação mais séria é a afirmação no ponto 4 do resumo:
Descobrimos que as transformações tiveram um desempenho ruim, exceto. . .. Os modelos quase-Poisson e binomial negativo ... [mostraram] pouco viés.
λθλ
λ
O código R a seguir ilustra o ponto:
x <- rnbinom(10000, 0.5, mu=2)
## NB: Above, this 'mu' was our lambda. Confusing, is'nt it?
log(mean(x+1))
[1] 1.09631
log(2+1) ## Check that this is about right
[1] 1.098612
mean(log(x+1))
[1] 0.7317908
Ou tente
log(mean(x+.5))
[1] 0.9135269
mean(log(x+.5))
[1] 0.3270837
A escala na qual os parâmetros são estimados é muito importante!
λ
Observe que o diagnóstico padrão funciona melhor em uma escala de log (x + c). A escolha de c pode não importar muito; frequentemente 0,5 ou 1,0 fazem sentido. Também é um melhor ponto de partida para investigar as transformações de Box-Cox, ou a variante Yeo-Johnson de Box-Cox. [Yeo, I. e Johnson, R. (2000)]. Consulte mais a página de ajuda do powerTransform () na embalagem do carro de R. O pacote gamlss de R permite ajustar binomiais negativos tipos I (a variedade comum) ou II ou outras distribuições que modelam a dispersão, bem como a média, com links de transformação de potência de 0 (= log, ou seja, link de log) ou mais . Os ajustes nem sempre podem convergir.
Exemplo:
Dados de Mortes x Dano Base são para furacões no Atlântico que chegaram ao continente americano. Os dados estão disponíveis (nome hurricNamed ) em uma versão recente do pacote DAAG para R. A página de ajuda para os dados possui detalhes.
O gráfico compara uma linha ajustada obtida usando um ajuste de modelo linear robusto, com a curva obtida pela transformação de um ajuste binomial negativo com link de log na escala de log (count + 1) usada para o eixo y no gráfico. (Observe que é necessário usar algo semelhante a uma escala de log (count + c), com c positivo, para mostrar os pontos e a "linha" ajustada do ajuste binomial negativo no mesmo gráfico.) Observe o grande viés que é evidente para o ajuste binomial negativo na escala logarítmica. O ajuste robusto do modelo linear é muito menos tendencioso nessa escala, se alguém assumir uma distribuição binomial negativa para as contagens. Um ajuste de modelo linear seria imparcial sob as suposições clássicas da teoria normal. Achei o viés surpreendente quando criei o que era essencialmente o gráfico acima! Uma curva ajustaria melhor os dados, mas a diferença está dentro dos limites usuais de variabilidade estatística. O ajuste robusto do modelo linear faz um trabalho ruim para contagens na extremidade inferior da balança.
Nota --- Estudos com dados de RNA-Seq: A comparação dos dois estilos de modelo tem sido interessante para a análise de dados de contagem de experimentos de expressão gênica. O artigo a seguir compara o uso de um modelo linear robusto, trabalhando com log (contagem + 1), com o uso de ajustes binomiais negativos (como no pacote Bioconductor edgeR ). A maioria das contagens, no aplicativo RNA-Seq, principalmente em mente, é grande o suficiente para que o modelo log-linear adequadamente ponderado se encaixe e trabalhe extremamente bem.
Law, CW, Chen, Y, Shi, W, Smyth, GK (2014). Voom: pesos de precisão desbloqueiam ferramentas de análise de modelos lineares para contagens de leitura de RNA-seq. Genome Biology 15, R29. http://genomebiology.com/2014/15/2/R29
NB também o artigo recente:
Schurch NJ, Schofield P, Gierliński M, Cole C, Sherstnev A, Singh V, Wrobel N, Gharbi K, Simpson GG, Owen-Hughes T, Blaxter M, Barton GJ (2016). Quantas réplicas biológicas são necessárias em um experimento de RNA-seq e qual ferramenta de expressão diferencial você deve usar? RNA
http://www.rnajournal.org/cgi/doi/10.1261/rna.053959.115
É interessante que o modelo linear se ajuste usando o pacote limma (como edgeR , do grupo WEHI) se mantenha extremamente bem (no sentido de mostrar pouca evidência de viés), em relação aos resultados com muitas repetições, pois o número de repetições é reduzido.
Código R para o gráfico acima:
library(latticeExtra, quietly=TRUE)
hurricNamed <- DAAG::hurricNamed
ytxt <- c(0, 1, 3, 10, 30, 100, 300, 1000)
xtxt <- c(1,10, 100, 1000, 10000, 100000, 1000000 )
funy <- function(y)log(y+1)
gph <- xyplot(funy(deaths) ~ log(BaseDam2014), groups= mf, data=hurricNamed,
scales=list(y=list(at=funy(ytxt), labels=paste(ytxt)),
x=list(at=log(xtxt), labels=paste(xtxt))),
xlab = "Base Damage (millions of 2014 US$); log transformed scale",
ylab="Deaths; log transformed; offset=1",
auto.key=list(columns=2),
par.settings=simpleTheme(col=c("red","blue"), pch=16))
gph2 <- gph + layer(panel.text(x[c(13,84)], y[c(13,84)],
labels=hurricNamed[c(13,84), "Name"], pos=3,
col="gray30", cex=0.8),
panel.text(x[c(13,84)], y[c(13,84)],
labels=hurricNamed[c(13,84), "Year"], pos=1,
col="gray30", cex=0.8))
ab <- coef(MASS::rlm(funy(deaths) ~ log(BaseDam2014), data=hurricNamed))
gph3 <- gph2+layer(panel.abline(ab[1], b=ab[2], col="gray30", alpha=0.4))
## 100 points that are evenly spread on a log(BaseDam2014) scale
x <- with(hurricNamed, pretty(log(BaseDam2014),100))
df <- data.frame(BaseDam2014=exp(x[x>0]))
hurr.nb <- MASS::glm.nb(deaths~log(BaseDam2014), data=hurricNamed[-c(13,84),])
df[,'hatnb'] <- funy(predict(hurr.nb, newdata=df, type='response'))
gph3 + latticeExtra::layer(data=df,
panel.lines(log(BaseDam2014), hatnb, lwd=2, lty=2,
alpha=0.5, col="gray30"))