# get_OCW: Obtain the proposed Optimal Covariate-Weighted (OCW)... In MetaIntegration: Ensemble Meta-Prediction Framework

## Description

Obtain the proposed Optimal Covariate-Weighted (OCW) estimates

## Usage

 `1` ```get_OCW(k, q, data.XB, gamma.EB, V.EB) ```

## Arguments

 `k` number of external models `q` total number of covariates (X,B) including the intercept (i.e. q=ncol(X)+ncol(B)+1) `data.XB` internal data (X,B) `gamma.EB` stack all k EB estimates in order, i.e. c(gamma.EB1,...,gamma.EBk) `V.EB` variance-covariance matrix obtained from function get_var_EB()

## Value

return weights of gamma.EB's, final estimates of OCW estimates and the corresponding variance-covariance matrix

## References

Reference: Gu, T., Taylor, J.M.G. and Mukherjee, B. (2020). An ensemble meta-prediction framework to integrate multiple regression models into a current study. Manuscript in preparation.

## Examples

 ``` 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75``` ```# Full model: Y|X1, X2, B # Reduced model 1: Y|X1 of sample size m1 # Reduced model 2: Y|X2 of sample size m2 # (X1, X2, B) follows normal distribution with mean zero, variance one and correlation 0.3 # Y|X1, X2, B follows Bernoulli[expit(-1-0.5*X1-0.5*X2+0.5*B)], where expit(x)=exp(x)/[1+exp(x)] set.seed(2333) n = 1000 data.n = data.frame(matrix(ncol = 4, nrow = n)) colnames(data.n) = c('Y', 'X1', 'X2', 'B') data.n[,c('X1', 'X2', 'B')] = MASS::mvrnorm(n, rep(0,3), diag(0.7,3)+0.3) data.n\$Y = rbinom(n, 1, expit(-1 - 0.5*data.n\$X1 - 0.5*data.n\$X2 + 0.5*data.n\$B)) # Generate the beta estimates from the external reduced model: # generate a data of size m from the full model first, then fit the reduced regression # to obtain the beta estiamtes and the corresponsing estimated variance m = m1 = m2 = 30000 data.m = data.frame(matrix(ncol = 4, nrow = m)) names(data.m) = c('Y', 'X1', 'X2', 'B') data.m[,c('X1', 'X2', 'B')] = MASS::mvrnorm(m, rep(0,3), diag(0.7,3)+0.3) data.m\$Y = rbinom(m, 1, expit(-1 - 0.5*data.m\$X1 - 0.5*data.m\$X2 + 0.5*data.m\$B)) #fit Y|X to obtain the external beta estimates, save the beta estimates and # the corresponding estimated variance fit.E1 = glm(Y ~ X1, data = data.m, family = binomial(link='logit')) fit.E2 = glm(Y ~ X2, data = data.m, family = binomial(link='logit')) beta.E1 = coef(fit.E1) beta.E2 = coef(fit.E2) names(beta.E1) = c('int', 'X1') names(beta.E2) = c('int', 'X2') V.E1 = vcov(fit.E1) V.E2 = vcov(fit.E2) #Save all the external model information into lists for later use betaHatExt_list = list(Ext1 = beta.E1, Ext2 = beta.E2) CovExt_list = list(Ext1 = V.E1, Ext2 = V.E2) rho = list(Ext1 = n/m1, Ext2 = n/m2) #get full model estimate from direct regression using the internal data only fit.gamma.I = glm(Y ~ X1 + X2 + B, data = data.n, family = binomial(link='logit')) gamma.I = coef(fit.gamma.I) #Get CML estimates using internal data and the beta estimates from the external # model 1 and 2, respectively gamma.CML1 = fxnCC_LogReg(p=2, q=4, YInt=data.n\$Y, XInt=data.n\$X1, BInt=cbind(data.n\$X2, data.n\$B), betaHatExt=beta.E1, gammaHatInt=gamma.I, n=nrow(data.n), tol=1e-8, maxIter=400,factor=1)[["gammaHat"]] gamma.CML2 = fxnCC_LogReg(p=2, q=4, YInt=data.n\$Y, XInt=data.n\$X2, BInt=cbind(data.n\$X1, data.n\$B), betaHatExt=beta.E2, gammaHatInt=gamma.I, n=nrow(data.n), tol=1e-8, maxIter=400, factor=1)[["gammaHat"]] #It's important to reorder gamma.CML2 so that it follows the order # (X1, X2, X3, B) as gamma.I and gamma.CML1 gamma.CML2 = c(gamma.CML2[1], gamma.CML2[3], gamma.CML2[2], gamma.CML2[4]) #Get Variance-covariance matricx of c(gamma.I, gamma.CML1, gamma.CML2) asy.CML = asympVar_LogReg(k=2, p=2,q=4, YInt=data.n\$Y, XInt=data.n[,c('X1','X2')], BInt=data.n\$B, gammaHatInt=gamma.I, betaHatExt_list=betaHatExt_list, CovExt_list=CovExt_list, rho=rho, ExUncertainty=TRUE) #Get the empirical Bayes (EB) estimates gamma.EB1 = get_gamma_EB(gamma.I, gamma.CML1, asy.CML[["asyV.I"]])[["gamma.EB"]] gamma.EB2 = get_gamma_EB(gamma.I, gamma.CML2, asy.CML[["asyV.I"]])[["gamma.EB"]] #Get the asymptotic variance of the EB estimates V.EB = get_var_EB(k=2, q=4, gamma.CML=c(gamma.CML1, gamma.CML2), gamma.I = gamma.I, asy.CML=asy.CML, seed=2333, nsim=2000) #Get the OCW estimates, the corresponding variance-covariance matrix of the # estimates and the weights of gamma.EB's get_OCW(k=2, q=4, data.XB=data.n[,c('X1','X2','B')], gamma.EB=c(gamma.EB1, gamma.EB2), V.EB=V.EB) ```

MetaIntegration documentation built on March 18, 2021, 1:06 a.m.