Skip to content

Instantly share code, notes, and snippets.

@rubenarslan
Created October 13, 2017 13:25
Show Gist options
  • Save rubenarslan/530730e8ef01abf9826224f0a226eed9 to your computer and use it in GitHub Desktop.
Save rubenarslan/530730e8ef01abf9826224f0a226eed9 to your computer and use it in GitHub Desktop.
trying different things using errors-in-variables in brms
library(brms)
library(dplyr)
n = 1000
fakedata = data_frame(
# structure
iv = rnorm(n),
dv = 0.5 * iv + 0.5 * rnorm(n),
# measurement
iv_m = iv + 1 * rnorm(n),
dv_m = dv + 1 * rnorm(n)
)
cor(fakedata) %>% round(2)
summary(lm(dv ~ iv, data = fakedata))
summary(lm(dv_m ~ iv_m, data = fakedata))
m1 = brm(dv_m ~ iv_m, data = fakedata)
summary(m1)
# model measurement error
fakedata$se = 1
m1_me = brm(dv_m | se(se, sigma = TRUE) ~ me(iv_m, se), data = fakedata, cores = 3, chains = 3)
summary(m1_me)
# results are the same as m1 above except for the sigma parameter
## systematic missings
fakedata_with_missings = fakedata %>%
mutate(
iv_m = if_else(rnorm(n) > 0 & dv < -0.5, NA_real_, iv_m),
dv_m = if_else(rnorm(n) > 0 & iv > 0.5, NA_real_, dv_m),
iv_m_me = if_else(is.na(iv_m), rnorm(n, mean(iv_m, na.rm = T), sd(iv_m, na.rm = T)), iv_m),
dv_m_me = if_else(is.na(dv_m), rnorm(n, mean(dv_m, na.rm = T), sd(dv_m, na.rm = T)), dv_m),
iv_se_me = if_else(is.na(iv_m), 4, 0.36),
dv_se_me = if_else(is.na(dv_m), 4, 0.36),
)
# View(fakedata_with_missings)
summary(lm(dv ~ iv, data = fakedata))
m1_ip_me = brm(dv_m_me | se(dv_se_me, sigma = TRUE) ~ me(iv_m_me, iv_se_me), data = fakedata_with_missings, cores = 3, chains = 3)
summary(m1_ip_me)
### random missings
fakedata_with_missings = fakedata %>%
mutate(
iv_m = if_else(rnorm(n) > 1, NA_real_, iv_m),
dv_m = if_else(rnorm(n) > 1, NA_real_, dv_m),
iv_m_me = if_else(is.na(iv_m), rnorm(n, mean(iv_m, na.rm = T), sd(iv_m, na.rm = T)), iv_m),
dv_m_me = if_else(is.na(dv_m), rnorm(n, mean(dv_m, na.rm = T), sd(dv_m, na.rm = T)), dv_m),
iv_se_me = if_else(is.na(iv_m), 4, 0.36),
dv_se_me = if_else(is.na(dv_m), 4, 0.36),
)
m1_ip_me_unsys = brm(dv_m_me | se(dv_se_me, sigma = TRUE) ~ me(iv_m_me, iv_se_me), data = fakedata_with_missings, cores = 3, chains = 3)
summary(m1_ip_me_unsys)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment