Makalah O'Hara dan Kotze (Metode dalam Ekologi dan Evolusi 1: 118-122) bukanlah titik awal yang baik untuk diskusi. Kekhawatiran saya yang paling serius adalah klaim dalam poin 4 ringkasan:
Kami menemukan bahwa transformasi berkinerja buruk, kecuali. . .. The quasi-Poisson dan model binomial negatif ... [menunjukkan] sedikit bias.
λθλ
λ
Kode R berikut mengilustrasikan poin:
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
Atau coba
log(mean(x+.5))
[1] 0.9135269
mean(log(x+.5))
[1] 0.3270837
Skala estimasi parameter sangat penting!
λ
Perhatikan bahwa diagnostik standar berfungsi lebih baik pada skala log (x + c). Pilihan c mungkin tidak terlalu penting; sering 0,5 atau 1,0 masuk akal. Juga merupakan titik awal yang lebih baik untuk menyelidiki transformasi Box-Cox, atau varian Yeo-Johnson dari Box-Cox. [Yeo, I. dan Johnson, R. (2000)]. Lihat lebih lanjut halaman bantuan untuk powerTransform () dalam paket mobil R. Paket gamls R memungkinkan untuk mencocokkan jenis binomial negatif I (varietas umum) atau II, atau distribusi lain yang memodelkan dispersi serta rata-rata, dengan tautan transformasi daya sebesar 0 (= log, yaitu, tautan log) atau lebih . Fits mungkin tidak selalu menyatu.
Contoh: Deaths vs Base Damage
Data untuk badai Atlantik bernama yang mencapai daratan AS. Data tersedia (nama hurricNamed ) dari rilis terbaru dari paket DAAG untuk R. Halaman bantuan untuk data memiliki detail.
Grafik membandingkan garis pas yang diperoleh dengan menggunakan model linear kuat, dengan kurva diperoleh dengan mengubah kecocokan binomial negatif dengan tautan log ke skala log (hitung + 1) yang digunakan untuk sumbu y pada grafik. (Perhatikan bahwa kita harus menggunakan sesuatu yang mirip dengan skala log (hitung + c), dengan positif c, untuk menunjukkan titik dan "garis" yang pas dari kecocokan binomial negatif pada grafik yang sama.) Perhatikan bias besar yang terbukti untuk kecocokan binomial negatif pada skala log. Model linear yang kuat kurang bias pada skala ini, jika kita mengasumsikan distribusi binomial negatif untuk perhitungan. Model linier yang cocok akan tidak bias di bawah asumsi teori normal klasik. Saya menemukan bias yang mengejutkan ketika saya pertama kali membuat apa yang pada dasarnya adalah grafik di atas! Kurva akan lebih cocok dengan data, tetapi perbedaannya ada dalam batas-batas standar variabilitas statistik yang biasa. Model linier yang kuat mampu melakukan pekerjaan yang buruk untuk diperhitungkan pada skala rendah.
Catatan --- Studi dengan Data RNA-Seq: Perbandingan dua gaya model telah menarik untuk analisis data jumlah dari eksperimen ekspresi gen. Makalah berikut membandingkan penggunaan model linear yang kuat, bekerja dengan log (hitung +1), dengan penggunaan cocok binomial negatif (seperti pada tepi paket BioconductorR ). Sebagian besar hitungan, dalam aplikasi RNA-Seq yang terutama dalam pikiran, cukup besar sehingga model log-linear yang ditimbang sesuai sangat cocok untuk bekerja.
Hukum, CW, Chen, Y, Shi, W, Smyth, GK (2014). Voom: bobot presisi membuka alat analisis model linier untuk jumlah baca RNA-seq. Genome Biology 15, R29. http://genomebiology.com/2014/15/2/R29
NB juga makalah terbaru:
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). Berapa banyak ulangan biologis yang diperlukan dalam percobaan RNA-seq dan alat ekspresi diferensial mana yang harus Anda gunakan? RNA
http://www.rnajournal.org/cgi/doi/10.1261/rna.053959.115
Sangat menarik bahwa model linier cocok menggunakan paket limma (seperti edgeR , dari kelompok WEHI) berdiri sangat baik (dalam arti menunjukkan sedikit bukti bias), relatif terhadap hasil dengan banyak ulangan, karena jumlah ulangan adalah berkurang.
Kode R untuk grafik di atas:
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"))