กระดาษ O'Hara และ Kotze (วิธีการทางนิเวศวิทยาและวิวัฒนาการ 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
สเกลที่พารามิเตอร์มีการประมาณนั้นสำคัญมาก!
λ
โปรดทราบว่าการวินิจฉัยมาตรฐานจะทำงานได้ดีขึ้นในระดับของบันทึก (x + c) ตัวเลือกของ c อาจไม่สำคัญเกินไป บ่อยครั้งที่ 0.5 หรือ 1.0 เหมาะสม นอกจากนี้ยังเป็นจุดเริ่มต้นที่ดีกว่าสำหรับการตรวจสอบการแปลง Box-Cox หรือตัวแปร Yeo-Johnson ของ Box-Cox [Yeo, I. และ Johnson, R. (2000)] ดูหน้าช่วยเหลือเพิ่มเติมสำหรับ powerTransform () ในแพ็คเกจรถยนต์ของ R แพ็คเกจ gamlss ของ R ทำให้สามารถติดตั้ง binomial ประเภท I เชิงลบ (ความหลากหลายทั่วไป) หรือ II หรือการกระจายอื่น ๆ ที่จำลองการกระจายตัวรวมถึงค่าเฉลี่ยด้วยลิงก์การแปลงพลังงานของ 0 (= บันทึกคือลิงก์บันทึก) หรือมากกว่า . อาจจะไม่เข้ากันพอดี
ตัวอย่าง: ข้อมูลการเสียชีวิตเทียบกับความเสียหายพื้นฐาน
มีไว้สำหรับพายุเฮอริเคนในมหาสมุทรแอตแลนติกที่มีชื่อว่า ข้อมูลมีอยู่ (ชื่อhurricNamed ) จากแพคเกจ DAAG รุ่นล่าสุดสำหรับ R หน้าความช่วยเหลือสำหรับข้อมูลมีรายละเอียด
กราฟเปรียบเทียบเส้นประกอบที่ได้รับโดยใช้ตัวแบบเชิงเส้นที่มีความแข็งแรงโดยมีส่วนโค้งที่ได้จากการแปลงความพอดีแบบทวินามลบด้วยการเชื่อมโยงการบันทึกลงในมาตราส่วนการบันทึก (นับ + 1) ที่ใช้สำหรับแกน y บนกราฟ (โปรดทราบว่าเราต้องใช้บางสิ่งบางอย่างที่คล้ายกับมาตราส่วนบันทึก (นับ + c) ด้วยค่าบวกเพื่อแสดงคะแนนและ "เส้น" ที่พอดีจากลบทวินามแบบพอดีในกราฟเดียวกัน) หมายเหตุอคติขนาดใหญ่ที่ ชัดเจนสำหรับขนาดทวินามลบในระดับบันทึก แบบจำลองเชิงเส้นที่มีความทนทานนั้นมีความเอนเอียงน้อยกว่ามากในระดับนี้หากมีการสันนิษฐานว่ามีการแจกแจงแบบทวินามลบสำหรับการนับ แบบจำลองเชิงเส้นจะไม่ลำเอียงภายใต้สมมติฐานทฤษฎีคลาสสิกปกติ ฉันพบอคติที่น่าประหลาดใจเมื่อฉันสร้างครั้งแรกสิ่งที่เป็นกราฟด้านบน! เส้นโค้งจะพอดีกับข้อมูลที่ดีกว่า แต่ความแตกต่างอยู่ภายในขอบเขตของมาตรฐานปกติของความแปรปรวนทางสถิติ แบบจำลองเชิงเส้นที่มีความทนทานนั้นทำงานได้ไม่ดีสำหรับการนับที่ระดับต่ำสุดของเครื่องชั่ง
หมายเหตุ --- การศึกษากับข้อมูล RNA-Seq:การเปรียบเทียบทั้งสองรูปแบบของแบบจำลองได้รับความสนใจในการวิเคราะห์ข้อมูลนับจากการทดลองการแสดงออกของยีน บทความต่อไปนี้เปรียบเทียบการใช้โมเดลเชิงเส้นที่มีประสิทธิภาพการทำงานกับบันทึก (นับ + 1) กับการใช้ทวินามลบที่พอดี (เช่นเดียวกับในแพคเกจ Bioconductor edgeR ) การนับส่วนใหญ่ในแอปพลิเคชัน RNA-Seq ที่เป็นหลักในใจมีขนาดใหญ่พอที่โมเดลการบันทึกเชิงเส้นที่มีน้ำหนักที่เหมาะสมจะทำงานได้ดีมาก
กฎหมาย, CW, เฉิน, Y, Shi, W, Smyth, GK (2014) Voom: ตุ้มน้ำหนักที่แม่นยำปลดล็อคเครื่องมือวิเคราะห์แบบจำลองเชิงเส้นสำหรับจำนวนการอ่าน RNA-seq ชีววิทยาจีโนม 15, R29 http://genomebiology.com/2014/15/2/R29
NB ยังกระดาษล่าสุด:
Schurch NJ, Schofield P, Gierliński M, Cole C, Sherstnev A, Singh V, Wrobel N, Gharbi K, Simpson GG, โอเว่น - ฮิวจ์ T, Blaxter M, Barton GJ (2016) มีการจำลองแบบทางชีวภาพจำนวนเท่าไรในการทดลอง RNA-seq และเครื่องมือนิพจน์ส่วนต่างที่คุณควรใช้ RNA
http://www.rnajournal.org/cgi/doi/10.1261/rna.053959.115
เป็นที่น่าสนใจที่โมเดลเชิงเส้นเหมาะสมกับการใช้แพ็คเกจlimma (เช่นedgeRจากกลุ่ม WEHI) ดีขึ้นอย่างมาก (ในแง่ของการแสดงหลักฐานเล็กน้อยของอคติ) เทียบกับผลลัพธ์ที่มีจำนวนซ้ำจำนวนมาก ที่ลดลง.
รหัส 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"))