estimate_gxe | R Documentation |
Estimate contribution of GRSxE to variance in outcome phenotype
y |
Outcome phenotype |
GRS |
Polygenic score |
sim_num |
Number of permutations for bootstrap and fake GRSs |
estimate_gxe
returns a list containing parameter estimates for
alpha1, alpha2, beta, and gamma (xopt
), their standard error
(SExopt
), and the associated p-values (Pxopt
). The
corresponding estimates for the fake GRS are stored in the xopt0
,
SExopt0
, and Pxopt0
, respectively.
In addition, the Xopt
and Xopt0
matrices contain the
estimates for each bootstrap and fake GRS.
The tdiff
contains the t-statistic for the difference between the
real data estimates and those from the fake GRS.
library( GxE ) library( PearsonDS ) m = 100 # number of genetic markers n = 1e4 # sample size a0 = sqrt(.05) # linear effect of GRS on y b1 = sqrt(.3) # linear effect of E on y c1 = sqrt(.05) # interaction effect d1 = 0 # correlation between E and GRS skwE = 0 # skewness of E krtE = 3 # kurtosis of E skwN = 0 # skewness of the noise krtN = 3 # kurtosis of the noise pow = 1 # transformation power if (krtE <= skwE^2 + 1 | krtN <= skwN^2 + 1) { stop( 'Skew and kurtosis values not compatible (kurtosis > skew^2 + 1 not satisfied)' ) } sim_num = 1e2 # number of bootstrap / fake GRS # Simulation maf = matrix( runif( m ), nrow = 1 ) G = apply( maf, 2, function(x) rbinom( n, 2, x ) ) eff = matrix( runif( m ), ncol = 1 ) eff = eff / sqrt( sum( eff^2 ) ) GRS = scale( G %*% eff ) E = d1 * GRS + sqrt( 1 - d1^2 ) * matrix( rpearson( n, moments = c( 0, 1, skwE, krtE ) ) ) noi = matrix( rpearson( n, moments = c( 0, 1, skwN, krtN ) ) ) sig = sqrt( 1 - a0^2 - b1^2 - c1^2 * (1 + d1^2) - 2 * a0 * b1 * d1 ) z = scale( a0 * GRS + b1 * E + c1 * GRS * E + sig * noi ) Ftrans = function( s, p1, p2 ) ( (s-p1)^p2 - 1 ) / p2 if (pow != 0) { y = scale( Ftrans( z, min(z)-1e-5, pow ) ) } else { y = scale( log( z - min(z)+1e-5 ) ) } sel = which( abs( y ) > 10 ) while (length( sel ) > 0) { y[ sel ] = NA y = scale( y ) sel = which( abs( y ) > 10 ) } # Estimate interaction effect for GRS estimate_gxe( y, GRS, sim_num )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.