Pertanyaan berikut didasarkan pada diskusi yang ditemukan di halaman ini . Diberikan variabel respons y
, variabel penjelas kontinu x
dan faktor fac
, dimungkinkan untuk mendefinisikan Model Aditif Umum (GAM) dengan interaksi antara x
dan fac
menggunakan argumen by=
. Menurut file bantuan ?gam.models
dalam paket R mgcv
, ini dapat dilakukan sebagai berikut:
gam1 <- gam(y ~ fac +s(x, by = fac), ...)
@ GavinSimpson di sini menyarankan pendekatan yang berbeda:
gam2 <- gam(y ~ fac +s(x) +s(x, by = fac, m=1), ...)
Saya telah bermain-main dengan model ketiga:
gam3 <- gam(y ~ s(x, by = fac), ...)
Pertanyaan utama saya adalah: apakah beberapa model ini salah, atau mereka berbeda? Dalam kasus terakhir, apa perbedaan mereka? Berdasarkan contoh yang akan saya bahas di bawah ini saya pikir saya bisa memahami beberapa perbedaan mereka, tetapi saya masih kehilangan sesuatu.
Sebagai contoh saya akan menggunakan dataset dengan spektrum warna untuk bunga dari dua spesies tanaman berbeda yang diukur di lokasi yang berbeda.
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)
Untuk kejelasan, setiap baris pada gambar di atas mewakili spektrum warna rata-rata yang diprediksi untuk setiap lokasi dengan bentuk GAM terpisah density~s(wl)
berdasarkan sampel ~ 10 bunga. Daerah abu-abu mewakili 95% CI untuk setiap GAM.
Tujuan akhir saya adalah untuk memodelkan efek (potensial interaktif) dari Taxon
dan panjang gelombang wl
pada reflektansi (disebut density
dalam kode dan dataset) sambil menghitung Locality
sebagai efek acak dalam GAM efek campuran. Untuk saat ini saya tidak akan menambahkan bagian efek campuran ke piring saya, yang sudah cukup penuh dengan mencoba memahami cara memodelkan interaksi.
Saya akan mulai dengan yang paling sederhana dari tiga GAM interaktif:
gam.interaction0 <- gam(density ~ s(wl, by = Taxon), data = df)
# common intercept, different slopes
plot(gam.interaction0, pages=1)
summary(gam.interaction0)
Menghasilkan:
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
Bagian parametrik sama untuk kedua spesies, tetapi spline yang berbeda dipasang untuk masing-masing spesies. Agak membingungkan untuk memiliki bagian parametrik dalam ringkasan GAM, yang non-parametrik. @IsabellaGhement menjelaskan:
Jika Anda melihat plot perkiraan efek halus (smooths) yang sesuai dengan model pertama Anda, Anda akan melihat bahwa mereka berpusat sekitar nol. Jadi, Anda perlu 'menggeser' kelancaran ke atas (jika pencegatan diperkirakan positif) atau turun (jika pencegatan diperkirakan negatif) untuk mendapatkan fungsi kelancaran yang Anda pikir Anda perkirakan. Dengan kata lain, Anda perlu menambahkan perkiraan intersep ke smooth untuk mendapatkan apa yang Anda inginkan. Untuk model pertama Anda, 'shift' diasumsikan sama untuk kedua smooths.
Bergerak:
gam.interaction1 <- gam(density ~ Taxon +s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction1,pages=1)
summary(gam.interaction1)
Memberi:
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
Sekarang, setiap spesies juga memiliki perkiraan parametrik sendiri.
Model selanjutnya adalah model yang sulit saya pahami:
gam.interaction2 <- gam(density ~ Taxon + s(wl) + s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction2, pages=1)
Saya tidak memiliki gagasan yang jelas tentang apa yang digambarkan oleh grafik ini.
summary(gam.interaction2)
Memberi:
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
Bagian parametrik gam.interaction2
hampir sama dengan untuk gam.interaction1
, tetapi sekarang ada tiga perkiraan untuk istilah yang lancar, yang tidak dapat saya artikan.
Terima kasih sebelumnya kepada siapa saja yang mau meluangkan waktu untuk membantu saya memahami perbedaan dalam ketiga model ini.
gam1
plus sesuatu untuk SampleID
efek plus Anda perlu melakukan sesuatu tentang masalah varian yang tidak konstan; Data ini sepertinya tidak terdistribusi secara Gaussian karena batas bawah.