Hi, I want to use dredge to test several gam submodels including interactions. I tried to find a way in order to keep models with interaction only if the single variables occurring in the interaction are also included. i.e.: for y~s(x0)+s(x1)+ti(x0, x1) I want to keep y ~ s(x0) y ~ s(x1) y ~ s(x0) + s(x1) y ~ s(x0) + s(x1) + ti(x0,x1) and I want to remove y ~ s(x0) + ti(x0,x1) y ~ s(x1) + ti(x0,x1) y ~ ti(x0,x1) I know that I should use the "subset" option of the dredge function. However, I can not find the correct matrix / expression to obtain what I need ! Here a small example. ################ # Create some data (use mgcv example) library(mgcv) set.seed(2) dat <- gamSim(1,n=400,dist="normal",scale=2) # Create the global gam model # Here a model with interaction. Note the use of ti() bt <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+ti(x1,x2), data=dat,method="ML") # Use dredge to test sub-models library(MuMIn) print(modstab <- dredge(bt)) # Here the 11th model include the interaction but do not include the single variables x1 and x2 # ... I want to avoid that kind of model. get.models(modstab, subset = 11) ################ Any help would be appreciated ! Arnaud
Submodel selection using dredge and gam (mgcv)
5 messages · Arnaud Mosnier, Kamil Bartoń
Hi Arnaud,
your question has in fact nothing to do with gam or model selection.
What you are asking is: what is the logical expression that yields True
when AB is False or both A and B are True. Now replace the words with
operators (!AB | (A & B)) and voil?.
See also:
help("Logic", "base")
fortunes::fortune(350)
best,
kamil
On 2014-11-10 21:26, Arnaud Mosnier wrote:
Hi, I want to use dredge to test several gam submodels including interactions. I tried to find a way in order to keep models with interaction only if the single variables occurring in the interaction are also included. i.e.: for y~s(x0)+s(x1)+ti(x0, x1) I want to keep y ~ s(x0) y ~ s(x1) y ~ s(x0) + s(x1) y ~ s(x0) + s(x1) + ti(x0,x1) and I want to remove y ~ s(x0) + ti(x0,x1) y ~ s(x1) + ti(x0,x1) y ~ ti(x0,x1) I know that I should use the "subset" option of the dredge function. However, I can not find the correct matrix / expression to obtain what I need ! Here a small example. ################ # Create some data (use mgcv example) library(mgcv) set.seed(2) dat <- gamSim(1,n=400,dist="normal",scale=2) # Create the global gam model # Here a model with interaction. Note the use of ti() bt <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+ti(x1,x2), data=dat,method="ML") # Use dredge to test sub-models library(MuMIn) print(modstab <- dredge(bt)) # Here the 11th model include the interaction but do not include the single variables x1 and x2 # ... I want to avoid that kind of model. get.models(modstab, subset = 11) ################ Any help would be appreciated ! Arnaud
1 day later
Hi Kamil, Thanks for your answer. In fact, I already tried something with operators in such a way you advise, but it seems more complicated due to the use of the s() and ti() operators. Can you provide a solution for the following example ? library(mgcv) set.seed(2) dat <- gamSim(1,n=400,dist="normal",scale=2) bt <- gam(y~s(x0)+s(x1)+ti(x0,x1), data=dat,method="ML") library(MuMIn) # this does not work dredge(bt, subset = (!(x0,x1) | (x0 & x1))) dredge(bt, subset = (!ti(x0,x1) | (s(x0) & s(x1)))) Cheers, Arnaud 2014-11-11 4:11 GMT-05:00 Kamil Barto? <kamil.barton at o2.pl>:
Hi Arnaud,
your question has in fact nothing to do with gam or model selection. What
you are asking is: what is the logical expression that yields True when AB
is False or both A and B are True. Now replace the words with operators
(!AB | (A & B)) and voil?.
See also:
help("Logic", "base")
fortunes::fortune(350)
best,
kamil
On 2014-11-10 21:26, Arnaud Mosnier wrote:
Hi, I want to use dredge to test several gam submodels including interactions. I tried to find a way in order to keep models with interaction only if the single variables occurring in the interaction are also included. i.e.: for y~s(x0)+s(x1)+ti(x0, x1) I want to keep y ~ s(x0) y ~ s(x1) y ~ s(x0) + s(x1) y ~ s(x0) + s(x1) + ti(x0,x1) and I want to remove y ~ s(x0) + ti(x0,x1) y ~ s(x1) + ti(x0,x1) y ~ ti(x0,x1) I know that I should use the "subset" option of the dredge function. However, I can not find the correct matrix / expression to obtain what I need ! Here a small example. ################ # Create some data (use mgcv example) library(mgcv) set.seed(2) dat <- gamSim(1,n=400,dist="normal",scale=2) # Create the global gam model # Here a model with interaction. Note the use of ti() bt <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+ti(x1,x2), data=dat,method="ML") # Use dredge to test sub-models library(MuMIn) print(modstab <- dredge(bt)) # Here the 11th model include the interaction but do not include the single variables x1 and x2 # ... I want to avoid that kind of model. get.models(modstab, subset = 11) ################ Any help would be appreciated ! Arnaud
Hi Arnaud, please read ?dredge -> "Details" -> "Subsetting", where this is explained.
On 2014-11-12 15:19, Arnaud Mosnier wrote:
Hi Kamil,
Thanks for your answer. In fact, I already tried something with
operators in such a way you advise, but it seems more complicated due to
the use of the s() and ti() operators.
Can you provide a solution for the following example ?
library(mgcv)
set.seed(2)
dat <- gamSim(1,n=400,dist="normal",scale=2)
bt <- gam(y~s(x0)+s(x1)+ti(x0,x1), data=dat,method="ML")
library(MuMIn)
# this does not work
dredge(bt, subset = (!(x0,x1) | (x0 & x1)))
dredge(bt, subset = (!ti(x0,x1) | (s(x0) & s(x1))))
Cheers,
Arnaud
2014-11-11 4:11 GMT-05:00 Kamil Barto? <kamil.barton at o2.pl
<mailto:kamil.barton at o2.pl>>:
Hi Arnaud,
your question has in fact nothing to do with gam or model selection.
What you are asking is: what is the logical expression that yields
True when AB is False or both A and B are True. Now replace the
words with operators (!AB | (A & B)) and voil?.
See also:
help("Logic", "base")
fortunes::fortune(350)
best,
kamil
On 2014-11-10 21:26, Arnaud Mosnier wrote:
Hi,
I want to use dredge to test several gam submodels including
interactions.
I tried to find a way in order to keep models with interaction
only if
the single variables occurring in the interaction are also included.
i.e.: for
y~s(x0)+s(x1)+ti(x0, x1)
I want to keep
y ~ s(x0)
y ~ s(x1)
y ~ s(x0) + s(x1)
y ~ s(x0) + s(x1) + ti(x0,x1)
and I want to remove
y ~ s(x0) + ti(x0,x1)
y ~ s(x1) + ti(x0,x1)
y ~ ti(x0,x1)
I know that I should use the "subset" option of the dredge function.
However, I can not find the correct matrix / expression to
obtain what I
need !
Here a small example.
################
# Create some data (use mgcv example)
library(mgcv)
set.seed(2)
dat <- gamSim(1,n=400,dist="normal",__scale=2)
# Create the global gam model
# Here a model with interaction. Note the use of ti()
bt <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+__ti(x1,x2),
data=dat,method="ML")
# Use dredge to test sub-models
library(MuMIn)
print(modstab <- dredge(bt))
# Here the 11th model include the interaction but do not include the
single variables x1 and x2
# ... I want to avoid that kind of model.
get.models(modstab, subset = 11)
################
Any help would be appreciated !
Arnaud
Argh ! Ok ... my fault ... the use of back-ticks was the solution !!! Thanks, Arnaud 2014-11-12 14:19 GMT-05:00 Kamil Barto? <kamil.barton at o2.pl>:
Hi Arnaud, please read ?dredge -> "Details" -> "Subsetting", where this is explained. On 2014-11-12 15:19, Arnaud Mosnier wrote:
Hi Kamil,
Thanks for your answer. In fact, I already tried something with
operators in such a way you advise, but it seems more complicated due to
the use of the s() and ti() operators.
Can you provide a solution for the following example ?
library(mgcv)
set.seed(2)
dat <- gamSim(1,n=400,dist="normal",scale=2)
bt <- gam(y~s(x0)+s(x1)+ti(x0,x1), data=dat,method="ML")
library(MuMIn)
# this does not work
dredge(bt, subset = (!(x0,x1) | (x0 & x1)))
dredge(bt, subset = (!ti(x0,x1) | (s(x0) & s(x1))))
Cheers,
Arnaud
2014-11-11 4:11 GMT-05:00 Kamil Barto? <kamil.barton at o2.pl
<mailto:kamil.barton at o2.pl>>:
Hi Arnaud,
your question has in fact nothing to do with gam or model selection.
What you are asking is: what is the logical expression that yields
True when AB is False or both A and B are True. Now replace the
words with operators (!AB | (A & B)) and voil?.
See also:
help("Logic", "base")
fortunes::fortune(350)
best,
kamil
On 2014-11-10 21:26, Arnaud Mosnier wrote:
Hi,
I want to use dredge to test several gam submodels including
interactions.
I tried to find a way in order to keep models with interaction
only if
the single variables occurring in the interaction are also
included.
i.e.: for
y~s(x0)+s(x1)+ti(x0, x1)
I want to keep
y ~ s(x0)
y ~ s(x1)
y ~ s(x0) + s(x1)
y ~ s(x0) + s(x1) + ti(x0,x1)
and I want to remove
y ~ s(x0) + ti(x0,x1)
y ~ s(x1) + ti(x0,x1)
y ~ ti(x0,x1)
I know that I should use the "subset" option of the dredge
function.
However, I can not find the correct matrix / expression to
obtain what I
need !
Here a small example.
################
# Create some data (use mgcv example)
library(mgcv)
set.seed(2)
dat <- gamSim(1,n=400,dist="normal",__scale=2)
# Create the global gam model
# Here a model with interaction. Note the use of ti()
bt <- gam(y~s(x0)+s(x1)+s(x2)+s(x3)+__ti(x1,x2),
data=dat,method="ML")
# Use dredge to test sub-models
library(MuMIn)
print(modstab <- dredge(bt))
# Here the 11th model include the interaction but do not include
the
single variables x1 and x2
# ... I want to avoid that kind of model.
get.models(modstab, subset = 11)
################
Any help would be appreciated !
Arnaud