Bài viết của O'Hara và Kotze (Phương pháp trong Sinh thái học và Tiến hóa 1: 118 Tiết22) không phải là điểm khởi đầu tốt để thảo luận. Mối quan tâm nghiêm trọng nhất của tôi là yêu cầu trong điểm 4 của bản tóm tắt:
Chúng tôi thấy rằng các biến đổi thực hiện kém, ngoại trừ. . .. Các mô hình nhị phân và nhị phân âm ... [cho thấy] ít sai lệch.
λθλ
λ
Mã R sau đây minh họa điểm:
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
Hay là thử
log(mean(x+.5))
[1] 0.9135269
mean(log(x+.5))
[1] 0.3270837
Thang đo mà các tham số được ước tính là một vấn đề lớn!
λ
Lưu ý rằng chẩn đoán chuẩn hoạt động tốt hơn trên thang đo log (x + c). Sự lựa chọn của c có thể không quá quan trọng; thường 0,5 hoặc 1,0 có ý nghĩa. Ngoài ra, đây là điểm khởi đầu tốt hơn để nghiên cứu các biến đổi Box-Cox, hoặc biến thể Yeo-Johnson của Box-Cox. [Yeo, I. và Johnson, R. (2000)]. Xem thêm trang trợ giúp về powerTransform () trong gói xe của R. Gói gamlss của R làm cho nó có thể phù hợp với các loại nhị thức âm I (giống phổ biến) hoặc II hoặc các phân phối khác mô hình phân tán cũng như trung bình, với các liên kết biến đổi công suất từ 0 (= log, tức là liên kết nhật ký) trở lên . Phù hợp có thể không luôn luôn hội tụ.
Ví dụ:
Dữ liệu về Tử vong và Cơ sở Thiệt hại dành cho các cơn bão Đại Tây Dương có tên đã đến lục địa Hoa Kỳ. Dữ liệu có sẵn (tên HurricNamed ) từ một bản phát hành gần đây của gói DAAG cho R. Trang trợ giúp cho dữ liệu có chi tiết.
Biểu đồ so sánh một đường được trang bị thu được bằng cách sử dụng mô hình tuyến tính mạnh mẽ, với đường cong thu được bằng cách chuyển đổi độ khớp nhị thức âm với liên kết nhật ký lên thang đo log (đếm + 1) được sử dụng cho trục y trên biểu đồ. (Lưu ý rằng người ta phải sử dụng một cái gì đó gần giống với thang đo log (đếm + c), với c dương, để hiển thị các điểm và "đường" được trang bị từ khớp nhị thức âm trên cùng một biểu đồ.) Lưu ý độ lệch lớn hiển nhiên cho sự phù hợp nhị thức âm trên thang đo log. Mô hình tuyến tính mạnh mẽ phù hợp ít sai lệch hơn trên thang đo này, nếu người ta giả sử phân phối nhị thức âm cho các số đếm. Một mô hình tuyến tính phù hợp sẽ không thiên vị theo các giả định lý thuyết thông thường cổ điển. Tôi đã tìm thấy sự thiên vị đáng kinh ngạc khi lần đầu tiên tôi tạo ra những gì thực chất là biểu đồ trên! Một đường cong sẽ phù hợp với dữ liệu tốt hơn, nhưng sự khác biệt nằm trong giới hạn của các tiêu chuẩn thông thường về tính biến thiên thống kê. Mô hình tuyến tính mạnh mẽ phù hợp làm một công việc kém cho số đếm ở mức thấp của thang đo.
Lưu ý --- Các nghiên cứu với Dữ liệu RNA-Seq: So sánh hai kiểu mô hình đã được quan tâm để phân tích dữ liệu đếm từ các thí nghiệm biểu hiện gen. Bài viết sau đây so sánh việc sử dụng mô hình tuyến tính mạnh mẽ, hoạt động với log (đếm + 1), với việc sử dụng khớp nhị thức âm (như trong cạnhR của gói Bioconductor ). Hầu hết các tính toán, trong ứng dụng RNA-Seq chủ yếu trong tâm trí, đủ lớn để mô hình log-linear cân nặng phù hợp hoạt động rất tốt.
Luật, CW, Chen, Y, Shi, W, Smyth, GK (2014). Voom: trọng số chính xác mở khóa các công cụ phân tích mô hình tuyến tính cho số lần đọc RNA-seq. Sinh học bộ gen 15, R29. http://genomebiology.com/2014/15/2/R29
NB cũng là bài báo gần đây:
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). Cần bao nhiêu bản sao sinh học trong một thí nghiệm RNA-seq và bạn nên sử dụng công cụ biểu hiện khác biệt nào? RNA
http://www.rnajournal.org/cgi/doi/10.1261/rna.053959.115
Điều thú vị là mô hình tuyến tính phù hợp với việc sử dụng gói limma (như edgeR , từ nhóm WEHI) đứng lên rất tốt (theo nghĩa hiển thị ít bằng chứng về sai lệch), liên quan đến kết quả với nhiều lần lặp lại, vì số lần lặp lại là giảm.
Mã R cho biểu đồ trên:
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"))