library(dplyr)
library(ggplot2)
library(simulateGP)
library(dplyr)
library(TwoSampleMR)
Simulate a model where genotypes influence X and U and U has some influence on X. What are the effects of genotypes on X? What fraction of GWAS hits are direct effects for each percentile of magnitude of G-X assoc?
nd <- 1000
nc <- 1000
np <- 100
bxy <- 0.5
bgx <- abs(rnorm(nd))
bgu <- abs(rnorm(nc))
bgux <- bgu * bxy
d <- tibble(b = c(bgx, bgux), path=c(rep("direct", nd), rep("confounder", each=nc))) %>%
arrange(b) %>%
mutate(ord=1:n(), perc = ntile(b, np)) %>%
group_by(perc) %>%
summarise(b=mean(b), n=n(), prop=sum(path=="direct")/n())
d %>%
ggplot(., aes(x=perc, y=b)) +
geom_jitter(aes(colour=prop)) +
scale_colour_gradient(low="red", high="blue") +
labs(y="Genetic effect on X", x="Percentile", colour="Probability of GWAS hit being a direct effect") +
theme(legend.position="bottom")

Figure is used here: https://drive.google.com/file/d/1XW9f0cUUt8jGZWmea11Nb3kN2JsR0sQ5/view?usp=sharing
Bias from G-U instruments
This is the expected effect estimate of X on Y using an instrument that arises via U:
\[
\beta_{IV,u} = \frac{\beta_{gu} \beta_{uy} + \beta_{gu} \beta_{ux} \beta_{xy}}{\beta_{gu} \beta_{ux}}
\] which simplifies to
\[
\beta_{IV,u} = \frac{\beta_{uy}}{\beta_{ux}} + \beta_{xy}
\] Check that this is correct
nid <- 10000
gx <- rbinom(nid, 2, 0.3)
gu <- rbinom(nid, 2, 0.3)
u <- gu + rnorm(nid)
xl <- gx + rnorm(nid)
param <- expand.grid(
bux = seq(-1, 1, by=0.2),
buy = seq(-1, 1, by=0.2),
bxy = c(0, 0.5)
)
out <- lapply(1:nrow(param), function(i)
{
x <- xl + u * param$bux[i]
y <- x * param$bxy[i] + u * param$buy[i] + rnorm(nid)
p <- param[i,]
p$bgx <- get_effs(x, y, matrix(gx, nid, 1)) %>% mr() %>% {.$b}
p$bgu <- get_effs(x, y, matrix(gu, nid, 1)) %>% mr() %>% {.$b}
return(p)
}) %>% bind_rows()
out$exp_gu <- out$buy / out$bux + out$bxy
plot(bgu ~ exp_gu, subset(out, !is.infinite(exp_gu)))

