Winner’s curse for gaussian dist

# Simulate winner’s curse of choosing only those with p of less than 0.05 of gaussian dist with t tests in clinical trials using python

import numpy as np

from scipy import stats

import matplotlib.pyplot as plt

# Setting the seed for reproducibility

np.random.seed(42)

# Parameters

true_effect = 0.5  # True mean difference between treatment and placebo

std_dev = 3  # Standard deviation for both groups

num_trials = 1000  # Number of trials to simulate

sample_size = 300  # Number of participants in each group per trial

# Store results

p_values = []

effect_sizes = []

for _ in range(num_trials):

    # Generate data for treatment and placebo groups

    treatment_group = np.random.normal(true_effect, std_dev, sample_size)

    placebo_group = np.random.normal(0, std_dev, sample_size)

    # Calculate the effect size (mean difference)

    effect_size = np.mean(treatment_group) - np.mean(placebo_group)

    effect_sizes.append(effect_size)

    # Perform a t-test

    t_stat, p_val = stats.ttest_ind(treatment_group, placebo_group)

    p_values.append(p_val)

# Filter results where p-value < 0.05

significant_effect_sizes = [effect_sizes[i] for i in range(num_trials) if p_values[i] < 0.05]

# Analysis

print(f"True effect: {true_effect}")

print(f"Mean effect size across all trials: {np.mean(effect_sizes)}")

print(f"Mean effect size of significant trials (p < 0.05): {np.mean(significant_effect_sizes) if significant_effect_sizes else 'No significant results'}")

# Plotting

plt.figure(figsize=(12, 6))

plt.hist(effect_sizes, bins=20, color='blue', alpha=0.7, label='All Trials')

plt.hist(significant_effect_sizes, bins=20, color='red', alpha=0.7, label=f'Significant Trials (p < 0.05), n={len(significant_effect_sizes)}, mean={np.mean(significant_effect_sizes):.2f}')

plt.axvline(x=true_effect, color='green', linestyle='--', label='True Effect')

plt.axvline(x=np.mean(significant_effect_sizes) if significant_effect_sizes else 0, color='red', linestyle='--', label=f'Mean of Significant Trials')

plt.title('Effect Sizes of Trials')

plt.xlabel('Effect Size')

plt.ylabel('Frequency')

plt.legend()

plt.show()

留言

這個網誌中的熱門文章

可轉移性、普遍性、代表性和外部有效性

頻率學派 vs 貝氏學派

貝氏分析計算器