Das mgcv
Paket für R
hat zwei Funktionen zum Anpassen von Tensorproduktwechselwirkungen: te()
und ti()
. Ich verstehe die grundlegende Arbeitsteilung zwischen den beiden (Anpassen einer nichtlinearen Wechselwirkung vs. Zerlegen dieser Wechselwirkung in Haupteffekte und eine Wechselwirkung). Was ich nicht verstehe, ist warum te(x1, x2)
und ti(x1) + ti(x2) + ti(x1, x2)
kann (leicht) unterschiedliche Ergebnisse liefern.
MWE (angepasst von ?ti
):
require(mgcv)
test1 <- function(x,z,sx=0.3,sz=0.4) {
x <- x*20
(pi**sx*sz)*(1.2*exp(-(x-0.2)^2/sx^2-(z-0.3)^2/sz^2)+
0.8*exp(-(x-0.7)^2/sx^2-(z-0.8)^2/sz^2))
}
n <- 500
x <- runif(n)/20;z <- runif(n);
xs <- seq(0,1,length=30)/20;zs <- seq(0,1,length=30)
pr <- data.frame(x=rep(xs,30),z=rep(zs,rep(30,30)))
truth <- matrix(test1(pr$x,pr$z),30,30)
f <- test1(x,z)
y <- f + rnorm(n)*0.2
par(mfrow = c(2,2))
# Model with te()
b2 <- gam(y~te(x,z))
vis.gam(b2, plot.type = "contour", color = "terrain", main = "tensor product")
# Model with ti(a) + ti(b) + ti(a,b)
b3 <- gam(y~ ti(x) + ti(z) + ti(x,z))
vis.gam(b3, plot.type = "contour", color = "terrain", main = "tensor anova")
# Scatterplot of prediction b2/b3
plot(predict(b2), predict(b3))
Die Unterschiede sind in diesem Beispiel nicht sehr groß, aber ich frage mich nur, warum es überhaupt Unterschiede geben sollte.
Sitzungsinfo:
> devtools::session_info("mgcv")
Session info
-----------------------------------------------------------------------------------
setting value
version R version 3.3.1 (2016-06-21)
system x86_64, linux-gnu
ui RStudio (0.99.491)
language en_US
collate en_US.UTF-8
tz <NA>
date 2016-09-13
Packages ---------------------------------------------------------------------------------------
package * version date source
lattice 0.20-33 2015-07-14 CRAN (R 3.2.1)
Matrix 1.2-6 2016-05-02 CRAN (R 3.3.0)
mgcv * 1.8-12 2016-03-03 CRAN (R 3.2.3)
nlme * 3.1-128 2016-05-10 CRAN (R 3.3.1)
r
gam
mgcv
conditional-probability
mixed-model
references
bayesian
estimation
conditional-probability
machine-learning
optimization
gradient-descent
r
hypothesis-testing
wilcoxon-mann-whitney
time-series
bayesian
inference
change-point
time-series
anova
repeated-measures
statistical-significance
bayesian
contingency-tables
regression
prediction
quantiles
classification
auc
k-means
scikit-learn
regression
spatial
circular-statistics
t-test
effect-size
cohens-d
r
cross-validation
feature-selection
caret
machine-learning
modeling
python
optimization
frequentist
correlation
sample-size
normalization
group-differences
heteroscedasticity
independence
generalized-least-squares
lme4-nlme
references
mcmc
metropolis-hastings
optimization
r
logistic
feature-selection
separation
clustering
k-means
normal-distribution
gaussian-mixture
kullback-leibler
java
spark-mllib
data-visualization
categorical-data
barplot
hypothesis-testing
statistical-significance
chi-squared
type-i-and-ii-errors
pca
scikit-learn
conditional-expectation
statistical-significance
meta-analysis
intuition
r
time-series
multivariate-analysis
garch
machine-learning
classification
data-mining
missing-data
cart
regression
cross-validation
matrix-decomposition
categorical-data
repeated-measures
chi-squared
assumptions
contingency-tables
prediction
binary-data
trend
test-for-trend
matrix-inverse
anova
categorical-data
regression-coefficients
standard-error
r
distributions
exponential
interarrival-time
copula
log-likelihood
time-series
forecasting
prediction-interval
mean
standard-error
meta-analysis
meta-regression
network-meta-analysis
systematic-review
normal-distribution
multiple-regression
generalized-linear-model
poisson-distribution
poisson-regression
r
sas
cohens-kappa
jvh_ch
quelle
quelle
Antworten:
Dies ist oberflächlich das gleiche Modell, aber in der Praxis gibt es beim Anpassen einige subtile Unterschiede. Ein wichtiger Unterschied besteht darin, dass das Modell mit
ti()
Begriffen im Vergleich zumte()
Modell mehr Glättungsparameter schätzt :und dies liegt daran, dass den beiden Modellen mehr Strafmatrizen zugeordnet sind; Im
ti()
Modell haben wir einen pro "Term" im Vergleich zu nur zwei imte()
Modell, einen pro Randglättung.Ich sehe Modelle mity^=β0+s(x,y) y^=β0+s(x)+s(y) s(x,y) s(x,y)
ti()
als verwendet, um zu entscheiden, ob ich oder möchte . Ich kann diese Modelle nicht vergleichen, wenn ich Begriffe verwende . Sobald ich festgestellt habe, ob ich benötige kann ich das Modell mit anpassen, wenn ich es benötige, oder mit separat für jeden Randeffekt, wenn ich nicht benötige .te()
ti()
te()
s()
Beachten Sie, dass Sie die Modelle durch Anpassen mit
method = "ML"
(oder"REML"
, aber nicht mit "festen" Effekten vergleichen können, es"REML"
sei denn, alle Begriffe sind vollständig bestraft, was standardmäßig nicht der Fall ist, aber sagen würde mitselect = TRUE
).quelle