Die folgende Frage baut auf der Diskussion auf dieser Seite auf . Bei einer gegebenen Antwortvariablen y
, einer kontinuierlichen erklärenden Variablen x
und einem Faktor fac
ist es möglich, ein allgemeines additives Modell (GAM) mit einer Interaktion zwischen x
und unter fac
Verwendung des Arguments zu definieren by=
. Gemäß der Hilfedatei ?gam.models
im R-Paket mgcv
kann dies wie folgt erreicht werden:
gam1 <- gam(y ~ fac +s(x, by = fac), ...)
@ GavinSimpson schlägt hier einen anderen Ansatz vor:
gam2 <- gam(y ~ fac +s(x) +s(x, by = fac, m=1), ...)
Ich habe mit einem dritten Modell herumgespielt:
gam3 <- gam(y ~ s(x, by = fac), ...)
Meine Hauptfragen sind: Sind einige dieser Modelle einfach falsch oder sind sie einfach anders? Was sind im letzteren Fall ihre Unterschiede? Anhand des Beispiels, das ich unten diskutieren werde, denke ich, dass ich einige ihrer Unterschiede verstehen könnte, aber mir fehlt immer noch etwas.
Als Beispiel werde ich einen Datensatz mit Farbspektren für Blüten zweier verschiedener Pflanzenarten verwenden, die an verschiedenen Orten gemessen wurden.
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)
Aus Gründen der Klarheit repräsentiert jede Linie in der obigen Abbildung das mittlere Farbspektrum, das für jeden Ort mit einem separaten GAM der Form vorhergesagt wurde, density~s(wl)
basierend auf Proben von ~ 10 Blumen. Die grauen Bereiche repräsentieren 95% CI für jedes GAM.
Mein letztes Ziel ist es, den (potenziell interaktiven) Effekt Taxon
und die Wellenlänge wl
auf das Reflexionsvermögen ( density
im Code und im Datensatz bezeichnet) zu modellieren und dabei Locality
einen zufälligen Effekt in einem GAM mit gemischten Effekten zu berücksichtigen . Im Moment werde ich den Mixed-Effect-Teil nicht zu meiner Platte hinzufügen, die bereits voll genug ist, um zu verstehen, wie Interaktionen modelliert werden.
Ich beginne mit dem einfachsten der drei interaktiven GAMs:
gam.interaction0 <- gam(density ~ s(wl, by = Taxon), data = df)
# common intercept, different slopes
plot(gam.interaction0, pages=1)
summary(gam.interaction0)
Produziert:
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
Der parametrische Teil ist für beide Arten gleich, jedoch werden für jede Art unterschiedliche Splines angepasst. Es ist etwas verwirrend, einen parametrischen Teil in der Zusammenfassung der GAMs zu haben, die nicht parametrisch sind. @IsabellaGhement erklärt:
Wenn Sie sich die Diagramme der geschätzten Glättungseffekte (Glättungen) ansehen, die Ihrem ersten Modell entsprechen, werden Sie feststellen, dass sie um Null zentriert sind. Sie müssen diese Glättungen also nach oben (wenn der geschätzte Achsenabschnitt positiv ist) oder nach unten (wenn der geschätzte Achsenabschnitt negativ ist) verschieben, um die Glättungsfunktionen zu erhalten, von denen Sie dachten, dass Sie sie schätzen. Mit anderen Worten, Sie müssen den geschätzten Abschnitt zu den Glättungen hinzufügen, um das zu erreichen, was Sie wirklich wollen. Für Ihr erstes Modell wird angenommen, dass die Verschiebung für beide Glättungen gleich ist.
Weiter geht's:
gam.interaction1 <- gam(density ~ Taxon +s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction1,pages=1)
summary(gam.interaction1)
Gibt:
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
Jetzt hat jede Art auch ihre eigene parametrische Schätzung.
Das nächste Modell ist das, das ich nicht verstehen kann:
gam.interaction2 <- gam(density ~ Taxon + s(wl) + s(wl, by = Taxon, m=1), data = df)
plot(gam.interaction2, pages=1)
Ich habe keine klare Vorstellung davon, was diese Grafiken darstellen.
summary(gam.interaction2)
Gibt:
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
Der parametrische Teil von gam.interaction2
ist ungefähr der gleiche wie für gam.interaction1
, aber jetzt gibt es drei Schätzungen für glatte Begriffe, die ich nicht interpretieren kann.
Vielen Dank im Voraus an alle, die sich die Zeit nehmen, mir zu helfen, die Unterschiede zwischen den drei Modellen zu verstehen.
gam1
plus etwas für den SampleID
Effekt ist und Sie etwas gegen das Problem der nicht konstanten Varianz tun müssen; Diese Daten scheinen aufgrund der Untergrenze nicht bedingt nach Gauß verteilt zu sein.