mgcv : 3-way interaction and 3D-plots ?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

mgcv : 3-way interaction and 3D-plots ?

R help mailing list-2
Dear R-experts,

I have fitted a model with 2-way and 3-way interactions.
I would like, for the 3-way interaction (year,age,by=education), to obtain 3D-plots. How could I do that ?

Many thanks for your response.

Here is the reproducible example:

#############
install.packages("ISLR")

library(ISLR)

install.packages("mgcv")

library(mgcv)

mod1<-gam(wage ~education+s(age,bs="ps")+year+te(age,year,bs="ps")+s(year,bs="ps",by=education,m=1)+te(year,age,by=education,bs=rep("ps",2)),data=Wage)

plot(mod1)
#############

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: mgcv : 3-way interaction and 3D-plots ?

David Winsemius

On 1/7/19 3:35 PM, varin sacha via R-help wrote:
> Dear R-experts,
>
> I have fitted a model with 2-way and 3-way interactions.
> I would like, for the 3-way interaction (year,age,by=education), to obtain 3D-plots. How could I do that ?

Forget ggplot2. It has ignored this sort of visualization effort. Use
lattice or base plotting methods.


In order to plot a 2way interaction one needs a pseudo-3way plot
(`wireframe`) or a single `levelplot`. For display of a 3way interaction
in lattice (given the human minds inability to "see" in 4 dimensions)
you will need to specify levels for one of the variables to display
slices perhaps using multiple displays of 2way "sub-interactions"
calculated ad meaningul levels of the variable you choose to slive
with.  I'm not sure what the "native" plotting method for pkg:mgcv might
be. I suspect it was base graphics,; if so, look at ?persp and ?contour.

--

David

>
> Many thanks for your response.
>
> Here is the reproducible example:
>
> #############
> install.packages("ISLR")
>
> library(ISLR)
>
> install.packages("mgcv")
>
> library(mgcv)
>
> mod1<-gam(wage ~education+s(age,bs="ps")+year+te(age,year,bs="ps")+s(year,bs="ps",by=education,m=1)+te(year,age,by=education,bs=rep("ps",2)),data=Wage)
>
> plot(mod1)
> #############
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: mgcv : 3-way interaction and 3D-plots ?

Richard M. Heiberger
## Here is an example using the 3-way interaction plot from the HH package


install.packages("HH") ## if necessary

## The HH package supports the book
## Statistical Analysis and Data Display
##    Richard M. Heiberger and Burt Holland
## http://www.springer.com/us/book/9781493921218

library(HH)
## find the pathname of the R script file dsgn.R containing this example
HHscriptnames(13)
## open the file dsgn.R in your favorite editor.


## Then run

## chunk 2,
## chunk 3, Figure 13.1
## chunk 4  Table 13.1
## chunk 7  Figure 13.3  three-way interactions

## Rows of the array of panels are                  current
## Columns of the array of panels are               n.treats
## differently colored boxes within each panel are  minutes
##
## In this example the 3-way interaction is not significant.
## For a hint of what one could see, compare the panel "60.cycle x 3"
## with "60.cycle x 6".  In "60.cycle x 3", the red box at minutes=5 is
## higher than the other three boxes.  In "60.cycle x 6", the red box at
## minutes=5 is lower than the other boxes.


## Illustrate a minimalist form of this call.
## Create a dataset with simple variable names Y, A, B, C
mydata <- data.frame(Y=cc176$y.adj,
                     A=unpositioned(cc176$minutes),
                     B=cc176$n.treats,
                     C=cc176$current)

## A is an ordinary factor, minutes is a positioned factor, see
?HH::position
## We use xyplot() here, not bwplot(), because bwplot() doesn't handle
"positioned" factors.

## The minimalist form of this call is
useOuterStrips(
xyplot(Y ~ A | B + C, data=mydata,
       groups=A,
       panel=panel.bwplot.superpose, ## take control of colors of the boxes
       horizontal=FALSE,
       between=list(x=1, y=1))
)


On Mon, Jan 7, 2019 at 7:59 PM David Winsemius <[hidden email]>
wrote:

