6E1. List three mechanisms by which multiple regression can produce false inferences about causal effects.

# Multicollinearity, post-treatment bias and collider bias

6E2. For one of the mechanisms in the previous problem, provide an example of your choice, perhaps from your own research.

# An example of multicollinearity is using both weight and height into as predictors in a regression model. They are highly related to each other because taller people tend to weigh more than shorter people. 

6E3. List the four elemental confounds. Can you explain the conditional dependencies of each?

# The fork: X<-Z->Y. X and Y are independent, conditional on Z. 
# The pipe: X->Z->Y. X and Y are independent, conditional on Z.
# The collider: X->Z<-Y. No association between X and Y unless condition on Z. Conditioning on Z, information flows between X and Y. 
# The descendent: Condition on a descendent of Z in the pipe, it’ll still be like (weakly) closing the pipe. 

6E4. How is a biased sample like conditioning on a collider? Think of the example at the open of the chapter.

# When you condition on a collider, you create statistical associations among its causes, but they are not necessarily causal associations. One example can be that when selecting scientific studies' proposals, the editors will take newsworthiness and trustworthiness into consideration. If a selected proposal has low trustworthiness, then it must have high newsworthiness. Otherwise it wouldn’t have been funded.

6M1. Modify the DAG on page 186 to include the variable V, an unobserved cause of C and Y: C ← V → Y. Reanalyze the DAG. How many paths connect X to Y? Which must be closed? Which variables should you condition on now?

# Besides the direct path, there are two paths from X to Y: 
# 1. X<-U<-A->C<-V->Y 
# This path conatains a fork U<-A->C, then a pipe X<-U, and a collider C<-V->Y. It is is open at the left side, X←U←A. If no conditioning on V, there is no assocation at the right hand side, C<-V->Y.To close this path, we can condition on A.

# 2. X<-U->B<-C<-V->Y
# This path conatins a collider in the middle, X<-U->B, and B<-C<-V. And a second collider at the right hand side, C<-V->Y. This path is closed if no conditioning on B and V.

6M2. Sometimes, in order to avoid multicollinearity, people inspect pairwise correlations among predictors before including them in a model. This is a bad procedure, because what matters is the conditional association, not the association before the variables are included in the model. To highlight this, consider the DAG X → Z → Y. Simulate data from this DAG so that the correlation between X and Z is very large. Then include both in a model prediction Y. Do you observe any multicollinearity? Why or why not? What is different from the legs example in the chapter?

n<- 1000
b_xz<- 0.9
b_zy<- 0.7

set.seed(100)
x<- rnorm(n)
z<- rnorm(n,x*b_xz)
y<- rnorm(n,z*b_zy)

d <- data.frame(x,y,z)
cor(d)
##           x         y         z
## x 1.0000000 0.4562717 0.6924074
## y 0.4562717 1.0000000 0.6351279
## z 0.6924074 0.6351279 1.0000000
library(rethinking)
## Loading required package: rstan
## Loading required package: StanHeaders
## Loading required package: ggplot2
## rstan (Version 2.19.3, GitRev: 2e1f913d3ca3)
## For execution on a local, multicore CPU with excess RAM we recommend calling
## options(mc.cores = parallel::detectCores()).
## To avoid recompilation of unchanged Stan programs, we recommend calling
## rstan_options(auto_write = TRUE)
## For improved execution time, we recommend calling
## Sys.setenv(LOCAL_CPPFLAGS = '-march=corei7 -mtune=corei7')
## although this causes Stan to throw an error on a few processors.
## Loading required package: parallel
## Loading required package: dagitty
## rethinking (Version 2.01)
## 
## Attaching package: 'rethinking'
## The following object is masked from 'package:stats':
## 
##     rstudent
m6m2<- quap( alist( 
  y ~ dnorm( mu , sigma ), 
  mu <- a + b_xz*x + b_zy*z,
  a ~ dnorm( 0 , 100 ), 
  c(b_xz,b_zy) ~ dnorm( 0 , 100 ), 
  sigma ~ dexp( 1 ) ), 
  data=d ) 
## Caution, model may not have converged.
## Code 1: Maximum iterations reached.
precis(m6m2)
##               mean         sd        5.5%      94.5%
## a     -0.008135237 0.03332760 -0.06139918 0.04512871
## b_xz   0.041459808 0.04483542 -0.03019585 0.11311547
## b_zy   0.619099380 0.03398903  0.56477834 0.67342042
## sigma  1.053730409 0.02383294  1.01564077 1.09182005
plot(precis(m6m2))

post <- extract.samples(m6m2) 
plot( z ~ x , post , col=col.alpha(rangi2,0.1) , pch=16 )