Summary

This R notebook contains basic formulas for running power calcs, especially for a typical RCT

Formulas

Standard baseline + end line clustered RCT with covariates

This is the most common RCT I encounter. We randomize at the cluster level, collect data for one baseline and one end line, and run an ANCOVA to estimate ATE.

\[ MDE = M_J\sigma_y\sqrt{\frac{2\rho}{J}+\frac{2(1-\rho)(1-R_K^2)}{JK}} \] \[ M_J = F^{-1}_t\left(1-\frac{\alpha}{2},J\right) + F^{-1}_t\left(\beta,J\right) \] Where…

  1. \(\sigma_y\) is the variance of the outcome variable.
  2. \(\rho\) is ICC
  3. J is the number of clusters in treatment or control (not both). Assumed constant across T and C
  4. K is the number of units per cluster. Assumed constant across all clusters.
  5. \(\alpha\) is significance level (usually .05)
  6. \(\beta\) is power (usually .8)
  7. \(R_K^2\) is the R squared from a regression of the outcome on the covariates

mj <- function (j, alpha = .05, beta = .8) {
  multiplier <- qt(1-alpha/2, j)+qt(beta,j)
  return(multiplier)
}

mde <- function (j, k, sigmay, icc, rsq, alpha = .05, beta = .8) {
  quant_under_sqrt <- (2*icc/j)+2*(1-icc)*(1-rsq)/(j*k)
  effect <- mj(j, alpha, beta)*sigmay*(quant_under_sqrt^.5)
  return(effect)
}

Replicating the APRIGP power calcs

villages <- 100
hh_per_v <- 10
icc <- 0.05
rsquared <- 0
sd_cons <- 721

mde(villages, hh_per_v, sd_cons, icc, rsquared)
[1] 109.8495
LS0tDQp0aXRsZTogIlNjcmFwIHBvd2VyIGNhbGNzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMgU3VtbWFyeQ0KVGhpcyBSIG5vdGVib29rIGNvbnRhaW5zIGJhc2ljIGZvcm11bGFzIGZvciBydW5uaW5nIHBvd2VyIGNhbGNzLCBlc3BlY2lhbGx5IGZvciBhIHR5cGljYWwgUkNUDQoNCiMjIEZvcm11bGFzDQojIyMgIFN0YW5kYXJkIGJhc2VsaW5lICsgZW5kIGxpbmUgY2x1c3RlcmVkIFJDVCB3aXRoIGNvdmFyaWF0ZXMNClRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIFJDVCBJIGVuY291bnRlci4gIFdlIHJhbmRvbWl6ZSBhdCB0aGUgY2x1c3RlciBsZXZlbCwgY29sbGVjdCBkYXRhIGZvciBvbmUgYmFzZWxpbmUgYW5kIG9uZSBlbmQgbGluZSwgYW5kIHJ1biBhbiBBTkNPVkEgdG8gZXN0aW1hdGUgQVRFLg0KDQokJCBNREUgPSBNX0pcc2lnbWFfeVxzcXJ0e1xmcmFjezJccmhvfXtKfStcZnJhY3syKDEtXHJobykoMS1SX0teMil9e0pLfX0gJCQNCiQkIE1fSiA9IEZeey0xfV90XGxlZnQoMS1cZnJhY3tcYWxwaGF9ezJ9LEpccmlnaHQpICsgRl57LTF9X3RcbGVmdChcYmV0YSxKXHJpZ2h0KSAkJA0KV2hlcmUuLi4NCg0KMS4gJFxzaWdtYV95JCBpcyB0aGUgdmFyaWFuY2Ugb2YgdGhlIG91dGNvbWUgdmFyaWFibGUuDQoyLiAkXHJobyQgaXMgSUNDDQozLiBKIGlzIHRoZSBudW1iZXIgb2YgY2x1c3RlcnMgaW4gdHJlYXRtZW50IG9yIGNvbnRyb2wgKG5vdCBib3RoKS4gQXNzdW1lZCBjb25zdGFudCBhY3Jvc3MgVCBhbmQgQw0KNC4gSyBpcyB0aGUgbnVtYmVyIG9mIHVuaXRzIHBlciBjbHVzdGVyLiBBc3N1bWVkIGNvbnN0YW50IGFjcm9zcyBhbGwgY2x1c3RlcnMuDQo1LiAkXGFscGhhJCBpcyBzaWduaWZpY2FuY2UgbGV2ZWwgKHVzdWFsbHkgLjA1KQ0KNi4gJFxiZXRhJCBpcyBwb3dlciAodXN1YWxseSAuOCkNCjcuICRSX0teMiQgaXMgdGhlIFIgc3F1YXJlZCBmcm9tIGEgcmVncmVzc2lvbiBvZiB0aGUgb3V0Y29tZSBvbiB0aGUgY292YXJpYXRlcw0KDQoNCg0KYGBge3J9DQoNCm1qIDwtIGZ1bmN0aW9uIChqLCBhbHBoYSA9IC4wNSwgYmV0YSA9IC44KSB7DQogIG11bHRpcGxpZXIgPC0gcXQoMS1hbHBoYS8yLCBqKStxdChiZXRhLGopDQogIHJldHVybihtdWx0aXBsaWVyKQ0KfQ0KDQptZGUgPC0gZnVuY3Rpb24gKGosIGssIHNpZ21heSwgaWNjLCByc3EsIGFscGhhID0gLjA1LCBiZXRhID0gLjgpIHsNCiAgcXVhbnRfdW5kZXJfc3FydCA8LSAoMippY2MvaikrMiooMS1pY2MpKigxLXJzcSkvKGoqaykNCiAgZWZmZWN0IDwtIG1qKGosIGFscGhhLCBiZXRhKSpzaWdtYXkqKHF1YW50X3VuZGVyX3NxcnReLjUpDQogIHJldHVybihlZmZlY3QpDQp9DQoNCg0KYGBgDQoNClJlcGxpY2F0aW5nIHRoZSBBUFJJR1AgcG93ZXIgY2FsY3MNCmBgYHtyfQ0KdmlsbGFnZXMgPC0gMTAwDQpoaF9wZXJfdiA8LSAxMA0KaWNjIDwtIDAuMDUNCnJzcXVhcmVkIDwtIDANCnNkX2NvbnMgPC0gNzIxDQoNCm1kZSh2aWxsYWdlcywgaGhfcGVyX3YsIHNkX2NvbnMsIGljYywgcnNxdWFyZWQpDQoNCg0KDQpgYGANCg0K