Tôi có thể sử dụng bootstrapping để ước tính độ không đảm bảo trong giá trị tối đa của GAM không?


8

Tôi có dữ liệu từ một thí nghiệm trong đó tôi xem sự phát triển của sinh khối tảo như là một chức năng của nồng độ của một chất dinh dưỡng. Mối quan hệ giữa sinh khối (biến phản ứng) và nồng độ (biến giải thích) ít nhiều không đồng nhất, với "tối ưu" rõ ràng dọc theo trục x nơi có đỉnh sinh khối.

Tôi đã trang bị mô hình phụ gia tổng quát (GAM) cho dữ liệu và quan tâm đến nồng độ (giá trị trên trục x) mang lại sinh khối cao nhất (nghĩa là tương ứng với giá trị y cao nhất). Tôi có ba bản sao sinh khối từ 8 nồng độ dinh dưỡng khác nhau (tổng cộng 24 quan sát). Ngoài việc chỉ biết mức độ tập trung của các đỉnh GAM, tôi muốn có được một số ước tính không chắc chắn về vị trí tối ưu. Đây có phải là một cách tiếp cận hợp lệ để sử dụng bootstrapping ở đây?

Tôi đã thử các thủ tục sau đây:

  1. Đối với mỗi tám nồng độ chất dinh dưỡng, mẫu thay thế từ ba lần lặp lại để tôi có được một tập dữ liệu mới với 24 quan sát, nhưng trong đó dữ liệu từ cùng một bản sao có thể được sử dụng nhiều lần.

  2. Điều chỉnh GAM cho dữ liệu và ước tính giá trị x trong đó hàm đạt đỉnh.

  3. Lặp lại một số lượng lớn thời gian, lưu ước tính mỗi lần và tính độ lệch chuẩn (hoặc 2,5 và 97,5 phần trăm).

Đây là một cách tiếp cận hợp lệ hay tôi đang gặp rắc rối ở đây?

Câu trả lời:


10

Một cách tiếp cận khác có thể được sử dụng cho các GAM được trang bị bằng phần mềm mgcv của Simon Wood cho R là thực hiện suy luận sau từ GAM được trang bị cho tính năng quan tâm. Về cơ bản, điều này liên quan đến việc mô phỏng từ phân phối sau của các tham số của mô hình được trang bị, dự đoán các giá trị của đáp ứng trên một lưới mịnx địa điểm, tìm kiếm x trong đó đường cong được trang bị có giá trị tối đa của nó, lặp lại cho nhiều mô hình mô phỏng và tính toán độ tin cậy cho vị trí của cực đại là các lượng tử phân phối tối ưu từ các mô hình mô phỏng.

Thịt từ những gì tôi trình bày dưới đây được lấy từ trang 4 của ghi chú khóa học của Simon Wood (pdf)

Để có một cái gì đó giống với một ví dụ sinh khối, tôi sẽ mô phỏng sự phong phú của một loài dọc theo một độ dốc bằng cách sử dụng gói coenocliner của tôi .

library("coenocliner")
A0    <- 9 * 10 # max abundance
m     <- 45     # location on gradient of modal abundance
r     <- 6 * 10 # species range of occurence on gradient
alpha <- 1.5    # shape parameter
gamma <- 0.5    # shape parameter
locs  <- 1:100  # gradient locations
pars  <- list(m = m, r = r, alpha = alpha,
              gamma = gamma, A0 = A0) # species parameters, in list form
set.seed(1)
mu <- coenocline(locs, responseModel = "beta", params = pars, expectation = FALSE)

Phù hợp với GAM

library("mgcv")
m <- gam(mu ~ s(locs), method = "REML", family = "poisson")

... dự đoán về một lưới tốt trong phạm vi x( locs) ...

p  <- data.frame(locs = seq(1, 100, length = 5000))
pp <- predict(m, newdata = p, type = "response")

và trực quan hóa chức năng được trang bị và dữ liệu

plot(mu ~ locs)
lines(pp ~ locs, data = p, col = "red")

Điều này tạo ra

nhập mô tả hình ảnh ở đây

5000 vị trí dự đoán có thể là quá mức cần thiết ở đây và chắc chắn cho cốt truyện, nhưng tùy thuộc vào chức năng được trang bị trong trường hợp sử dụng của bạn, bạn có thể cần một lưới tốt để đến gần mức tối đa của đường cong được trang bị.

Bây giờ chúng ta có thể mô phỏng từ phía sau của mô hình. Đầu tiên chúng ta có đượcXpma trận; ma trận, một khi được nhân với hệ số mô hình sẽ đưa ra dự đoán từ mô hình tại các vị trí mớip

Xp <- predict(m, p, type="lpmatrix") ## map coefs to fitted curves

Tiếp theo, chúng tôi thu thập các hệ số mô hình được trang bị và ma trận hiệp phương sai (Bayes) của chúng

beta <- coef(m)
Vb   <- vcov(m) ## posterior mean and cov of coefs

