Theo cách thông thường:
p <- predict(mod, newdata, type = "link", se.fit = TRUE)
Sau đó lưu ý rằng p
có chứa một thành phần $se.fit
có lỗi tiêu chuẩn của các dự đoán cho các quan sát trong newdata
. Sau đó, bạn có thể hình thành CI bằng cách nhân SE với một giá trị phù hợp với mức độ mong muốn của bạn. Ví dụ: khoảng tin cậy xấp xỉ 95% được hình thành như sau:
upr <- p$fit + (2 * p$se.fit)
lwr <- p$fit - (2 * p$se.fit)
t
Lưu ý rằng tôi sử dụng type = "link"
như bạn không nói nếu bạn có GAM hoặc chỉ là AM. Trong GAM, bạn cần hình thành khoảng tin cậy theo thang đo của bộ dự báo tuyến tính và sau đó chuyển đổi nó thành thang đo của phản ứng bằng cách áp dụng nghịch đảo của chức năng liên kết:
upr <- mod$family$linkinv(upr)
lwr <- mod$family$linkinv(lwr)
Bây giờ lưu ý rằng đây là những khoảng rất gần đúng. Ngoài ra, các khoảng này là điểm sáng cho các giá trị dự đoán và chúng không tính đến thực tế là lựa chọn độ mịn đã được thực hiện.
Một khoảng tin cậy đồng thời có thể được tính toán thông qua mô phỏng từ phân phối sau của các tham số. Tôi có một ví dụ về điều đó trên blog của tôi .
Nếu bạn muốn một khoảng tin cậy không có điều kiện dựa trên các tham số làm mịn (tức là một tham số có tính đến mà chúng ta không biết, nhưng thay vào đó ước tính, các giá trị của các tham số độ mịn), sau đó thêm unconditional = TRUE
vào predict()
cuộc gọi.
Ngoài ra, nếu bạn không muốn tự làm điều này, hãy lưu ý rằng các phiên bản mới hơn của mgcv có plot.gam()
chức năng trả về một đối tượng với tất cả dữ liệu được sử dụng để tạo ra các lô của độ mịn và khoảng tin cậy của chúng. Bạn chỉ có thể lưu đầu ra từ plot.gam()
trong một obj
obj <- plot(model, ....)
và sau đó kiểm tra obj
, đó là một danh sách với một thành phần trên mỗi mịn. Thêm seWithMean = TRUE
vào plot()
cuộc gọi để có được khoảng tin cậy không có điều kiện theo tham số độ mịn.