次の質問は、このページでの議論に基づいています。応答変数y
、連続説明変数x
、および因子fac
を指定するx
とfac
、引数間の相互作用を使用して、一般的な加法モデル(GAM)を定義できますby=
。Rパッケージのヘルプファイル ?gam.models
によるとmgcv
、これは次のように実行できます。
gam1 <- gam(y ~ fac +s(x, by = fac), ...)
ここで@GavinSimpsonは別のアプローチを提案しています。
gam2 <- gam(y ~ fac +s(x) +s(x, by = fac, m=1), ...)
私は3番目のモデルで遊んでいます:
gam3 <- gam(y ~ s(x, by = fac), ...)
私の主な質問は次のとおりです。これらのモデルのいくつかは間違っているのですか、それとも単に異なるのですか?後者の場合、それらの違いは何ですか? 以下で説明する例に基づいて、それらの違いのいくつかは理解できたと思いますが、それでも何か不足しています。
例として、異なる場所で測定された2つの異なる植物種の花の色スペクトルを持つデータセットを使用します。
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)
わかりやすくするために、上の図の各線は、density~s(wl)
約10の花のサンプルに基づいたフォームの個別のGAMを使用して、各場所で予測された平均カラースペクトルを表しています。灰色の領域は、各GAMの95%CIを表します。
私の最終的な目標は、混合効果GAMのランダム効果として説明しながら、(コードとデータセットで参照される)反射率の(潜在的にインタラクティブな)効果Taxon
と波長のモデル化です。今のところ、プレートにミックスエフェクトパーツを追加しません。これは、相互作用をモデル化する方法を理解するのに十分な量です。wl
density
Locality
3つのインタラクティブなGAMのうち、最も単純なものから始めます。
gam.interaction0 <- gam(density ~ s(wl, by = Taxon), data = df)
# common intercept, different slopes
plot(gam.interaction0, pages=1)
summary(gam.interaction0)
生成する:
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
パラメトリックパーツは両方の種で同じですが、種ごとに異なるスプラインが適合されます。ノンパラメトリックであるGAMの要約にパラメトリック部分を含めることは少し混乱します。@IsabellaGhementは説明します:
最初のモデルに対応する推定された滑らかな効果(滑らかさ)のプロットを見ると、それらがほぼゼロに集中していることがわかります。したがって、推定したと思われる滑らかな関数を取得するには、これらの平滑化を「シフト」して(推定切片が正の場合)または下に(推定切片が負の場合)する必要があります。言い換えれば、あなたが本当に望んでいるものを得るには、推定された切片をスムースに追加する必要があります。最初のモデルでは、「シフト」は両方のスムースで同じであると想定されています。
次に進む:
gam.interaction1 <- gam(density ~ Taxon +s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction1,pages=1)
summary(gam.interaction1)
与える:
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
現在、各種には独自のパラメトリック推定があります。
次のモデルは、私が理解できない問題です。
gam.interaction2 <- gam(density ~ Taxon + s(wl) + s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction2, pages=1)
これらのグラフが何を表しているのか私には明確な考えがありません。
summary(gam.interaction2)
与える:
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
のパラメトリック部分gam.interaction2
は、の場合とほぼ同じですがgam.interaction1
、スムーズな項には3つの推定値があり、これを解釈することはできません。
3つのモデルの違いを理解するのに時間を割いてくださる方に感謝します。
gam1
SampleID