LS0tCnRpdGxlOiAiRGlyZWN0IHZzIGNvbmZvdW5kZXIgaW5zdHJ1bWVudHMiCmF1dGhvcjogIkdpYnJhbiBIZW1hbmkiCmRhdGU6ICIyMDIyLTAyLTA5IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHNpbXVsYXRlR1ApCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoVHdvU2FtcGxlTVIpCmBgYAoKClNpbXVsYXRlIGEgbW9kZWwgd2hlcmUgZ2Vub3R5cGVzIGluZmx1ZW5jZSBYIGFuZCBVIGFuZCBVIGhhcyBzb21lIGluZmx1ZW5jZSBvbiBYLiBXaGF0IGFyZSB0aGUgZWZmZWN0cyBvZiBnZW5vdHlwZXMgb24gWD8gV2hhdCBmcmFjdGlvbiBvZiBHV0FTIGhpdHMgYXJlIGRpcmVjdCBlZmZlY3RzIGZvciBlYWNoIHBlcmNlbnRpbGUgb2YgbWFnbml0dWRlIG9mIEctWCBhc3NvYz8KCmBgYHtyfQpuZCA8LSAxMDAwCm5jIDwtIDEwMDAKbnAgPC0gMTAwCgpieHkgPC0gMC41CmJneCA8LSBhYnMocm5vcm0obmQpKQpiZ3UgPC0gYWJzKHJub3JtKG5jKSkKCmJndXggPC0gYmd1ICogYnh5CgpkIDwtIHRpYmJsZShiID0gYyhiZ3gsIGJndXgpLCBwYXRoPWMocmVwKCJkaXJlY3QiLCBuZCksIHJlcCgiY29uZm91bmRlciIsIGVhY2g9bmMpKSkgJT4lCglhcnJhbmdlKGIpICU+JQoJbXV0YXRlKG9yZD0xOm4oKSwgcGVyYyA9IG50aWxlKGIsIG5wKSkgJT4lCglncm91cF9ieShwZXJjKSAlPiUKCXN1bW1hcmlzZShiPW1lYW4oYiksIG49bigpLCBwcm9wPXN1bShwYXRoPT0iZGlyZWN0IikvbigpKQoKZCAlPiUKZ2dwbG90KC4sIGFlcyh4PXBlcmMsIHk9YikpICsKZ2VvbV9qaXR0ZXIoYWVzKGNvbG91cj1wcm9wKSkgKwpzY2FsZV9jb2xvdXJfZ3JhZGllbnQobG93PSJyZWQiLCBoaWdoPSJibHVlIikgKwpsYWJzKHk9IkdlbmV0aWMgZWZmZWN0IG9uIFgiLCB4PSJQZXJjZW50aWxlIiwgY29sb3VyPSJQcm9iYWJpbGl0eSBvZiBHV0FTIGhpdCBiZWluZyBhIGRpcmVjdCBlZmZlY3QiKSArCnRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikKYGBgCgpGaWd1cmUgaXMgdXNlZCBoZXJlOiBodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFYVzlmMGNVVXQ4akdaV21lYTExTmIza04ySnNSMHNRNS92aWV3P3VzcD1zaGFyaW5nCgojIyBCaWFzIGZyb20gRy1VIGluc3RydW1lbnRzCgpUaGlzIGlzIHRoZSBleHBlY3RlZCBlZmZlY3QgZXN0aW1hdGUgb2YgWCBvbiBZIHVzaW5nIGFuIGluc3RydW1lbnQgdGhhdCBhcmlzZXMgdmlhIFU6CgokJApcYmV0YV97SVYsdX0gPSBcZnJhY3tcYmV0YV97Z3V9IFxiZXRhX3t1eX0gKyBcYmV0YV97Z3V9IFxiZXRhX3t1eH0gXGJldGFfe3h5fX17XGJldGFfe2d1fSBcYmV0YV97dXh9fQokJAp3aGljaCBzaW1wbGlmaWVzIHRvCgokJApcYmV0YV97SVYsdX0gPSBcZnJhY3tcYmV0YV97dXl9fXtcYmV0YV97dXh9fSArIFxiZXRhX3t4eX0KJCQKQ2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpuaWQgPC0gMTAwMDAKZ3ggPC0gcmJpbm9tKG5pZCwgMiwgMC4zKQpndSA8LSByYmlub20obmlkLCAyLCAwLjMpCgp1IDwtIGd1ICsgcm5vcm0obmlkKQp4bCA8LSBneCArIHJub3JtKG5pZCkKCnBhcmFtIDwtIGV4cGFuZC5ncmlkKAoJYnV4ID0gc2VxKC0xLCAxLCBieT0wLjIpLAoJYnV5ID0gc2VxKC0xLCAxLCBieT0wLjIpLAoJYnh5ID0gYygwLCAwLjUpCikKCm91dCA8LSBsYXBwbHkoMTpucm93KHBhcmFtKSwgZnVuY3Rpb24oaSkKewoJeCA8LSB4bCArIHUgKiBwYXJhbSRidXhbaV0KCXkgPC0geCAqIHBhcmFtJGJ4eVtpXSArIHUgKiBwYXJhbSRidXlbaV0gKyBybm9ybShuaWQpCglwIDwtIHBhcmFtW2ksXQoJcCRiZ3ggPC0gZ2V0X2VmZnMoeCwgeSwgbWF0cml4KGd4LCBuaWQsIDEpKSAlPiUgbXIoKSAlPiUgey4kYn0KCXAkYmd1IDwtIGdldF9lZmZzKHgsIHksIG1hdHJpeChndSwgbmlkLCAxKSkgJT4lIG1yKCkgJT4lIHsuJGJ9CglyZXR1cm4ocCkKfSkgJT4lIGJpbmRfcm93cygpCgpvdXQkZXhwX2d1IDwtIG91dCRidXkgLyBvdXQkYnV4ICsgb3V0JGJ4eQpwbG90KGJndSB+IGV4cF9ndSwgc3Vic2V0KG91dCwgIWlzLmluZmluaXRlKGV4cF9ndSkpKQpgYGAKCgo=