in causalml/metrics/sensitivity.py [0:0]
def causalsens(self):
alpha_range = self.alpha_range
confound = self.confound
df = self.df
X = df[self.inference_features].values
p = df[self.p_col].values
treatment = df[self.treatment_col].values
y = df[self.outcome_col].values
preds = self.get_prediction(X, p, treatment, y)
sens_df = pd.DataFrame()
for a in alpha_range:
sens = defaultdict(list)
sens['alpha'] = a
adj = confound(a, p, treatment)
preds_adj = y - adj
s_preds = self.get_prediction(X, p, treatment, preds_adj)
ate, ate_lb, ate_ub = self.get_ate_ci(X, p, treatment, preds_adj)
s_preds_residul = preds_adj - s_preds
sens['rsqs'] = a**2*np.var(treatment)/np.var(s_preds_residul)
sens['New ATE'] = ate
sens['New ATE LB'] = ate_lb
sens['New ATE UB'] = ate_ub
sens_df = sens_df.append(pd.DataFrame(sens, index=[0]))
rss = np.sum(np.square(y - preds))
partial_rsqs = []
for feature in self.sensitivity_features:
df_new = df.copy()
X_new = df_new[self.inference_features].drop(feature, axis=1).copy()
y_new_preds = self.get_prediction(X_new, p, treatment, y)
rss_new = np.sum(np.square(y - y_new_preds))
partial_rsqs.append(((rss_new - rss)/rss))
partial_rsqs_df = pd.DataFrame([self.sensitivity_features, partial_rsqs]).T
partial_rsqs_df.columns = ['feature', 'partial_rsqs']
return sens_df, partial_rsqs_df