Much of this chapter is trying to convince readers that interactions are opague and need plotting and careful thought in order to be interpretted.
## R code 7.18 library(rethinking) data(tulips) d <- tulips str(d)
## R code 7.20 m7.6 <- map( alist( blooms ~ dnorm( mu , sigma ) , mu <- a + bW*water + bS*shade , a ~ dnorm( 0 , 100 ) , bW ~ dnorm( 0 , 100 ) , bS ~ dnorm( 0 , 100 ) , sigma ~ dunif( 0 , 100 ) ) , data=d , method="Nelder-Mead" , control=list(maxit=1e4) ) m7.7 <- map( alist( blooms ~ dnorm( mu , sigma ) , mu <- a + bW*water + bS*shade + bWS*water*shade , a ~ dnorm( 0 , 100 ) , bW ~ dnorm( 0 , 100 ) , bS ~ dnorm( 0 , 100 ) , bWS ~ dnorm( 0 , 100 ) , sigma ~ dunif( 0 , 100 ) ) , data=d , method="Nelder-Mead" , control=list(maxit=1e4) )
## R code 7.21 coeftab(m7.6,m7.7) ## R code 7.22 compare( m7.6 , m7.7 )
## R code 7.23 d$shade.c <- d$shade - mean(d$shade) d$water.c <- d$water - mean(d$water) ## R code 7.24 m7.8 <- map( alist( blooms ~ dnorm( mu , sigma ) , mu <- a + bW*water.c + bS*shade.c , a ~ dnorm( 130 , 100 ) , bW ~ dnorm( 0 , 100 ) , bS ~ dnorm( 0 , 100 ) , sigma ~ dunif( 0 , 100 ) ) , data=d , start=list(a=mean(d$blooms),bW=0,bS=0,sigma=sd(d$blooms)) ) m7.9 <- map( alist( blooms ~ dnorm( mu , sigma ) , mu <- a + bW*water.c + bS*shade.c + bWS*water.c*shade.c , a ~ dnorm( 130 , 100 ) , bW ~ dnorm( 0 , 100 ) , bS ~ dnorm( 0 , 100 ) , bWS ~ dnorm( 0 , 100 ) , sigma ~ dunif( 0 , 100 ) ) , data=d , start=list(a=mean(d$blooms),bW=0,bS=0,bWS=0,sigma=sd(d$blooms)) ) coeftab(m7.8,m7.9)
## R code 7.25 k <- coef(m7.7) k[1] + k[2]*2 + k[3]*2 + k[4]*2*2 ## R code 7.26 k <- coef(m7.9) k[1] + k[2]*0 + k[3]*0 + k[4]*0*0 ## R code 7.27 precis(m7.9) ## R code 7.28 # make a plot window with three panels in a single row par(mfrow=c(1,3)) # 1 row, 3 columns # loop over values of water.c and plot predictions shade.seq <- -1:1 for ( w in -1:1 ) { dt <- d[d$water.c==w,] plot( blooms ~ shade.c , data=dt , col=rangi2 , main=paste("water.c =",w) , xaxp=c(-1,1,2) , ylim=c(0,362) , xlab="shade (centered)" ) mu <- link( m7.9 , data=data.frame(water.c=w,shade.c=shade.seq) ) mu.mean <- apply( mu , 2 , mean ) mu.PI <- apply( mu , 2 , PI , prob=0.97 ) lines( shade.seq , mu.mean ) lines( shade.seq , mu.PI[1,] , lty=2 ) lines( shade.seq , mu.PI[2,] , lty=2 ) } ## R code 7.29 m7.x <- lm( y ~ x + z + x*z , data=d ) ## R code 7.30 m7.x <- lm( y ~ x*z , data=d ) ## R code 7.31 m7.x <- lm( y ~ x + x*z - z , data=d ) ## R code 7.32 m7.x <- lm( y ~ x*z*w , data=d ) ## R code 7.33 x <- z <- w <- 1 colnames( model.matrix(~x*z*w) ) ## R code 7.34 d$lang.per.cap <- d$num.lang / d$k.pop
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.