# install.packages("librarian", quiet = T)
# install.packages("ggdag")
librarian::shelf(
dagitty, tibble, stargazer, ggplot2, ggdag,
quiet = T
)
theme_set(theme_void())
g <- dagitty("dag {
X <- Z -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=1.5,Y=2),
y=c(X=1,Z=0,Y=1) )
ggdag(g)
# Generating random numbers
set.seed(1)
n <- 1000
Z <- rnorm(1000)
X <- 4*Z + rnorm(1000)
Y <- X + 3*Z + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
# Regressions
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
===========================================================================
Dependent variable:
-------------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------------
X 1.717*** 1.022***
(0.009) (0.031)
Z 2.961***
(0.130)
Constant 0.025 0.016
(0.040) (0.033)
---------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.971 0.981
Adjusted R2 0.971 0.981
Residual Std. Error 1.272 (df = 998) 1.031 (df = 997)
F Statistic 33,286.210*** (df = 1; 998) 25,604.630*** (df = 2; 997)
===========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X <- Z <- U -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=2,U=3,Y=4),
y=c(X=2,Z=1,U=0,Y=2) )
ggdag(g)
set.seed(1)
n <- 1000
U <- rnorm(1000)
Z <- 2*U + rnorm(1000)
X <- 4*Z + rnorm(1000)
Y <- X + 3*U + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
===========================================================================
Dependent variable:
-------------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------------
X 1.297*** 1.012***
(0.006) (0.053)
Z 1.158***
(0.216)
Constant 0.024 0.029
(0.056) (0.055)
---------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.980 0.980
Adjusted R2 0.980 0.980
Residual Std. Error 1.758 (df = 998) 1.734 (df = 997)
F Statistic 48,031.140*** (df = 1; 998) 24,699.570*** (df = 2; 997)
===========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X <- U -> Z -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=3,U=2,Y=4),
y=c(X=2,Z=1,U=0,Y=2) )
ggdag(g)
set.seed(1)
n <- 1000
U <- rnorm(1000)
Z <- 2*U + rnorm(1000)
X <- 4*U + rnorm(1000)
Y <- X + 3*Z + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
==========================================================================
Dependent variable:
------------------------------------------------------
Y
NoControl UsingControl
(1) (2)
--------------------------------------------------------------------------
X 2.412*** 1.001***
(0.026) (0.015)
Z 3.011***
(0.029)
Constant -0.058 0.017
(0.114) (0.033)
--------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.894 0.991
Adjusted R2 0.893 0.991
Residual Std. Error 3.595 (df = 998) 1.039 (df = 997)
F Statistic 8,373.656*** (df = 1; 998) 55,559.970*** (df = 2; 997)
==========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X <- Z -> M -> Y
X -> M
}")
coordinates(g) <- list(
x=c(X=1,Z=1.5,M=2,Y=3),
y=c(X=1,Z=0,M=1,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
Z <- rnorm(1000)
X <- 2*Z + rnorm(1000)
M <- X + 8*Z + rnorm(1000)
Y <- M + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,M=M)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
lm_3 <- lm(Y ~ X + Z + M, d) #Threats of confounding
stargazer(lm_1, lm_2, lm_3,
type = "text",
column.labels = c("NoControl", "UsingControl", "ThreatsConfounding")
)
======================================================================================================
Dependent variable:
----------------------------------------------------------------------------------
Y
NoControl UsingControl ThreatsConfounding
(1) (2) (3)
------------------------------------------------------------------------------------------------------
X 4.224*** 1.037*** 0.006
(0.054) (0.045) (0.045)
Z 7.998*** -0.081
(0.100) (0.265)
M 1.009***
(0.032)
Constant 0.066 0.033 0.017
(0.126) (0.047) (0.033)
------------------------------------------------------------------------------------------------------
Observations 1,000 1,000 1,000
R2 0.858 0.981 0.990
Adjusted R2 0.858 0.981 0.990
Residual Std. Error 3.989 (df = 998) 1.470 (df = 997) 1.040 (df = 996)
F Statistic 6,042.009*** (df = 1; 998) 25,407.450*** (df = 2; 997) 34,205.840*** (df = 3; 996)
======================================================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
Z <- U -> M -> Y
Z -> X -> M
}")
coordinates(g) <- list(
x=c(X=1,Z=1.25,U=1.5,M=2,Y=3),
y=c(X=1,Z=0.5,U=0,M=1,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
U <- rnorm(1000)
Z <- 3*U + rnorm(1000)
X <- 2*Z + rnorm(1000)
M <- X + 5*U + rnorm(1000)
Y <- M + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,M=M, U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
lm_3 <- lm(Y ~ X + Z + M, d) #Threats of confounding
stargazer(lm_1, lm_2, lm_3,
type = "text",
column.labels = c("NoControl", "UsingControl", "ThreatsConfounding")
)
=======================================================================================================
Dependent variable:
-----------------------------------------------------------------------------------
Y
NoControl UsingControl ThreatsConfounding
(1) (2) (3)
-------------------------------------------------------------------------------------------------------
X 1.722*** 0.930*** -0.062*
(0.011) (0.066) (0.034)
Z 1.635*** 0.145**
(0.135) (0.067)
M 0.991***
(0.016)
Constant 0.001 0.016 -0.019
(0.073) (0.068) (0.031)
-------------------------------------------------------------------------------------------------------
Observations 1,000 1,000 1,000
R2 0.961 0.966 0.993
Adjusted R2 0.961 0.966 0.993
Residual Std. Error 2.311 (df = 998) 2.159 (df = 997) 0.988 (df = 996)
F Statistic 24,877.280*** (df = 1; 998) 14,316.180*** (df = 2; 997) 46,886.160*** (df = 3; 996)
=======================================================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X <- U -> Z -> M -> Y
X -> M
}")
coordinates(g) <- list(
x=c(X=1,Z=1.5,U=1.25,M=2,Y=3),
y=c(X=1,Z=0.5,U=0,M=1,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
U <- rnorm(1000)
Z <- 4*U + rnorm(1000)
X <- 2*U + rnorm(1000)
M <- X + Z + rnorm(1000)
Y <- M + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,M=M, U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
lm_3 <- lm(Y ~ X + Z + M, d) #Threats of confounding
stargazer(lm_1, lm_2, lm_3,
type = "text",
column.labels = c("NoControl", "UsingControl", "ThreatsConfounding")
)
=====================================================================================================
Dependent variable:
---------------------------------------------------------------------------------
Y
NoControl UsingControl ThreatsConfounding
(1) (2) (3)
-----------------------------------------------------------------------------------------------------
X 2.570*** 0.939*** -0.067*
(0.034) (0.040) (0.041)
Z 1.028*** 0.020
(0.022) (0.034)
M 1.003***
(0.030)
Constant -0.054 -0.002 -0.019
(0.081) (0.045) (0.031)
-----------------------------------------------------------------------------------------------------
Observations 1,000 1,000 1,000
R2 0.848 0.952 0.978
Adjusted R2 0.848 0.952 0.977
Residual Std. Error 2.567 (df = 998) 1.435 (df = 997) 0.988 (df = 996)
F Statistic 5,563.850*** (df = 1; 998) 9,993.720*** (df = 2; 997) 14,447.790*** (df = 3; 996)
=====================================================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X <- U1 -> Z <- U2 -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(X=1,U1=1,Z=2,U2=3,Y=3),
y=c(X=1,U1=0,Z=0,U2=0,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
U1 <- rnorm(1000)
U2 <- rnorm(1000)
Z <- 0.5*U1 + 0.3*U2 + rnorm(1000)
X <- 2*U1 + rnorm(1000)
Y <- X + 7*U2 + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,U1=U1, U2=U2)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=====================================================================
Dependent variable:
-------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------
X 1.025*** 0.604***
(0.100) (0.105)
Z 1.904***
(0.201)
Constant -0.134 -0.145
(0.233) (0.223)
---------------------------------------------------------------------
Observations 1,000 1,000
R2 0.096 0.170
Adjusted R2 0.095 0.169
Residual Std. Error 7.360 (df = 998) 7.054 (df = 997)
F Statistic 105.904*** (df = 1; 998) 102.383*** (df = 2; 997)
=====================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X <- U1 -> Z <- U2 -> Y
X -> Y
Z -> Y
}")
coordinates(g) <- list(
x=c(X=1,U1=1,Z=2,U2=3,Y=3),
y=c(X=1,U1=0,Z=0,U2=0,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
U1 <- rnorm(1000)
U2 <- rnorm(1000)
Z <- 0.5*U1 + 0.3*U2 + rnorm(1000)
X <- 2*U1 + rnorm(1000)
Y <- X + Z + 7*U2 + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,U1=U1, U2=U2)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=====================================================================
Dependent variable:
-------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------
X 1.247*** 0.604***
(0.105) (0.105)
Z 2.904***
(0.201)
Constant -0.128 -0.145
(0.245) (0.223)
---------------------------------------------------------------------
Observations 1,000 1,000
R2 0.124 0.275
Adjusted R2 0.123 0.274
Residual Std. Error 7.751 (df = 998) 7.054 (df = 997)
F Statistic 141.163*** (df = 1; 998) 189.319*** (df = 2; 997)
=====================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> Y <-Z
}")
coordinates(g) <- list(
x=c(X=1,Y=2,Z=3),
y=c(X=1,Y=1,Z=0) )
ggdag(g)
set.seed(1)
n <- 1000
Z <- rnorm(1000)
X <- rnorm(1000)
Y <- X + 7*Z + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=======================================================================
Dependent variable:
---------------------------------------------------
Y
NoControl UsingControl
(1) (2)
-----------------------------------------------------------------------
X 1.067*** 1.022***
(0.224) (0.031)
Z 7.049***
(0.032)
Constant -0.065 0.016
(0.233) (0.033)
-----------------------------------------------------------------------
Observations 1,000 1,000
R2 0.022 0.981
Adjusted R2 0.021 0.981
Residual Std. Error 7.371 (df = 998) 1.031 (df = 997)
F Statistic 22.637*** (df = 1; 998) 25,604.630*** (df = 2; 997)
=======================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
Z -> X -> Y
}")
coordinates(g) <- list(
x=c(X=2,Y=3,Z=1),
y=c(X=1,Y=1,Z=0) )
ggdag(g)
set.seed(1)
n <- 1000
Z <- rnorm(1000)
X <- 4.5*Z + rnorm(1000)
Y <- X + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
===========================================================================
Dependent variable:
-------------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------------
X 1.011*** 1.022***
(0.007) (0.031)
Z -0.050
(0.145)
Constant 0.016 0.016
(0.033) (0.033)
---------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.957 0.957
Adjusted R2 0.957 0.956
Residual Std. Error 1.030 (df = 998) 1.031 (df = 997)
F Statistic 21,987.600*** (df = 1; 998) 10,984.160*** (df = 2; 997)
===========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
Z -> X <- U -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(Z=0.5,X=1,U=1.5,Y=2),
y=c(Z=0,X=1,U=0.5,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
Z <- rnorm(1000)
U <- rnorm(1000)
X <- 4.5*Z + 6*U + rnorm(1000)
Y <- X + 3*U + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z, U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
===========================================================================
Dependent variable:
-------------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------------
X 1.316*** 1.488***
(0.009) (0.006)
Z -2.195***
(0.044)
Constant 0.011 0.008
(0.068) (0.036)
---------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.959 0.988
Adjusted R2 0.959 0.988
Residual Std. Error 2.154 (df = 998) 1.153 (df = 997)
F Statistic 23,426.520*** (df = 1; 998) 42,117.360*** (df = 2; 997)
===========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> Z -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=2,Y=3),
y=c(X=0,Z=0,Y=0) )
ggdag(g)
set.seed(1)
n <- 1000
X <- rnorm(1000)
Z <- X + rnorm(1000)
Y <- Z + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=======================================================================
Dependent variable:
---------------------------------------------------
Y
NoControl UsingControl
(1) (2)
-----------------------------------------------------------------------
X 1.056*** 0.027
(0.045) (0.045)
Z 1.022***
(0.031)
Constant -0.0003 0.016
(0.047) (0.033)
-----------------------------------------------------------------------
Observations 1,000 1,000
R2 0.353 0.687
Adjusted R2 0.352 0.686
Residual Std. Error 1.481 (df = 998) 1.031 (df = 997)
F Statistic 543.961*** (df = 1; 998) 1,092.484*** (df = 2; 997)
=======================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> M -> Y
M -> Z
}")
coordinates(g) <- list(
x=c(X=1,Z=2,Y=3, M=2),
y=c(X=0,Z=0.5,Y=0, M=0) )
ggdag(g)
set.seed(1)
n <- 1000
X <- rnorm(1000)
M <- X + rnorm(1000)
Z <- 5*M + rnorm(1000)
Y <- M + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z, M=M)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=====================================================================
Dependent variable:
-------------------------------------------------
Y
NoControl UsingControl
(1) (2)
---------------------------------------------------------------------
X 1.030*** 0.039
(0.045) (0.045)
Z 0.195***
(0.006)
Constant 0.001 0.013
(0.047) (0.033)
---------------------------------------------------------------------
Observations 1,000 1,000
R2 0.341 0.665
Adjusted R2 0.341 0.664
Residual Std. Error 1.482 (df = 998) 1.057 (df = 997)
F Statistic 517.099*** (df = 1; 998) 988.829*** (df = 2; 997)
=====================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> Z <- U -> Y
Z -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=2,U=2.5,Y=3),
y=c(X=1,Z=1,U=0,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
X <- rnorm(1000)
U <- rnorm(1000)
Z <- X + 4*U + rnorm(1000)
Y <- Z + 3*U + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=======================================================================
Dependent variable:
---------------------------------------------------
Y
NoControl UsingControl
(1) (2)
-----------------------------------------------------------------------
X 1.118*** -0.718***
(0.228) (0.040)
Z 1.707***
(0.009)
Constant -0.080 0.003
(0.236) (0.040)
-----------------------------------------------------------------------
Observations 1,000 1,000
R2 0.023 0.972
Adjusted R2 0.022 0.971
Residual Std. Error 7.468 (df = 998) 1.276 (df = 997)
F Statistic 23.969*** (df = 1; 998) 16,995.940*** (df = 2; 997)
=======================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> M -> Y
Z -> M
}")
coordinates(g) <- list(
x=c(X=1,M=2,Y=3,Z=2),
y=c(X=1,M=1,Y=1,Z=0) )
ggdag(g)
set.seed(1)
n <- 1000
Z <- rnorm(1000)
X <- rnorm(1000)
M <- X + 4*Z + rnorm(1000)
Y <- M + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z,M=M)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
======================================================================
Dependent variable:
--------------------------------------------------
Y
NoControl UsingControl
(1) (2)
----------------------------------------------------------------------
X 1.063*** 1.037***
(0.136) (0.045)
Z 4.073***
(0.045)
Constant -0.014 0.033
(0.141) (0.047)
----------------------------------------------------------------------
Observations 1,000 1,000
R2 0.058 0.898
Adjusted R2 0.057 0.898
Residual Std. Error 4.465 (df = 998) 1.470 (df = 997)
F Statistic 61.265*** (df = 1; 998) 4,386.419*** (df = 2; 997)
======================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
Z <- X -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=2,Y=3),
y=c(X=0,Z=1,Y=0) )
ggdag(g)
set.seed(1)
n <- 1000
X <- rnorm(1000)
Z <- 2*X + rnorm(1000)
Y <- X + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=======================================================================
Dependent variable:
---------------------------------------------------
Y
NoControl UsingControl
(1) (2)
-----------------------------------------------------------------------
X 1.049*** 1.005***
(0.031) (0.070)
Z 0.022
(0.031)
Constant 0.016 0.016
(0.033) (0.033)
-----------------------------------------------------------------------
Observations 1,000 1,000
R2 0.526 0.527
Adjusted R2 0.526 0.526
Residual Std. Error 1.030 (df = 998) 1.031 (df = 997)
F Statistic 1,109.435*** (df = 1; 998) 554.682*** (df = 2; 997)
=======================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> Z -> W <- U -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(X=1,Z=1.5,W=2,U=2,Y=3),
y=c(X=1,Z=1.5,W=2,U=0,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
U <- rnorm(1000)
X <- rnorm(1000)
Z <- 2*X + rnorm(1000)
W <- 3*Z + 5*U + rnorm(1000)
Y <- X + 4*U + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z, W=W, U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
===================================================================
Dependent variable:
-----------------------------------------------
Y
NoControl UsingControl
(1) (2)
-------------------------------------------------------------------
X 1.035*** 0.781***
(0.128) (0.292)
Z 0.126
(0.130)
Constant -0.066 -0.068
(0.134) (0.134)
-------------------------------------------------------------------
Observations 1,000 1,000
R2 0.061 0.062
Adjusted R2 0.060 0.060
Residual Std. Error 4.221 (df = 998) 4.221 (df = 997)
F Statistic 64.904*** (df = 1; 998) 32.919*** (df = 2; 997)
===================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> Z <- U -> Y
X -> Y
}")
coordinates(g) <- list(
x=c(X=1,U=2,Z=2,Y=3),
y=c(X=1,U=0,Z=2,Y=1) )
ggdag(g)
set.seed(1)
n <- 1000
U <- rnorm(1000)
X <- rnorm(1000)
Z <- 2*X + 2.5*U + rnorm(1000)
Y <- X + 4*U + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z, U=U)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
======================================================================
Dependent variable:
--------------------------------------------------
Y
NoControl UsingControl
(1) (2)
----------------------------------------------------------------------
X 1.041*** -1.753***
(0.131) (0.070)
Z 1.371***
(0.020)
Constant -0.029 -0.011
(0.136) (0.058)
----------------------------------------------------------------------
Observations 1,000 1,000
R2 0.060 0.829
Adjusted R2 0.059 0.829
Residual Std. Error 4.293 (df = 998) 1.830 (df = 997)
F Statistic 63.518*** (df = 1; 998) 2,422.428*** (df = 2; 997)
======================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
Z <- X -> Y -> Z
X -> Z
}")
coordinates(g) <- list(
x=c(X=1,Z=2,Y=3),
y=c(X=0,Y=0,Z=1) )
ggdag(g)
set.seed(1)
n <- 1000
X <- rnorm(1000)
Y <- X + rnorm(1000)
Z <- 2*X + 2.5*Y + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=========================================================================
Dependent variable:
-----------------------------------------------------
Y
NoControl UsingControl
(1) (2)
-------------------------------------------------------------------------
X 1.006*** -0.562***
(0.032) (0.023)
Z 0.344***
(0.004)
Constant -0.016 -0.008
(0.033) (0.012)
-------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.501 0.933
Adjusted R2 0.500 0.933
Residual Std. Error 1.040 (df = 998) 0.380 (df = 997)
F Statistic 1,001.098*** (df = 1; 998) 6,979.903*** (df = 2; 997)
=========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01
g <- dagitty("dag {
X -> Y -> Z
}")
coordinates(g) <- list(
x=c(X=1,Z=2,Y=3),
y=c(X=0,Y=0,Z=1) )
ggdag(g)
set.seed(1)
n <- 1000
X <- rnorm(1000)
Y <- X + rnorm(1000)
Z <- 2.5*Y + rnorm(1000)
# Create a dataframe
d <- tibble(X=X,Y=Y,Z=Z)
lm_1 <- lm(Y ~ X, d)
lm_2 <- lm(Y ~ X + Z, d)
stargazer(lm_1, lm_2,
type = "text",
column.labels = c("NoControl", "UsingControl")
)
=========================================================================
Dependent variable:
-----------------------------------------------------
Y
NoControl UsingControl
(1) (2)
-------------------------------------------------------------------------
X 1.006*** 0.125***
(0.032) (0.016)
Z 0.344***
(0.004)
Constant -0.016 -0.008
(0.033) (0.012)
-------------------------------------------------------------------------
Observations 1,000 1,000
R2 0.501 0.933
Adjusted R2 0.500 0.933
Residual Std. Error 1.040 (df = 998) 0.380 (df = 997)
F Statistic 1,001.098*** (df = 1; 998) 6,979.903*** (df = 2; 997)
=========================================================================
Note: *p<0.1; **p<0.05; ***p<0.01