hierarchical_model.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from pymer4.models import Lmer
  2. def hierarchical_model_regions(dataframe):
  3. # overall p-value
  4. df_reduced = dataframe[['logepsilon', 'patient', 'binning_focus', 'region']]
  5. model = Lmer('logepsilon ~ binning_focus*region + (1|patient)',
  6. data=df_reduced)
  7. model.fit()
  8. anova_result = model.anova(force_orthogonal=True)
  9. global_pvals = anova_result['P-val']
  10. # separate p-values
  11. pvals_regions = dict()
  12. for reg in dataframe.region.unique():
  13. print(reg)
  14. df_region = dataframe[dataframe['region'] == reg]
  15. df_reduced = df_region[['logepsilon', 'patient', 'binning_focus']]
  16. # for formulas, check
  17. # https://stats.stackexchange.com/questions/13166/rs-lmer-cheat-sheet
  18. model = Lmer('logepsilon ~ binning_focus + (1|patient)',
  19. data=df_reduced)
  20. model.fit()
  21. anova_result = model.anova(force_orthogonal=True)
  22. region_pval = anova_result['P-val'].item()
  23. pvals_regions[reg] = region_pval
  24. return global_pvals, pvals_regions
  25. def hierarchical_model_hemispheres(dataframe):
  26. df_reduced = dataframe[['logepsilon', 'patient', 'binning_focus']]
  27. model = Lmer('logepsilon ~ binning_focus + (1|patient)',
  28. data=df_reduced)
  29. model.fit()
  30. anova_result = model.anova(force_orthogonal=True)
  31. pval = anova_result['P-val'].item()
  32. return pval