Các hệ số là một bình thường đa biến với vectơ trung bình betavà ma trận hiệp phương sai Vb. Do đó, chúng ta có thể mô phỏng từ hệ số mới thông thường đa biến này cho các mô hình phù hợp với mô hình được trang bị nhưng khám phá sự không chắc chắn trong mô hình được trang bị. Ở đây chúng tôi tạo ra 10000 ( n) `mô hình mô phỏng

n <- 10000
library("MASS") ## for mvrnorm
set.seed(10)
mrand <- mvrnorm(n, beta, Vb) ## simulate n rep coef vectors from posterior

Bây giờ chúng ta có thể tạo dự đoán cho các nmô hình mô phỏng, chuyển đổi từ thang đo của dự báo tuyến tính sang thang đo đáp ứng bằng cách áp dụng nghịch đảo của hàm liên kết ( ilink()) và sau đó tính toánxgiá trị (giá trị của p$locs) tại điểm cực đại của đường cong được trang bị

opt <- rep(NA, n)
ilink <- family(m)$linkinv
for (i in seq_len(n)) { 
  pred   <- ilink(Xp %*% mrand[i, ])
  opt[i] <- p$locs[which.max(pred)]
}

Bây giờ chúng tôi tính toán khoảng tin cậy cho tối ưu bằng cách sử dụng các lượng tử xác suất của phân phối 10.000 tối ưu, một cho mỗi mô hình mô phỏng

ci <- quantile(opt, c(.025,.975)) ## get 95% CI

Đối với ví dụ này, chúng tôi có:

> ci
    2.5%    97.5% 
39.06321 52.39128

Chúng ta có thể thêm thông tin này vào cốt truyện trước đó:

plot(mu ~ locs)
abline(v = p$locs[which.max(pp)], lty = "dashed", col = "grey")
lines(pp ~ locs, data = p, col = "red")
lines(y = rep(0,2), x = ci, col = "blue")
points(y = 0, x = p$locs[which.max(pp)], pch = 16, col = "blue")

sản xuất

nhập mô tả hình ảnh ở đây

Như chúng ta mong đợi được cung cấp dữ liệu / quan sát, khoảng thời gian trên tối ưu được trang bị khá bất đối xứng.

Slide 5 trong ghi chú khóa học của Simon cho thấy lý do tại sao phương pháp này có thể được ưa thích hơn để bootstrapping. Ưu điểm của mô phỏng sau là nhanh chóng - GAM khởi động chậm. Hai vấn đề khác với bootstrapping là (lấy từ ghi chú của Simon!)

  1. Đối với việc khởi động tham số tham số độ lệch làm mịn gây ra các vấn đề, mô hình được mô phỏng từ bị sai lệch và sự phù hợp với các mẫu sẽ còn sai lệch hơn.
  2. Đối với việc 'lấy mẫu lại trường hợp' không tham số ', sự hiện diện của các bản sao sao chép của cùng một dữ liệu gây ra sự thiếu sót, đặc biệt là với lựa chọn độ mịn dựa trên GCV.

Cần lưu ý rằng mô phỏng sau được thực hiện ở đây là có điều kiện dựa trên các tham số độ mịn đã chọn cho mô hình / spline. Điều này có thể được tính đến, nhưng các ghi chú của Simon cho thấy điều này tạo ra sự khác biệt nhỏ nếu bạn thực sự gặp rắc rối khi thực hiện nó. (vì vậy tôi đã không ở đây ...)


1
Tuyệt quá! Đây chính xác là những gì tôi đang tìm kiếm, sẽ thử nó trên dữ liệu của tôi!
Jan-Erik Thrane

0

"Lặp lại một số lượng lớn thời gian". Tôi nghĩ rằng bạn đang nói rằng bạn có tổng cộng 24 quan sát. Có thể dễ dàng hơn để xác định bằng tay các quan sát dường như là một ngoại lệ và loại bỏ chúng bằng tay. Có thể khó có được đặc tính đầy đủ của mức tối đa với một tập hợp quan sát hạn chế như vậy mà không cần nạo vét các điểm đòn bẩy cao mà bạn có thể có trong tập dữ liệu của mình. Điều tôi đang nói là các điểm đòn bẩy cao (er) là những điểm có thể làm sai lệch kết quả của bạn và chỉ có 24 kết quả cho thấy khả năng cao là có những điểm được chọn; và điều đó sẽ làm lệch phân phối của max.

Tôi không chắc liệu nồng độ bạn theo dõi được xác định bởi các yếu tố môi trường bên ngoài hoặc do hành động của con người. Trong mọi trường hợp, có lẽ, phân tích độ nhạy truyền thống sẽ giúp. Phân tích độ nhạy, trong thuật ngữ của tôi, có nghĩa là thay đổi giá trị của một tính năng bằng x% từ giá trị trong bộ tham số tối ưu. Điều đó sẽ giúp đánh giá, ví dụ, chúng ta sẽ có thêm bao nhiêu sinh khối nếu chúng ta tăng thứ gì đó lên x%

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.