>
> On 1/7/19 3:35 PM, varin sacha via R-help wrote:
> > Dear R-experts,
> >
> > I have fitted a model with 2-way and 3-way interactions.
> > I would like, for the 3-way interaction (year,age,by=education), to
> obtain 3D-plots. How could I do that ?
>
> Forget ggplot2. It has ignored this sort of visualization effort. Use
> lattice or base plotting methods.
>
>
> In order to plot a 2way interaction one needs a pseudo-3way plot
> (`wireframe`) or a single `levelplot`. For display of a 3way interaction
> in lattice (given the human minds inability to "see" in 4 dimensions)
> you will need to specify levels for one of the variables to display
> slices perhaps using multiple displays of 2way "sub-interactions"
> calculated ad meaningul levels of the variable you choose to slive
> with.  I'm not sure what the "native" plotting method for pkg:mgcv might
> be. I suspect it was base graphics,; if so, look at ?persp and ?contour.
>
> --
>
> David
>
> >
> > Many thanks for your response.
> >
> > Here is the reproducible example:
> >
> > #############
> > install.packages("ISLR")
> >
> > library(ISLR)
> >
> > install.packages("mgcv")
> >
> > library(mgcv)
> >
> > mod1<-gam(wage
> ~education+s(age,bs="ps")+year+te(age,year,bs="ps")+s(year,bs="ps",by=education,m=1)+te(year,age,by=education,bs=rep("ps",2)),data=Wage)
> >
> > plot(mod1)
> > #############
> >
> > ______________________________________________
> > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: mgcv : 3-way interaction and 3D-plots ?

R help mailing list-2
David, Richard,

Many thanks for your responses.




Le mardi 8 janvier 2019 à 04:25:19 UTC+1, Richard M. Heiberger <[hidden email]> a écrit :





## Here is an example using the 3-way interaction plot from the HH package


install.packages("HH") ## if necessary

## The HH package supports the book
## Statistical Analysis and Data Display
##    Richard M. Heiberger and Burt Holland
## http://www.springer.com/us/book/9781493921218

library(HH)
## find the pathname of the R script file dsgn.R containing this example
HHscriptnames(13)
## open the file dsgn.R in your favorite editor.


## Then run

## chunk 2, 
## chunk 3, Figure 13.1
## chunk 4  Table 13.1
## chunk 7  Figure 13.3  three-way interactions

## Rows of the array of panels are                  current
## Columns of the array of panels are               n.treats
## differently colored boxes within each panel are  minutes
## 
## In this example the 3-way interaction is not significant.
## For a hint of what one could see, compare the panel "60.cycle x 3"
## with "60.cycle x 6".  In "60.cycle x 3", the red box at minutes=5 is
## higher than the other three boxes.  In "60.cycle x 6", the red box at
## minutes=5 is lower than the other boxes.


## Illustrate a minimalist form of this call.
## Create a dataset with simple variable names Y, A, B, C
mydata <- data.frame(Y=cc176$y.adj,
                     A=unpositioned(cc176$minutes),
                     B=cc176$n.treats,
                     C=cc176$current)

## A is an ordinary factor, minutes is a positioned factor, see ?HH::position
## We use xyplot() here, not bwplot(), because bwplot() doesn't handle "positioned" factors.

## The minimalist form of this call is
useOuterStrips(
xyplot(Y ~ A | B + C, data=mydata,
       groups=A,
       panel=panel.bwplot.superpose, ## take control of colors of the boxes
       horizontal=FALSE,
       between=list(x=1, y=1))
)


On Mon, Jan 7, 2019 at 7:59 PM David Winsemius <[hidden email]> wrote:

>
> On 1/7/19 3:35 PM, varin sacha via R-help wrote:
>> Dear R-experts,
>>
>> I have fitted a model with 2-way and 3-way interactions.
>> I would like, for the 3-way interaction (year,age,by=education), to obtain 3D-plots. How could I do that ?
>
> Forget ggplot2. It has ignored this sort of visualization effort. Use
> lattice or base plotting methods.
>
>
> In order to plot a 2way interaction one needs a pseudo-3way plot
> (`wireframe`) or a single `levelplot`. For display of a 3way interaction
> in lattice (given the human minds inability to "see" in 4 dimensions)
> you will need to specify levels for one of the variables to display
> slices perhaps using multiple displays of 2way "sub-interactions"
> calculated ad meaningul levels of the variable you choose to slive
> with.  I'm not sure what the "native" plotting method for pkg:mgcv might
> be. I suspect it was base graphics,; if so, look at ?persp and ?contour.
>
> --
>
> David
>
>>
>> Many thanks for your response.
>>
>> Here is the reproducible example:
>>
>> #############
>> install.packages("ISLR")
>>
>> library(ISLR)
>>
>> install.packages("mgcv")
>>
>> library(mgcv)
>>
>> mod1<-gam(wage ~education+s(age,bs="ps")+year+te(age,year,bs="ps")+s(year,bs="ps",by=education,m=1)+te(year,age,by=education,bs=rep("ps",2)),data=Wage)
>>
>> plot(mod1)
>> #############
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.