in spotify_confidence/analysis/frequentist/confidence_computers/sample_size_computer.py [0:0]
def _powered_effect_from_summary_df(df: DataFrame, **kwargs: Dict) -> DataFrame:
if (df[ADJUSTED_POWER].isna()).any():
df[REQUIRED_SAMPLE_SIZE_METRIC] = None
else:
all_weights = kwargs[TREATMENT_WEIGHTS]
control_weight, treatment_weights = all_weights[0], all_weights[1:]
current_number_of_units = kwargs[FINAL_EXPECTED_SAMPLE_SIZE]
binary = df[kwargs[IS_BINARY]].values[0]
z_alpha = st.norm.ppf(
1
- df[ADJUSTED_ALPHA_POWER_SAMPLE_SIZE].values[0] / (2 if df[PREFERENCE_TEST].values[0] == TWO_SIDED else 1)
)
z_power = st.norm.ppf(df[ADJUSTED_POWER].values[0])
non_inferiority = is_non_inferiority(df[NIM].values[0])
max_powered_effect = 0
for treatment_weight in treatment_weights:
kappa = control_weight / treatment_weight
proportion_of_total = (control_weight + treatment_weight) / sum(all_weights)
this_powered_effect = df[POWERED_EFFECT] = confidence_computers[ZTEST].powered_effect(
df=df.assign(kappa=kappa)
.assign(current_number_of_units=current_number_of_units)
.assign(proportion_of_total=proportion_of_total),
z_alpha=z_alpha,
z_power=z_power,
binary=binary,
non_inferiority=non_inferiority,
avg_column=POINT_ESTIMATE,
var_column=VARIANCE,
)
max_powered_effect = max(this_powered_effect.max(), max_powered_effect)
df[POWERED_EFFECT] = None if max_powered_effect == 0 else max_powered_effect
return df