Signature
u_1 = gamma_0 + gamma_1 / s_1; u_2 = gamma_0 + gamma_1 / s_2; P_1 = Phi_1; P_2 = Phi_2; M = n_1 * (1 - P_1) / P_1 + n_2 * (1 - P_2) / P_2
| Inputs | Definition | Unit |
|---|---|---|
gamma_0 | Intercept of the Copas probit selection equation, fixed at one grid point | standard normal scale |
gamma_1 | Coefficient of the precision 1 / s in the Copas probit selection equation, at zero or above, fixed at one grid point | effect scale units |
s_1 | Standard error shared by the published studies of the first group, the large trials in the article | effect scale units |
s_2 | Standard error shared by the published studies of the second group, the small trials in the article | effect scale units |
Phi_1 | Standard normal distribution function at u_1, entered from NORM.S.DIST(u_1, TRUE) or pnorm(u_1) | probability |
Phi_2 | Standard normal distribution function at u_2, entered from NORM.S.DIST(u_2, TRUE) or pnorm(u_2) | probability |
n_1 | Number of published studies with standard error s_1 | studies |
n_2 | Number of published studies with standard error s_2 | studies |
u_1 | Index gamma_0 + gamma_1 / s_1 of the probit selection equation for the first group | standard normal scale |
|---|---|---|
u_2 | Index gamma_0 + gamma_1 / s_2 of the probit selection equation for the second group | standard normal scale |
P_1 | Probability that a study with standard error s_1 is published | probability |
P_2 | Probability that a study with standard error s_2 is published | probability |
M | Expected number of studies left unpublished, given the published ones and the assumed gamma_0 and gamma_1 | studies |
Function
Copas selection model publication probability and implied number of unpublished studies
Takes the two selection parameters of the Copas selection model, gamma_0 and gamma_1, and the standard errors of the published studies, and returns each study's probability of publication, Phi(gamma_0 + gamma_1 / s), and the number of unpublished studies those parameters imply, M. In a Copas sensitivity analysis gamma_0 and gamma_1 are fixed over a grid, and at each point the mean effect theta, the heterogeneity tau and the correlation rho are estimated by maximising the likelihood of the published estimates conditional on publication. That adjusted estimate has no closed form and comes from software such as the copas function of the R package metasens, so it is not written as a formula here; the publication probability and M are the quantities that label each grid point. The unadjusted estimate the analysis starts from is the common-effect inverse-variance mean of HE-FM-ADMA-001 (random-effects form HE-FM-ADMA-005), and the article's unadjusted 0.3671 is HE-FM-ADMA-001 applied to its twelve illustrative trials. A rank test for small-study effects is HE-FN-BEGG-001, with HE-FM-BEGG-002 and HE-CF-BEGG-001. Carrying an adjusted odds ratio into a decision model uses HE-FM-NMA-004 for the response probability on the new therapy and HE-FM-ICER-001 for the cost per extra responder. Notation follows the Copas Model article.
Computational function
Computational function: Copas selection parameters and implied unpublished studies from two assumed publication probabilities
Takes the publication probabilities assumed for studies at two standard errors, the way the article sets each scenario, solves the selection equation of HE-FM-COPAS-001 at both for gamma_1 and gamma_0, and returns them with the implied number of unpublished studies of HE-FM-COPAS-002 for the published studies at those standard errors. With quantiles z_a = Phi^-1(P_a) and z_b = Phi^-1(P_b), gamma_1 = (z_a minus z_b) / (1 / s_a minus 1 / s_b) and gamma_0 = z_b minus gamma_1 / s_b. Huang and colleagues set the selection parameters of their simulation the same way, by solving two publication probability equations for studies of 20 and 500 patients in a selection equation written on the square root of the sample size; the closed form above, for the equation in 1 / s, is derived. The copas function of metasens chooses its grid of gamma_0 and gamma_1 to cover a range of publication probabilities for the study with the largest standard error, and repeating the calculation over pairs of probabilities builds the selection columns of the article's scenario table. The adjusted effect at each pair needs the conditional maximum likelihood fit of the copas software and is not computed here.
Inputs and outputs:
P_aandP_bare the publication probabilities assumed for a study with standard errors_aand one withs_b, withs_abelows_b;z_aandz_bare their standard normal quantiles, entered from NORM.S.INV or qnorm;n_aandn_bare the numbers of published studies at each standard error. Outputs aregamma_1andgamma_0, the selection parameters on the standard normal scale, andM, the implied number of unpublished studies. The R and Python versions take vectors of probability pairs and return one row per scenario.Assumption:
P_ais at leastP_b, sogamma_1is zero or above (HE-AS-COPAS-002); both probabilities are above 0 and below 1, so the quantiles are finite; the two standard errors differ; published studies at each standard error share the probability (HE-AS-COPAS-005).Worked example (Article's moderate scenario): Probabilities of 0.95 for the large trials and 0.35 for the small ones give gamma_1 = 2.0302 / 7.5 = 0.2707 and gamma_0 = -1.062, as in the article's step 2, and 18.68 implied unpublished trials.
P_a = 0.95; P_b = 0.35; z_a = 1.6449; z_b = -0.3853; s_a = 0.10; s_b = 0.40; n_a = 2; n_b = 10; gamma_1 = 0.2707; gamma_0 = -1.062; M = 18.68Worked example (Article's severe scenario): Probabilities of 0.90 and 0.15 give gamma_1 = 0.3091, gamma_0 = -1.8091 and 56.89 implied unpublished trials, the article's 56.9.
P_a = 0.90; P_b = 0.15; z_a = 1.2816; z_b = -1.0364; s_a = 0.10; s_b = 0.40; n_a = 2; n_b = 10; gamma_1 = 0.3091; gamma_0 = -1.8091; M = 56.89Worked example (Equal probabilities): With both probabilities at 0.5 the quantiles are zero, so gamma_1 and gamma_0 are zero, publication does not depend on precision, and each of the twelve published trials stands for one unpublished trial, a limiting case.
P_a = 0.5; P_b = 0.5; z_a = 0; z_b = 0; s_a = 0.10; s_b = 0.40; n_a = 2; n_b = 10; gamma_1 = 0; gamma_0 = 0; M = 12Excel: With the probabilities in cells named PubProbA and PubProbB, the standard errors in StdErrA and StdErrB and the counts in TrialsA and TrialsB, a cell named GammaOneCF holds
=(NORM.S.INV(PubProbA)-NORM.S.INV(PubProbB))/(1/StdErrA-1/StdErrB), a cell named GammaZeroCF holds=NORM.S.INV(PubProbB)-GammaOneCF/StdErrBand a cell named ImpliedUnpubCF holds=TrialsA*(1-PubProbA)/PubProbA+TrialsB*(1-PubProbB)/PubProbB. For a grid of scenarios put one pair of probabilities per row and fill the same formulas down with relative references.R:
copas_scenario <- function(Pa, Pb, sa, sb, na, nb) { g1 <- (qnorm(Pa)-qnorm(Pb))/(1/sa-1/sb); g0 <- qnorm(Pb)-g1/sb; M <- na*(1-Pa)/Pa+nb*(1-Pb)/Pb; data.frame(Pa = Pa, Pb = Pb, gamma1 = g1, gamma0 = g0, M = M) }Runcopas_scenario(c(0.95, 0.90), c(0.35, 0.15), 0.10, 0.40, 2, 10)for the article's two selection scenarios; it returns gamma1 of 0.2707 and 0.3091, gamma0 of -1.0620 and -1.8091 and M of 18.677 and 56.889.Python:
def copas_scenario(Pa, Pb, sa, sb, na, nb): from statistics import NormalDist; q = NormalDist().inv_cdf; return [(pa, pb, (q(pa)-q(pb))/(1/sa-1/sb), q(pb)-(q(pa)-q(pb))/(1/sa-1/sb)/sb, na*(1-pa)/pa+nb*(1-pb)/pb) for pa, pb in zip(Pa, Pb)]Standard library only;copas_scenario([0.95, 0.90], [0.35, 0.15], 0.10, 0.40, 2, 10)returns the same rows as R.Test (Selection parameters reproduce both assumed probabilities): NORM.S.DIST of the index built from GammaZeroCF and GammaOneCF at each standard error returns PubProbA and PubProbB, within 1E-9 in total. Expected result TRUE. FALSE shows gamma_1 doubled or halved, or divided by the difference in standard errors instead of the difference in precisions, which gives gamma_1 = -6.767 and a probability of almost 0 at s_a. Excel check
=ABS(NORM.S.DIST(GammaZeroCF+GammaOneCF/StdErrA,TRUE)-PubProbA)+ABS(NORM.S.DIST(GammaZeroCF+GammaOneCF/StdErrB,TRUE)-PubProbB)<1E-9Test (Article's moderate scenario count): With PubProbA 0.95, PubProbB 0.35, TrialsA 2 and TrialsB 10, ImpliedUnpubCF holds 18.6767 within 0.001. Expected result TRUE. FALSE shows 1 / P in place of (1 minus P) / P, which returns 30.6767. Excel check
=ABS(ImpliedUnpubCF-18.6767)<0.001Common error (Standard errors in place of precisions): Dividing the difference in quantiles by s_a minus s_b, which is -0.30, instead of 1 / s_a minus 1 / s_b, which is 7.5, gives gamma_1 = -6.767 in the moderate scenario, a selection equation in which the most precise studies are the least likely to be published (computed here for illustration).
Source: Huang A, Komukai S, Friede T, Hattori S. Using clinical trial registries to inform Copas selection model for publication bias in meta-analysis. Research Synthesis Methods. 2021;12(5):658-673 (preprint arXiv:2005.14396 full text read; journal abstract read). Preprint section 3.1, on fixing the selection parameters for sensitivity analysis and translating them into the expected number of unpublished studies, and preprint section 4.2, Data generation, which derives (alpha_0, alpha_1) by solving P20 = Phi(alpha_0 + alpha_1 sqrt(20)) and P500 = Phi(alpha_0 + alpha_1 sqrt(500)). Carpenter J, Rücker G, Schwarzer G. copas: an R package for fitting the Copas selection model. The R Journal. 2009;1(2):31-36 (full text read). Equation (4), Pr(Z_i > 0) = Phi(gamma_0 + gamma_1 / s_i), which the two-point solution inverts. Schwarzer G, Carpenter JR, Rücker G. metasens R package version 1.5-3 reference manual, function copas, Details, on the grid of gamma0 and gamma1 values corresponding to a range of publication probabilities for the study with the largest standard error.
gamma_1 = (z_a - z_b) / (1 / s_a - 1 / s_b); gamma_0 = z_b - gamma_1 / s_b; M = n_a * (1 - P_a) / P_a + n_b * (1 - P_b) / P_b
Try this function
Implementations
Excel
Copas implied unpublished studies for two standard error groups in Excel
With the selection parameters in cells named GammaZeroGrp and GammaOneGrp, the group standard errors in StdErrGroupA and StdErrGroupB and the published counts in TrialsGroupA and TrialsGroupB, the five formulas fill cells named IndexGroupA, IndexGroupB, PubProbGroupA, PubProbGroupB and ExpectedUnpublished.
=GammaZeroGrp+GammaOneGrp/StdErrGroupA; =GammaZeroGrp+GammaOneGrp/StdErrGroupB; =NORM.S.DIST(IndexGroupA,TRUE); =NORM.S.DIST(IndexGroupB,TRUE); =TrialsGroupA*(1-PubProbGroupA)/PubProbGroupA+TrialsGroupB*(1-PubProbGroupB)/PubProbGroupB
Assumptions
Selection parameters fixed when counting implied unpublished studies
M is a consequence of the assumed gamma_0 and gamma_1, not an estimate from the published studies. Huang and colleagues present it as a more interpretable translation of the two sensitivity parameters, and propose using information in clinical trial registries to estimate all the parameters of the model.
Studies in each Copas group share one standard error
Every published study in a group has the same standard error and so the same publication probability, as in the article's example with two large trials at 0.10 and ten small trials at 0.40. With distinct standard errors each study forms its own group with a count of 1.
Unpublished studies per published study in the Copas count
If studies of a given precision are published independently with probability P, the expected number left unpublished for each one published is (1 minus P) / P, the mean number of failures per success of a negative binomial count (derived). P must be above zero; as P falls towards zero, M grows without bound.
Worked examples
Implied unpublished trials in the article's moderate scenario
With the moderate scenario's gamma_0 = -1.062 and gamma_1 = 0.2707, the two large trials (standard error 0.10) are published with probability 0.95 and the ten small trials (0.40) with probability 0.35. M is 0.105 + 18.571 = 18.68, the article's figure, so about 19 trials, nearly all small, would sit unpublished behind the twelve found (illustrative inputs; Phi values rounded to two decimals, as in the article).
gamma_0 = -1.062; gamma_1 = 0.2707; s_1 = 0.10; s_2 = 0.40; n_1 = 2; n_2 = 10; u_1 = 1.645; u_2 = -0.38525; Phi_1 = 0.95; Phi_2 = 0.35; P_1 = 0.95; P_2 = 0.35; M = 18.68
Implied unpublished trials in the article's severe scenario
The article's severe scenario, probabilities of 0.90 and 0.15, corresponds to gamma_1 = 0.3091 and gamma_0 = -1.8091 (HE-CF-COPAS-001). M is 0.222 + 56.667 = 56.89, about 57 unpublished trials, as in the article's scenario table (illustrative inputs; Phi values rounded to two decimals).
gamma_0 = -1.8091; gamma_1 = 0.3091; s_1 = 0.10; s_2 = 0.40; n_1 = 2; n_2 = 10; u_1 = 1.2819; u_2 = -1.03635; Phi_1 = 0.90; Phi_2 = 0.15; P_1 = 0.90; P_2 = 0.15; M = 56.89
Implied unpublished trials with almost no selection
With gamma_1 = 0 and gamma_0 = 3 every trial is published with probability 0.99865 whatever its size, and the twelve trials imply only 0.0162 unpublished ones. M reaches the zero of the article's no-selection row only in the limit as P reaches 1 (illustrative).
gamma_0 = 3; gamma_1 = 0; s_1 = 0.10; s_2 = 0.40; n_1 = 2; n_2 = 10; u_1 = 3; u_2 = 3; Phi_1 = 0.99865; Phi_2 = 0.99865; P_1 = 0.99865; P_2 = 0.99865; M = 0.0162
Common errors
Average publication probability used for the Copas unpublished count
Because (1 minus P) / P is convex in P, giving all twelve trials of the moderate scenario their average probability of 0.45 returns 14.67 unpublished trials instead of 18.68, about a fifth too few (computed here for illustration). The count has to be built group by group or study by study.
Total studies run reported as the Copas unpublished count
n / P counts the published studies as well as the unpublished ones. In the moderate scenario about 30.68 trials would have been run, of which 18.68 are unpublished; reporting 30.68 adds the twelve published trials to the count.
One grid point's implied count taken as the number of missing studies
M follows from the assumed selection, not from the data. In the article's illustration the moderate and severe scenarios imply about 19 and about 57 unpublished trials, yet with the correlation re-estimated both reproduce the group means, so the published trials cannot choose between them. The count is a figure to set against trial registries, which Huang and colleagues use to inform the model.
Sources
Huang and colleagues on the Copas and Shi count of unpublished studies
Huang A, Komukai S, Friede T, Hattori S. Using clinical trial registries to inform Copas selection model for publication bias in meta-analysis. Research Synthesis Methods. 2021;12(5):658-673 (preprint arXiv:2005.14396 full text read; journal abstract read). Preprint section 3.1, Brief review of the sensitivity analysis method by Copas and Shi, states that (alpha_0, alpha_1) were fixed as sensitivity parameters and (theta, tau, rho) estimated by maximising the conditional log-likelihood, and that according to the formula by Copas and Shi one can translate (alpha_0, alpha_1) into the expected number of unpublished studies by M = sum over the N published studies of {1 minus P(Y_i > 0 | s_i)} / P(Y_i > 0 | s_i), which is more interpretable. Their alpha_0, alpha_1 and Y_i are the gamma_0, gamma_1 and Z_i of the article. The abstract proposes using information in clinical trial registries to estimate all unknown parameters.
Carpenter, Rücker and Schwarzer on the approximate number of unpublished studies
Carpenter J, Rücker G, Schwarzer G. copas: an R package for fitting the Copas selection model. The R Journal. 2009;1(2):31-36 (full text read). Figure 1, the summary.copas output for nine trials of phenobarbital and periventricular haemorrhage, lists for each probability of publishing the study with the largest standard error the approximate number of studies the model suggests remain unpublished (N.unpubl), 0 at a probability of 1.00 and 9 at 0.37. The paper does not print the formula behind N.unpubl.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
