Skip to content

Commit 4524049

Browse files
committed
v0.7.2 update
1 parent 832040f commit 4524049

File tree

5 files changed

+31
-15
lines changed

5 files changed

+31
-15
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
## Change logs
22

3+
### v0.7.2
4+
Labeling fix for `RiskDifference` summary
5+
6+
Adding option to extract standard errors from `TMLE` and `AIPTW`
7+
38
### v0.7.1
49
Warning for upcoming change for `IPTW` in v0.8.0. To better align with other causal estimators, `IPTW` will no longer
510
only return a vector of weights. Behind the scenes, `IPTW` will be able to estimate the marginal structural model

zepid/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ def summary(self, decimal=3):
411411
print(tabulate([['E=1', a, b], ['E=0', self._c, self._d]], headers=['', 'D=1', 'D=0'],
412412
tablefmt='grid'), '\n')
413413
print('======================================================================')
414-
print(' Risk Ratio ')
414+
print(' Risk Difference ')
415415
print('======================================================================')
416416
print(self.results[['Risk', 'SD(Risk)', 'Risk_LCL', 'Risk_UCL']].round(decimals=decimal))
417417
print('----------------------------------------------------------------------')

zepid/causal/doublyrobust/AIPW.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,11 @@ def __init__(self, df, exposure, outcome, weights=None, alpha=0.05):
114114
self.risk_ratio = None
115115
self.risk_difference_ci = None
116116
self.risk_ratio_ci = None
117+
self.risk_difference_se = None
117118

118119
self.average_treatment_effect = None
119120
self.average_treatment_effect_ci = None
121+
self.average_treatment_effect_se = None
120122

121123
self._fit_exposure_ = False
122124
self._fit_outcome_ = False
@@ -225,14 +227,15 @@ def fit(self):
225227
if self._continuous_outcome:
226228
self.average_treatment_effect = np.mean(dr_a1) - np.mean(dr_a0)
227229
var_ic = np.var((dr_a1 - dr_a0) - self.average_treatment_effect, ddof=1) / self.df.shape[0]
230+
self.average_treatment_effect_se = np.sqrt(var_ic)
228231
self.average_treatment_effect_ci = [self.average_treatment_effect - zalpha * np.sqrt(var_ic),
229232
self.average_treatment_effect + zalpha * np.sqrt(var_ic)]
230233

231234
else:
232235
self.risk_difference = np.mean(dr_a1) - np.mean(dr_a0)
233236
self.risk_ratio = np.mean(dr_a1) / np.mean(dr_a0)
234-
235237
var_ic = np.var((dr_a1 - dr_a0) - self.risk_difference, ddof=1) / self.df.shape[0]
238+
self.risk_difference_se = np.sqrt(var_ic)
236239
self.risk_difference_ci = [self.risk_difference - zalpha * np.sqrt(var_ic),
237240
self.risk_difference + zalpha * np.sqrt(var_ic)]
238241
else:

zepid/causal/doublyrobust/TMLE.py

+20-12
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,16 @@ def __init__(self, df, exposure, outcome, alpha=0.05, continuous_bound=0.0005):
185185

186186
self.risk_difference = None
187187
self.risk_difference_ci = None
188+
self.risk_difference_se = None
188189
self.risk_ratio = None
189190
self.risk_ratio_ci = None
191+
self.risk_ratio_se = None
190192
self.odds_ratio = None
191193
self.odds_ratio_ci = None
194+
self.odds_ratio_se = None
192195
self.average_treatment_effect = None
193196
self.average_treatment_effect_ci = None
197+
self.average_treatment_effect_se = None
194198

