オハラとコッツェの論文(Methods in Ecology and Evolution 1:118–122)は、議論の出発点としては適切ではありません。私の最も深刻な懸念は、要約のポイント4の主張です。
を除き、変換のパフォーマンスが低いことがわかりました。。..準ポアソンおよび負の二項モデル... [示した]少しのバイアス。
λθλ
λ
次のRコードはポイントを示しています。
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
または試す
log(mean(x+.5))
[1] 0.9135269
mean(log(x+.5))
[1] 0.3270837
パラメータが推定されるスケールは非常に重要です!
λ
標準診断はlog(x + c)のスケールでより適切に機能することに注意してください。cの選択はあまり重要ではありません。多くの場合、0.5または1.0が理にかなっています。また、Box-Cox変換、またはBox-CoxのYeo-Johnsonバリアントを調査するためのより良い開始点です。[Yeo、I. and Johnson、R.(2000)]。Rの自動車パッケージのpowerTransform()のヘルプページを参照してください。Rのgamlssパッケージにより、負の二項タイプI(一般的な多様性)またはII、または分散(平均)をモデル化する他の分布を、0(= log、つまり対数リンク)以上のパワー変換リンクで適合させることができます。近似は常に収束するとは限りません。
例:死亡対ベースダメージ
データは、米国本土に到達した大西洋のハリケーンの名前です。R用のDAAGパッケージの最近のリリースからデータが利用可能です(名前hurricNamed)。データのヘルプページに詳細があります。
グラフは、ロバスト線形モデル近似を使用して取得した近似直線と、ログリンクを使用した負の二項近似をグラフのy軸に使用するlog(count + 1)スケールに変換することによって取得した曲線を比較します。(正のcを持つlog(count + c)スケールに似たものを使用して、同じグラフに負の二項近似からのポイントと近似「ライン」を表示する必要があることに注意してください。)対数スケールでの負の二項近似で明らかです。カウントに対して負の二項分布を仮定すると、このスケールではロバストな線形モデルの当てはまりがはるかに小さくなります。線形モデルの適合は、古典的な標準理論の仮定の下で不偏になります。本質的に上記のグラフであるものを最初に作成したとき、私は驚くべきバイアスを見つけました!曲線はデータによりよく適合し、しかし、違いは通常の統計的変動の標準の範囲内です。堅牢な線形モデルの適合は、スケールの下限でのカウントに対してはうまく機能しません。
注--- RNA-Seqデータを使用した研究: 2つのスタイルのモデルの比較は、遺伝子発現実験からのカウントデータの分析に興味があります。次の論文では、log(count + 1)で動作するロバスト線形モデルの使用と、負の二項近似の使用(BioconductorパッケージedgeRのように)を比較します。主に念頭に置いているRNA-Seqアプリケーションのほとんどのカウントは、適切に重み付けされた対数線形モデルの近似が非常にうまく機能するのに十分な大きさです。
Law、CW、Chen、Y、Shi、W、Smyth、GK(2014)。Voom:精密ウェイトにより、RNA-seq読み取りカウント用の線形モデル分析ツールのロックが解除されます。ゲノム生物学15、R29。http://genomebiology.com/2014/15/2/R29
NBも最近の論文:
Schurch NJ、Schofield P、Gierliski M、Cole C、Sherstnev A、Singh V、Wrobel N、Gharbi K、Simpson GG、Owen-Hughes T、Blaxter M、Barton GJ(2016)。RNA-seq実験で必要な生物学的複製はいくつありますか?また、どの差次的発現ツールを使用すべきですか?RNA
http://www.rnajournal.org/cgi/doi/10.1261/rna.053959.115
興味深いことに、limmaパッケージ(WEHIグループのedgeRなど)を使用した線形モデルの適合は、複製の数が多いため、多くの複製の結果に比べて(バイアスの証拠がほとんどないという意味で)非常に優れています。減少。
上のグラフのRコード:
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"))