Câu hỏi sau đây được xây dựng trên các cuộc thảo luận được tìm thấy trên trang này . Đưa ra một biến trả lời y
, một biến giải thích liên tục x
và một yếu tố fac
, có thể định nghĩa Mô hình phụ gia chung (GAM) với sự tương tác giữa x
và fac
sử dụng đối số by=
. Theo tệp trợ giúp ?gam.models
trong gói R mgcv
, điều này có thể được thực hiện như sau:
gam1 <- gam(y ~ fac +s(x, by = fac), ...)
@GavinSimpson ở đây gợi ý một cách tiếp cận khác:
gam2 <- gam(y ~ fac +s(x) +s(x, by = fac, m=1), ...)
Tôi đã chơi xung quanh với một mô hình thứ ba:
gam3 <- gam(y ~ s(x, by = fac), ...)
Câu hỏi chính của tôi là: một số trong những mô hình này chỉ sai, hoặc chúng chỉ đơn giản là khác nhau? Trong trường hợp sau, sự khác biệt của họ là gì? Dựa trên ví dụ mà tôi sẽ thảo luận dưới đây, tôi nghĩ rằng tôi có thể hiểu được một số khác biệt của họ, nhưng tôi vẫn còn thiếu một cái gì đó.
Lấy ví dụ tôi sẽ sử dụng bộ dữ liệu với phổ màu cho hoa của hai loài thực vật khác nhau được đo tại các địa điểm khác nhau.
rm(list=ls())
# install.packages("RCurl")
library(RCurl) # allows accessing data from URL
df <- read.delim(text=getURL("https://raw.githubusercontent.com/marcoplebani85/datasets/master/flower_color_spectra.txt"))
library(mgcv)
Để rõ ràng, mỗi dòng trong hình trên biểu thị phổ màu trung bình được dự đoán cho từng vị trí với dạng GAM riêng biệt density~s(wl)
dựa trên các mẫu ~ 10 bông hoa. Các khu vực màu xám đại diện cho 95% CI cho mỗi GAM.
Mục tiêu cuối cùng của tôi là mô hình hóa hiệu ứng (có khả năng tương tác) của Taxon
bước sóng và độ wl
phản xạ (được gọi là density
trong mã và tập dữ liệu) trong khi chiếm Locality
một hiệu ứng ngẫu nhiên trong GAM hiệu ứng hỗn hợp. Hiện tại tôi sẽ không thêm phần hiệu ứng hỗn hợp vào đĩa của mình, phần này đã đủ đầy với việc cố gắng hiểu cách mô hình hóa các tương tác.
Tôi sẽ bắt đầu với cách đơn giản nhất trong ba GAM tương tác:
gam.interaction0 <- gam(density ~ s(wl, by = Taxon), data = df)
# common intercept, different slopes
plot(gam.interaction0, pages=1)
summary(gam.interaction0)
Sản xuất:
Family: gaussian
Link function: identity
Formula:
density ~ s(wl, by = Taxon)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.3490 0.1693 167.4 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(wl):TaxonSpeciesA 8.938 8.999 884.3 <2e-16 ***
s(wl):TaxonSpeciesB 8.838 8.992 325.5 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.523 Deviance explained = 52.4%
GCV = 284.96 Scale est. = 284.42 n = 9918
Phần tham số là giống nhau cho cả hai loài, nhưng các spline khác nhau được trang bị cho mỗi loài. Có một chút khó hiểu khi có một phần tham số trong bản tóm tắt của GAM, vốn không phải là tham số. @IsabellaGhement giải thích:
Nếu bạn nhìn vào các ô của các hiệu ứng mịn ước tính (độ mịn) tương ứng với mô hình đầu tiên của bạn, bạn sẽ nhận thấy rằng chúng nằm ở giữa không. Vì vậy, bạn cần phải 'thay đổi' những lần làm mịn đó (nếu đánh chặn ước tính là dương) hoặc xuống (nếu đánh chặn ước tính là âm) để có được các chức năng trơn tru mà bạn nghĩ là bạn đang ước tính. Nói cách khác, bạn cần thêm các đánh chặn ước tính vào độ mượt để đạt được những gì bạn thực sự muốn. Đối với mô hình đầu tiên của bạn, 'ca' được coi là giống nhau cho cả hai lần làm mịn.
Tiếp tục:
gam.interaction1 <- gam(density ~ Taxon +s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction1,pages=1)
summary(gam.interaction1)
Cung cấp:
Family: gaussian
Link function: identity
Formula:
density ~ Taxon + s(wl, by = Taxon, m = 1)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 40.3132 0.1482 272.0 <2e-16 ***
TaxonSpeciesB -26.0221 0.2186 -119.1 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(wl):TaxonSpeciesA 7.978 8 2390 <2e-16 ***
s(wl):TaxonSpeciesB 7.965 8 879 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.803 Deviance explained = 80.3%
GCV = 117.89 Scale est. = 117.68 n = 9918
Bây giờ, mỗi loài cũng có ước tính tham số riêng.
Mô hình tiếp theo là mô hình mà tôi gặp khó khăn khi hiểu:
gam.interaction2 <- gam(density ~ Taxon + s(wl) + s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction2, pages=1)
Tôi không có ý tưởng rõ ràng về những gì các biểu đồ này đại diện.
summary(gam.interaction2)
Cung cấp:
Family: gaussian
Link function: identity
Formula:
density ~ Taxon + s(wl) + s(wl, by = Taxon, m = 1)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 40.3132 0.1463 275.6 <2e-16 ***
TaxonSpeciesB -26.0221 0.2157 -120.6 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(wl) 8.940 8.994 30.06 <2e-16 ***
s(wl):TaxonSpeciesA 8.001 8.000 11.61 <2e-16 ***
s(wl):TaxonSpeciesB 8.001 8.000 19.59 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.808 Deviance explained = 80.8%
GCV = 114.96 Scale est. = 114.65 n = 9918
Phần tham số của gam.interaction2
tương tự như đối với gam.interaction1
, nhưng bây giờ có ba ước tính cho các thuật ngữ trơn tru, mà tôi không thể giải thích.
Cảm ơn trước bất cứ ai sẽ dành thời gian để giúp tôi hiểu sự khác biệt trong ba mô hình.
gam1
cộng với một cái gì đó cho SampleID
hiệu quả cộng với bạn cần phải làm gì đó về vấn đề phương sai không liên tục; Những dữ liệu này dường như không được phân phối theo điều kiện Gaussian vì giới hạn dưới.