195199
def exposure_model(self, model, custom_model=None, bound=False, print_results=True):
196200
"""Estimation of Pr(A=1|L), which is termed as g(A=1|L) in the literature
@@ -437,19 +441,21 @@ def fit(self):
437441
ic = np.where(delta == 1,
438442
HAW * (y_unbound - Qstar) + (Qstar1 - Qstar0) - self.average_treatment_effect,
439443
Qstar1 - Qstar0 - self.average_treatment_effect)
440-
varIC = np.nanvar(ic, ddof=1) / self.df.shape[0]
441-
self.average_treatment_effect_ci = [self.average_treatment_effect - zalpha * math.sqrt(varIC),
442-
self.average_treatment_effect + zalpha * math.sqrt(varIC)]
444+
seIC = np.sqrt(np.nanvar(ic, ddof=1) / self.df.shape[0])
445+
self.average_treatment_effect_se = seIC
446+
self.average_treatment_effect_ci = [self.average_treatment_effect - zalpha * seIC,
447+
self.average_treatment_effect + zalpha * seIC]
443448
else:
444449
# Calculating Risk Difference
445450
self.risk_difference = np.nanmean(Qstar1 - Qstar0)
446451
# Influence Curve for CL
447452
ic = np.where(delta == 1,
448453
HAW * (self.df[self.outcome] - Qstar) + (Qstar1 - Qstar0) - self.risk_difference,
449454
(Qstar1 - Qstar0) - self.risk_difference)
450-
varIC = np.nanvar(ic, ddof=1) / self.df.shape[0]
451-
self.risk_difference_ci = [self.risk_difference - zalpha * np.sqrt(varIC),
452-
self.risk_difference + zalpha * np.sqrt(varIC)]
455+
seIC = np.sqrt(np.nanvar(ic, ddof=1) / self.df.shape[0])
456+
self.risk_difference_se = seIC
457+
self.risk_difference_ci = [self.risk_difference - zalpha * seIC,
458+
self.risk_difference + zalpha * seIC]
453459

454460
# Calculating Risk Ratio
455461
self.risk_ratio = np.nanmean(Qstar1) / np.nanmean(Qstar0)
@@ -459,9 +465,10 @@ def fit(self):
459465
(1/np.mean(Qstar0)) * (-1 * H0W * (self.df[self.outcome] - Qstar) + Qstar0 - np.mean(Qstar0))),
460466
(Qstar1 - np.mean(Qstar1)) + Qstar0 - np.mean(Qstar0))
461467

462-
varIC = np.nanvar(ic, ddof=1) / self.df.shape[0]
463-
self.risk_ratio_ci = [np.exp(np.log(self.risk_ratio) - zalpha * np.sqrt(varIC)),
464-
np.exp(np.log(self.risk_ratio) + zalpha * np.sqrt(varIC))]
468+
seIC = np.sqrt(np.nanvar(ic, ddof=1) / self.df.shape[0])
469+
self.risk_ratio_se = seIC
470+
self.risk_ratio_ci = [np.exp(np.log(self.risk_ratio) - zalpha * seIC),
471+
np.exp(np.log(self.risk_ratio) + zalpha * seIC)]
465472

466473
# Calculating Odds Ratio
467474
self.odds_ratio = (np.nanmean(Qstar1) / (1 - np.nanmean(Qstar1)
@@ -475,9 +482,10 @@ def fit(self):
475482

476483
((1 / (np.nanmean(Qstar1) * (1 - np.nanmean(Qstar1))) * Qstar1 -
477484
(1 / (np.nanmean(Qstar0) * (1 - np.nanmean(Qstar0))) * Qstar0))))
478-
varIC = np.nanvar(ic, ddof=1) / self.df.shape[0]
479-
self.odds_ratio_ci = [np.exp(np.log(self.odds_ratio) - zalpha * np.sqrt(varIC)),
480-
np.exp(np.log(self.odds_ratio) + zalpha * np.sqrt(varIC))]
485+
seIC = np.sqrt(np.nanvar(ic, ddof=1) / self.df.shape[0])
486+
self.odds_ratio_se = seIC
487+
self.odds_ratio_ci = [np.exp(np.log(self.odds_ratio) - zalpha * seIC),
488+
np.exp(np.log(self.odds_ratio) + zalpha * seIC)]
481489

482490
def summary(self, decimal=3):
483491
"""Prints summary of model results

zepid/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '0.7.1'
1+
__version__ = '0.7.2'

0 commit comments

Comments
 (0)