-
Notifications
You must be signed in to change notification settings - Fork 1
/
example2.R
49 lines (33 loc) · 1.58 KB
/
example2.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File name: example2.R
# Author: Felix Thoemmes
# Date: 11/1/2022
# Packages and data -----------------------------------------------------------
library(tidyverse)
library(magrittr)
# Data --------------------------------------------------------------
df1 <- read_csv("https://raw.githubusercontent.com/felixthoemmes/gesis_causal_mediation_2022/main/example2.csv")
# Effect estimation ----------------------------------------------------------
#true individual level causal effect
df1$Y1 - df1$Y0
#true average causal effect - aggregating invidual causal effects
mean(df1$Y1 - df1$Y0)
#prima facie effect on observed outcome
df1 %>% group_by(X) %>% summarize(mean(Y)) -> groupmeans
groupmeans[2,2] - groupmeans[1,2]
#model-based effect based on imputing potential outcomes
lm1 <- lm(Y ~ X, data=df1)
Y0pred <- predict(lm1,newdata=tibble(.rows = 16,X=0))
Y1pred <- predict(lm1,newdata=tibble(.rows = 16,X=1))
mean(Y1pred - Y0pred)
# Non-randomized example -----------------------------------------------------
#Unadjusted prima facie effect
df1$Y_nr <- ifelse(df1$X_nr==0,df1$Y0,df1$Y1)
df1 %>% group_by(X_nr) %>% summarize(mean(Y_nr)) -> groupmeans2
groupmeans2[2,2] - groupmeans2[1,2]
lm2 <- lm(Y_nr ~ X_nr, data=df1)
#Adjusted effect - adjusted for Z
df1 %>% group_by(X_nr,Z) %>% summarize(mean(Y_nr)) -> groupmeans3
lm3 <- lm(Y_nr ~ X_nr*Z, data=df1)
Y0pred2 <- predict(lm3,newdata=tibble(.rows = 16,X_nr=0,Z=df1$Z))
Y1pred2 <- predict(lm3,newdata=tibble(.rows = 16,X_nr=1,Z=df1$Z))
mean(Y1pred2 - Y0pred2)