import pandas as pd
import numpy as np
from scipy import stats

# Load the dataset
df = pd.read_csv("Mock_Habit_and_RENSS_Data_for_20_Participants.csv")

# Convert date to datetime for proper ordering
df['Date'] = pd.to_datetime(df['Date'])

# Additional analysis
print("COMPREHENSIVE DATA ANALYSIS")
print("=" * 50)

# 1. Overall statistics
total_observations = len(df)
habit_performed_count = (df['HabitPerformed'] == 'Yes').sum()
object_in_position_count = (df['ObjectInPosition'] == 'Yes').sum()

print(f"Total observations: {total_observations}")
print(f"Total habit performances: {habit_performed_count} ({habit_performed_count/total_observations*100:.1f}%)")
print(f"Total days object was in position: {object_in_position_count} ({object_in_position_count/total_observations*100:.1f}%)")

# 2. Contingency table analysis
contingency_table = pd.crosstab(df['ObjectInPosition'], df['HabitPerformed'], margins=True)
print("\nContingency Table: Object Position vs Habit Performance")
print(contingency_table)

# Chi-square test
chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table.iloc[:-1, :-1])
print(f"\nChi-square test: χ² = {chi2:.3f}, p = {p_value:.3f}")

# 3. Effect sizes and practical significance
# Calculate odds ratio
a = contingency_table.iloc[1, 1]  # Object Yes, Habit Yes
b = contingency_table.iloc[1, 0]  # Object Yes, Habit No
c = contingency_table.iloc[0, 1]  # Object No, Habit Yes
d = contingency_table.iloc[0, 0]  # Object No, Habit No

odds_ratio = (a * d) / (b * c) if b * c != 0 else float('inf')
print(f"Odds ratio: {odds_ratio:.3f}")

# 4. Daily pattern analysis
daily_habits = df.groupby('Date').agg({
    'HabitPerformed': lambda x: (x == 'Yes').mean() * 100,
    'ObjectInPosition': lambda x: (x == 'Yes').mean() * 100,
    'Participant': 'count'
}).reset_index()

print("\nDaily Analysis:")
print(daily_habits)

# 5. Participant-level analysis
participant_analysis = df.groupby('Participant').agg({
    'HabitPerformed': lambda x: (x == 'Yes').mean() * 100,
    'ObjectInPosition': lambda x: (x == 'Yes').mean() * 100
}).reset_index()

# Calculate correlation at participant level
participant_correlation = participant_analysis['HabitPerformed'].corr(participant_analysis['ObjectInPosition'])
print(f"\nParticipant-level correlation between habit performance and object placement: {participant_correlation:.3f}")

# 6. High vs low object placement groups
median_object_placement = participant_analysis['ObjectInPosition'].median()
high_object_group = participant_analysis[participant_analysis['ObjectInPosition'] >= median_object_placement]['HabitPerformed']
low_object_group = participant_analysis[participant_analysis['ObjectInPosition'] < median_object_placement]['HabitPerformed']

print(f"\nMedian object placement rate: {median_object_placement:.1f}%")
print(f"High object placement group (n={len(high_object_group)}): Mean habit rate = {high_object_group.mean():.1f}%")
print(f"Low object placement group (n={len(low_object_group)}): Mean habit rate = {low_object_group.mean():.1f}%")

# T-test between groups
if len(high_object_group) > 1 and len(low_object_group) > 1:
    t_stat, p_val = stats.ttest_ind(high_object_group, low_object_group)
    print(f"T-test between groups: t = {t_stat:.3f}, p = {p_val:.3f}")

# 7. RENSS analysis
df['RENSS_Total'] = df.iloc[:, 4:16].sum(axis=1)
print(f"\nRENSS Total Score Statistics:")
print(f"Mean: {df['RENSS_Total'].mean():.2f}")
print(f"Standard deviation: {df['RENSS_Total'].std():.2f}")
print(f"Range: {df['RENSS_Total'].min()} - {df['RENSS_Total'].max()}")

# Correlation between RENSS and habit performance
renss_habit_corr = df.groupby('Participant').agg({
    'RENSS_Total': 'mean',
    'HabitPerformed': lambda x: (x == 'Yes').mean()
}).corr().iloc[0, 1]

print(f"Correlation between average RENSS score and habit performance rate: {renss_habit_corr:.3f}")

# Save comprehensive summary
summary_data = {
    'Metric': [
        'Overall Habit Completion Rate (%)',
        'Overall Object Placement Rate (%)',
        'Participant-level Correlation (Habit vs Object)',
        'Chi-square p-value',
        'Odds Ratio',
        'Average RENSS Score',
        'RENSS-Habit Correlation'
    ],
    'Value': [
        f"{habit_performed_count/total_observations*100:.1f}",
        f"{object_in_position_count/total_observations*100:.1f}",
        f"{participant_correlation:.3f}",
        f"{p_value:.3f}",
        f"{odds_ratio:.3f}",
        f"{df['RENSS_Total'].mean():.2f}",
        f"{renss_habit_corr:.3f}"
    ]
}

summary_df = pd.DataFrame(summary_data)
summary_df.to_csv("experiment_summary.csv", index=False)
print("\nExperiment summary saved to 'experiment_summary.csv'")
print(summary_df)