def causalsens()

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