L'article O'Hara et Kotze (Methods in Ecology and Evolution 1: 118–122) n'est pas un bon point de départ pour la discussion. Ma préoccupation la plus sérieuse est l'allégation au point 4 du résumé:
Nous avons constaté que les transformations se sont mal déroulées, sauf. . .. Les modèles binomiaux quasi-Poisson et négatifs ... [montraient] peu de biais.
La moyenne pour une distribution de Poisson ou une distribution binomiale négative est pour une distribution qui, pour les valeurs de <= 2 et pour la plage de valeurs de la moyenne qui a été étudiée, est très positivement asymétrique. Les moyennes des distributions normales ajustées sont sur une échelle de log (y + c) (c est le décalage) et d'estimation E (log (y + c)]. Cette distribution est beaucoup plus proche de symétrique que la distribution de y .θ λλθλ
Les simulations d'O'Hara et de Kotze comparent E (log (y + c)], estimé par la moyenne (log (y + c)), avec log (E [y + c]). Ils peuvent être, et dans les cas notés sont très différents. Leurs graphiques ne comparent pas un binôme négatif avec un ajustement log (y + c), mais comparent plutôt la moyenne (log (y + c)] avec log (E [y + c]). ) sur leurs graphiques, ce sont en fait les ajustements binomiaux négatifs qui sont les plus biaisés! λ
Le code R suivant illustre le point:
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 essayez
log(mean(x+.5))
[1] 0.9135269
mean(log(x+.5))
[1] 0.3270837
L'échelle sur laquelle les paramètres sont estimés est très importante!
Si l'on échantillonne à partir d'un Poisson, bien sûr, on s'attend à ce que le Poisson fasse mieux, si l'on en juge par les critères utilisés pour ajuster le Poisson. Idem pour un binôme négatif. La différence n'est peut-être pas si grande, si la comparaison est juste. Les données réelles (par exemple, peut-être, dans certains contextes génétiques) peuvent parfois être très proches de Poisson. Quand ils s'écartent de Poisson, le binôme négatif peut ou peut ne pas bien fonctionner. De même, surtout si est de l'ordre de peut-être 10 ou plus, pour modéliser log (y + 1) en utilisant la théorie normale standard.λ
Notez que les diagnostics standard fonctionnent mieux sur une échelle de journal (x + c). Le choix de c n'a peut-être pas trop d'importance; souvent 0,5 ou 1,0 ont du sens. C'est également un meilleur point de départ pour étudier les transformations de Box-Cox, ou la variante Yeo-Johnson de Box-Cox. [Yeo, I. et Johnson, R. (2000)]. Voir plus loin la page d'aide de powerTransform () dans le package de voiture de R. Le package gamlss de R permet d'adapter les types binomiaux négatifs I (la variété commune) ou II, ou d'autres distributions qui modélisent la dispersion ainsi que la moyenne, avec des liens de transformation de puissance de 0 (= log, c.-à-d. Lien log) ou plus . Les ajustements peuvent ne pas toujours converger.
Exemple: Les décès par rapport aux dommages de base
concernent les ouragans de l'Atlantique nommés qui ont atteint le continent américain. Les données sont disponibles (nom hurricNamed ) à partir d'une version récente du package DAAG pour R. La page d'aide pour les données contient des détails.
Le graphique compare une ligne ajustée obtenue à l'aide d'un ajustement de modèle linéaire robuste, avec la courbe obtenue en transformant un ajustement binomial négatif avec lien logarithmique sur l'échelle logarithmique (comptage + 1) utilisée pour l'axe des y sur le graphique. (Notez qu'il faut utiliser quelque chose qui ressemble à une échelle logarithmique (nombre + c), avec c positif, pour montrer les points et la "ligne" ajustée de l'ajustement binomial négatif sur le même graphique.) Notez le biais important qui est évident pour l'ajustement binomial négatif sur l'échelle logarithmique. L'ajustement robuste du modèle linéaire est beaucoup moins biaisé sur cette échelle, si l'on suppose une distribution binomiale négative pour les dénombrements. Un ajustement de modèle linéaire serait non biaisé selon les hypothèses de la théorie normale classique. J'ai trouvé le biais étonnant lorsque j'ai créé ce qui était essentiellement le graphique ci-dessus! Une courbe correspondrait mieux aux données, mais la différence se situe dans les limites des normes habituelles de variabilité statistique. L'ajustement robuste du modèle linéaire fait un mauvais travail pour les dénombrements à l'extrémité inférieure de l'échelle.
Remarque --- Études avec les données RNA-Seq: La comparaison des deux styles de modèle a été intéressante pour l'analyse des données de comptage des expériences d'expression génique. L'article suivant compare l'utilisation d'un modèle linéaire robuste, fonctionnant avec log (count + 1), avec l'utilisation d'ajustements binomiaux négatifs (comme dans le package R du boîtier du bioconducteur ). La plupart des dénombrements, dans l'application RNA-Seq qui est principalement à l'esprit, sont suffisamment grands pour que les ajustements log-linéaires correctement pesés fonctionnent extrêmement bien.
Law, CW, Chen, Y, Shi, W, Smyth, GK (2014). Voom: les poids de précision débloquent des outils d'analyse de modèle linéaire pour les comptages de lecture ARN-seq. Genome Biology 15, R29. http://genomebiology.com/2014/15/2/R29
NB également le récent article:
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). Combien de répétitions biologiques sont nécessaires dans une expérience d'ARN-seq et quel outil d'expression différentielle devez-vous utiliser? RNA
http://www.rnajournal.org/cgi/doi/10.1261/rna.053959.115
Il est intéressant de noter que le modèle linéaire s'adapte en utilisant le package limma (comme edgeR , du groupe WEHI) résiste extrêmement bien (dans le sens de montrer peu de preuves de biais), par rapport aux résultats avec de nombreuses répétitions, car le nombre de répétitions est réduit.
Code R pour le graphique ci-dessus:
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"))