modeltrees 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. modeltrees-0.1.0/.gitignore +30 -0
  2. modeltrees-0.1.0/CHANGELOG.md +37 -0
  3. modeltrees-0.1.0/CITATION.cff +42 -0
  4. modeltrees-0.1.0/LICENSE +674 -0
  5. modeltrees-0.1.0/PKG-INFO +374 -0
  6. modeltrees-0.1.0/README.md +346 -0
  7. modeltrees-0.1.0/THIRD_PARTY_NOTICES.md +126 -0
  8. modeltrees-0.1.0/pyproject.toml +82 -0
  9. modeltrees-0.1.0/scripts/smoke_wheel.py +87 -0
  10. modeltrees-0.1.0/src/modeltrees/__init__.py +74 -0
  11. modeltrees-0.1.0/src/modeltrees/_api.py +1351 -0
  12. modeltrees-0.1.0/src/modeltrees/_design.py +505 -0
  13. modeltrees-0.1.0/src/modeltrees/_formula.py +329 -0
  14. modeltrees-0.1.0/src/modeltrees/_frame.py +260 -0
  15. modeltrees-0.1.0/src/modeltrees/_hansen_table.py +637 -0
  16. modeltrees-0.1.0/src/modeltrees/_loglik.py +37 -0
  17. modeltrees-0.1.0/src/modeltrees/_parallel.py +237 -0
  18. modeltrees-0.1.0/src/modeltrees/_predict.py +361 -0
  19. modeltrees-0.1.0/src/modeltrees/_reference.py +29 -0
  20. modeltrees-0.1.0/src/modeltrees/_report.py +393 -0
  21. modeltrees-0.1.0/src/modeltrees/_response.py +114 -0
  22. modeltrees-0.1.0/src/modeltrees/_vcov.py +223 -0
  23. modeltrees-0.1.0/src/modeltrees/errors.py +62 -0
  24. modeltrees-0.1.0/src/modeltrees/instability.py +385 -0
  25. modeltrees-0.1.0/src/modeltrees/models/__init__.py +38 -0
  26. modeltrees-0.1.0/src/modeltrees/models/_common.py +52 -0
  27. modeltrees-0.1.0/src/modeltrees/models/_qr.py +232 -0
  28. modeltrees-0.1.0/src/modeltrees/models/families.py +423 -0
  29. modeltrees-0.1.0/src/modeltrees/models/glm.py +215 -0
  30. modeltrees-0.1.0/src/modeltrees/models/glm_fit.py +482 -0
  31. modeltrees-0.1.0/src/modeltrees/models/lm.py +236 -0
  32. modeltrees-0.1.0/src/modeltrees/models/lm_fit.py +113 -0
  33. modeltrees-0.1.0/src/modeltrees/models/multinom.py +453 -0
  34. modeltrees-0.1.0/src/modeltrees/models/negbin.py +482 -0
  35. modeltrees-0.1.0/src/modeltrees/models/safelogit.py +256 -0
  36. modeltrees-0.1.0/src/modeltrees/node_model.py +219 -0
  37. modeltrees-0.1.0/src/modeltrees/pruning.py +75 -0
  38. modeltrees-0.1.0/src/modeltrees/pvalues.py +215 -0
  39. modeltrees-0.1.0/src/modeltrees/py.typed +0 -0
  40. modeltrees-0.1.0/src/modeltrees/split_search.py +582 -0
  41. modeltrees-0.1.0/src/modeltrees/tree.py +609 -0
  42. modeltrees-0.1.0/tests/blind_compare.py +770 -0
  43. modeltrees-0.1.0/tests/conftest.py +12 -0
  44. modeltrees-0.1.0/tests/fixture_frames.py +113 -0
  45. modeltrees-0.1.0/tests/fixtures/README.md +1011 -0
  46. modeltrees-0.1.0/tests/fixtures/blind_cases/README.md +189 -0
  47. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_03_lm.json +69 -0
  48. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_13_glm.json +69 -0
  49. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_22_glm.json +71 -0
  50. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_29_negbin.json +84 -0
  51. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_36_negbin.json +76 -0
  52. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_43_safelogit.json +89 -0
  53. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_47_safelogit.json +91 -0
  54. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_52_multinom.json +70 -0
  55. modeltrees-0.1.0/tests/fixtures/blind_cases/cases/blind_60_multinom.json +75 -0
  56. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_03_lm.csv +2954 -0
  57. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_03_lm.schema.json +46 -0
  58. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_13_glm.csv +1016 -0
  59. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_13_glm.schema.json +42 -0
  60. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_22_glm.csv +875 -0
  61. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_22_glm.schema.json +46 -0
  62. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_29_negbin.csv +413 -0
  63. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_29_negbin.schema.json +54 -0
  64. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_36_negbin.csv +962 -0
  65. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_36_negbin.schema.json +45 -0
  66. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_43_safelogit.csv +829 -0
  67. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_43_safelogit.schema.json +51 -0
  68. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_47_safelogit.csv +786 -0
  69. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_47_safelogit.schema.json +52 -0
  70. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_52_multinom.csv +622 -0
  71. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_52_multinom.schema.json +43 -0
  72. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_60_multinom.csv +779 -0
  73. modeltrees-0.1.0/tests/fixtures/blind_cases/data/blind_60_multinom.schema.json +43 -0
  74. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_03_lm.json +15598 -0
  75. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_13_glm.json +13442 -0
  76. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_22_glm.json +5106 -0
  77. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_29_negbin.json +1714 -0
  78. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_36_negbin.json +12865 -0
  79. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_43_safelogit.json +1604 -0
  80. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_47_safelogit.json +1552 -0
  81. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_52_multinom.json +3389 -0
  82. modeltrees-0.1.0/tests/fixtures/blind_cases/trees/blind_60_multinom.json +2613 -0
  83. modeltrees-0.1.0/tests/fixtures/blind_cases/vcov/blind_03_lm.json +395 -0
  84. modeltrees-0.1.0/tests/fixtures/blind_cases/vcov/blind_13_glm.json +1839 -0
  85. modeltrees-0.1.0/tests/fixtures/blind_cases/vcov/blind_22_glm.json +584 -0
  86. modeltrees-0.1.0/tests/fixtures/blind_cases/vcov/blind_43_safelogit.json +46 -0
  87. modeltrees-0.1.0/tests/fixtures/blind_cases/vcov/blind_52_multinom.json +281 -0
  88. modeltrees-0.1.0/tests/fixtures/cluster_trees/sim_cluster_models_glmtree_poisson_cluster.json +1868 -0
  89. modeltrees-0.1.0/tests/fixtures/cluster_trees/sim_cluster_models_multinom_cluster.json +1888 -0
  90. modeltrees-0.1.0/tests/fixtures/cluster_trees/sim_cluster_models_negbin_cluster.json +1893 -0
  91. modeltrees-0.1.0/tests/fixtures/cluster_trees/sim_cluster_models_safelogit_cluster.json +1894 -0
  92. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_logit.csv +301 -0
  93. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_logit.schema.json +28 -0
  94. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_near_separation.csv +101 -0
  95. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_near_separation.schema.json +24 -0
  96. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_not_converged.csv +101 -0
  97. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_not_converged.schema.json +24 -0
  98. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_proportions_weighted.csv +121 -0
  99. modeltrees-0.1.0/tests/fixtures/data/glm_binomial_proportions_weighted.schema.json +28 -0
  100. modeltrees-0.1.0/tests/fixtures/data/glm_gaussian_identity.csv +151 -0
  101. modeltrees-0.1.0/tests/fixtures/data/glm_gaussian_identity.schema.json +28 -0
  102. modeltrees-0.1.0/tests/fixtures/data/glm_gaussian_rank_deficient.csv +101 -0
  103. modeltrees-0.1.0/tests/fixtures/data/glm_gaussian_rank_deficient.schema.json +32 -0
  104. modeltrees-0.1.0/tests/fixtures/data/glm_gaussian_weighted.csv +151 -0
  105. modeltrees-0.1.0/tests/fixtures/data/glm_gaussian_weighted.schema.json +32 -0
  106. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_log.csv +201 -0
  107. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_log.schema.json +28 -0
  108. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_start.csv +201 -0
  109. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_start.schema.json +24 -0
  110. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_step_halving.csv +41 -0
  111. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_step_halving.schema.json +24 -0
  112. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_step_halving_maxit.csv +41 -0
  113. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_step_halving_maxit.schema.json +24 -0
  114. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_zeros.csv +201 -0
  115. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_zeros.schema.json +24 -0
  116. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_zeros_offset_weighted.csv +201 -0
  117. modeltrees-0.1.0/tests/fixtures/data/glm_poisson_zeros_offset_weighted.schema.json +36 -0
  118. modeltrees-0.1.0/tests/fixtures/data/quine.csv +147 -0
  119. modeltrees-0.1.0/tests/fixtures/data/quine.schema.json +36 -0
  120. modeltrees-0.1.0/tests/fixtures/data/sim_binomial.csv +801 -0
  121. modeltrees-0.1.0/tests/fixtures/data/sim_binomial.schema.json +46 -0
  122. modeltrees-0.1.0/tests/fixtures/data/sim_cluster.csv +814 -0
  123. modeltrees-0.1.0/tests/fixtures/data/sim_cluster.schema.json +54 -0
  124. modeltrees-0.1.0/tests/fixtures/data/sim_cluster_few.csv +740 -0
  125. modeltrees-0.1.0/tests/fixtures/data/sim_cluster_few.schema.json +36 -0
  126. modeltrees-0.1.0/tests/fixtures/data/sim_cluster_models.csv +831 -0
  127. modeltrees-0.1.0/tests/fixtures/data/sim_cluster_models.schema.json +63 -0
  128. modeltrees-0.1.0/tests/fixtures/data/sim_diabetes_like.csv +769 -0
  129. modeltrees-0.1.0/tests/fixtures/data/sim_diabetes_like.schema.json +49 -0
  130. modeltrees-0.1.0/tests/fixtures/data/sim_formula_factor.csv +601 -0
  131. modeltrees-0.1.0/tests/fixtures/data/sim_formula_factor.schema.json +50 -0
  132. modeltrees-0.1.0/tests/fixtures/data/sim_formula_logical.csv +501 -0
  133. modeltrees-0.1.0/tests/fixtures/data/sim_formula_logical.schema.json +36 -0
  134. modeltrees-0.1.0/tests/fixtures/data/sim_formula_logical_numeric.csv +501 -0
  135. modeltrees-0.1.0/tests/fixtures/data/sim_formula_logical_numeric.schema.json +36 -0
  136. modeltrees-0.1.0/tests/fixtures/data/sim_formula_na.csv +501 -0
  137. modeltrees-0.1.0/tests/fixtures/data/sim_formula_na.schema.json +38 -0
  138. modeltrees-0.1.0/tests/fixtures/data/sim_formula_ordered.csv +701 -0
  139. modeltrees-0.1.0/tests/fixtures/data/sim_formula_ordered.schema.json +34 -0
  140. modeltrees-0.1.0/tests/fixtures/data/sim_gaussian.csv +601 -0
  141. modeltrees-0.1.0/tests/fixtures/data/sim_gaussian.schema.json +59 -0
  142. modeltrees-0.1.0/tests/fixtures/data/sim_gaussian_nonzero_w0.csv +544 -0
  143. modeltrees-0.1.0/tests/fixtures/data/sim_gaussian_nonzero_w0.schema.json +61 -0
  144. modeltrees-0.1.0/tests/fixtures/data/sim_multinom.csv +901 -0
  145. modeltrees-0.1.0/tests/fixtures/data/sim_multinom.schema.json +52 -0
  146. modeltrees-0.1.0/tests/fixtures/data/sim_multinom_noref.csv +601 -0
  147. modeltrees-0.1.0/tests/fixtures/data/sim_multinom_noref.schema.json +34 -0
  148. modeltrees-0.1.0/tests/fixtures/data/sim_negbin.csv +601 -0
  149. modeltrees-0.1.0/tests/fixtures/data/sim_negbin.schema.json +57 -0
  150. modeltrees-0.1.0/tests/fixtures/data/sim_poisson.csv +801 -0
  151. modeltrees-0.1.0/tests/fixtures/data/sim_poisson.schema.json +50 -0
  152. modeltrees-0.1.0/tests/fixtures/data/sim_separation.csv +501 -0
  153. modeltrees-0.1.0/tests/fixtures/data/sim_separation.schema.json +41 -0
  154. modeltrees-0.1.0/tests/fixtures/extension_trees/quine_negbin_intercept.json +687 -0
  155. modeltrees-0.1.0/tests/fixtures/extension_trees/quine_negbin_intercept_deviance.json +675 -0
  156. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_multinom_cluster.json +2028 -0
  157. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_multinom_noref_onesplit.json +7971 -0
  158. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_multinom_nosplit.json +1026 -0
  159. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_multinom_onesplit.json +2024 -0
  160. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_negbin_cluster.json +1433 -0
  161. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_negbin_nosplit.json +727 -0
  162. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_negbin_onesplit.json +1429 -0
  163. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_negbin_theta_only.json +727 -0
  164. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_negbin_weights.json +3284 -0
  165. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_separation_safelogit.json +1445 -0
  166. modeltrees-0.1.0/tests/fixtures/extension_trees/sim_separation_safelogit_plain.json +1230 -0
  167. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_factor_glmtree_binomial_factor.json +1471 -0
  168. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_factor_glmtree_poisson_onepart.json +1461 -0
  169. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_factor_lmtree_factor.json +1463 -0
  170. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_factor_lmtree_noint.json +1462 -0
  171. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_factor_lmtree_onepart.json +1455 -0
  172. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_logical_lmtree_logical.json +1253 -0
  173. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_logical_lmtree_logical_noint.json +1253 -0
  174. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_logical_lmtree_logical_split.json +56 -0
  175. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_logical_numeric_lmtree_split.json +1250 -0
  176. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_na_lmtree_weights.json +3003 -0
  177. modeltrees-0.1.0/tests/fixtures/formula_trees/sim_formula_ordered_lmtree.json +2097 -0
  178. modeltrees-0.1.0/tests/fixtures/glm/glm_binomial_logit.json +355 -0
  179. modeltrees-0.1.0/tests/fixtures/glm/glm_binomial_near_separation.json +155 -0
  180. modeltrees-0.1.0/tests/fixtures/glm/glm_binomial_not_converged.json +155 -0
  181. modeltrees-0.1.0/tests/fixtures/glm/glm_binomial_proportions_weighted.json +175 -0
  182. modeltrees-0.1.0/tests/fixtures/glm/glm_gaussian_identity.json +361 -0
  183. modeltrees-0.1.0/tests/fixtures/glm/glm_gaussian_rank_deficient.json +261 -0
  184. modeltrees-0.1.0/tests/fixtures/glm/glm_gaussian_weighted.json +361 -0
  185. modeltrees-0.1.0/tests/fixtures/glm/glm_poisson_log.json +255 -0
  186. modeltrees-0.1.0/tests/fixtures/glm/glm_poisson_start.json +255 -0
  187. modeltrees-0.1.0/tests/fixtures/glm/glm_poisson_step_halving.json +95 -0
  188. modeltrees-0.1.0/tests/fixtures/glm/glm_poisson_step_halving_maxit.json +98 -0
  189. modeltrees-0.1.0/tests/fixtures/glm/glm_poisson_zeros.json +255 -0
  190. modeltrees-0.1.0/tests/fixtures/glm/glm_poisson_zeros_offset_weighted.json +255 -0
  191. modeltrees-0.1.0/tests/fixtures/node_fits/multinom_absent_class.json +705 -0
  192. modeltrees-0.1.0/tests/fixtures/node_fits/multinom_full.json +1861 -0
  193. modeltrees-0.1.0/tests/fixtures/node_fits/multinom_reference_absent.json +696 -0
  194. modeltrees-0.1.0/tests/fixtures/node_fits/multinom_single_class.json +347 -0
  195. modeltrees-0.1.0/tests/fixtures/node_fits/multinom_start.json +1861 -0
  196. modeltrees-0.1.0/tests/fixtures/node_fits/multinom_weights_zero.json +1861 -0
  197. modeltrees-0.1.0/tests/fixtures/node_fits/negbin_quine_deviance.json +200 -0
  198. modeltrees-0.1.0/tests/fixtures/node_fits/negbin_quine_eth_a_intercept.json +201 -0
  199. modeltrees-0.1.0/tests/fixtures/node_fits/negbin_quine_full.json +355 -0
  200. modeltrees-0.1.0/tests/fixtures/node_fits/negbin_sim_offset_weights.json +621 -0
  201. modeltrees-0.1.0/tests/fixtures/node_fits/negbin_sim_start.json +1263 -0
  202. modeltrees-0.1.0/tests/fixtures/node_fits/safelogit_complete.json +171 -0
  203. modeltrees-0.1.0/tests/fixtures/node_fits/safelogit_constant.json +180 -0
  204. modeltrees-0.1.0/tests/fixtures/node_fits/safelogit_none.json +586 -0
  205. modeltrees-0.1.0/tests/fixtures/node_fits/safelogit_quasi.json +751 -0
  206. modeltrees-0.1.0/tests/fixtures/predict/sim_binomial_glmtree_multisplit.json +340 -0
  207. modeltrees-0.1.0/tests/fixtures/predict/sim_gaussian_lmtree_weights.json +1932 -0
  208. modeltrees-0.1.0/tests/fixtures/predict/sim_poisson_glmtree_multisplit.json +452 -0
  209. modeltrees-0.1.0/tests/fixtures/pvalues.json +5185 -0
  210. modeltrees-0.1.0/tests/fixtures/thesis_quine_crosscheck.json +68 -0
  211. modeltrees-0.1.0/tests/fixtures/trees/sim_binomial_glmtree_aic_pruned.json +3350 -0
  212. modeltrees-0.1.0/tests/fixtures/trees/sim_binomial_glmtree_multisplit.json +2404 -0
  213. modeltrees-0.1.0/tests/fixtures/trees/sim_binomial_glmtree_multisplit_norestart.json +2404 -0
  214. modeltrees-0.1.0/tests/fixtures/trees/sim_binomial_glmtree_nosplit.json +918 -0
  215. modeltrees-0.1.0/tests/fixtures/trees/sim_binomial_glmtree_onesplit.json +1804 -0
  216. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_few_lmtree_cluster.json +1667 -0
  217. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_glmtree_binomial_cluster.json +2473 -0
  218. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_glmtree_binomial_cluster_weights.json +2643 -0
  219. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_glmtree_binomial_nocluster.json +3526 -0
  220. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_lmtree_cluster.json +1828 -0
  221. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_lmtree_cluster_weights.json +3366 -0
  222. modeltrees-0.1.0/tests/fixtures/trees/sim_cluster_lmtree_nocluster.json +3961 -0
  223. modeltrees-0.1.0/tests/fixtures/trees/sim_diabetes_like_glmtree_binomial.json +2080 -0
  224. modeltrees-0.1.0/tests/fixtures/trees/sim_diabetes_like_glmtree_binomial_aic.json +2937 -0
  225. modeltrees-0.1.0/tests/fixtures/trees/sim_diabetes_like_glmtree_binomial_aic_nodfsplit.json +3527 -0
  226. modeltrees-0.1.0/tests/fixtures/trees/sim_diabetes_like_glmtree_binomial_bic.json +2077 -0
  227. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_glmtree_gaussian_multisplit.json +2184 -0
  228. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_glmtree_gaussian_weights.json +4578 -0
  229. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_glmtree_gaussian_weights_nocaseweights.json +2184 -0
  230. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_intercept_only.json +1398 -0
  231. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_multisplit.json +2178 -0
  232. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_nosplit.json +712 -0
  233. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_numsplit_center.json +1398 -0
  234. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_onesplit.json +1398 -0
  235. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_trim_count.json +1398 -0
  236. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_weights.json +4444 -0
  237. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_weights_nocaseweights.json +2178 -0
  238. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_zero_weights.json +699 -0
  239. modeltrees-0.1.0/tests/fixtures/trees/sim_gaussian_lmtree_zero_weights_deleted.json +4405 -0
  240. modeltrees-0.1.0/tests/fixtures/trees/sim_poisson_glmtree_multisplit.json +2343 -0
  241. modeltrees-0.1.0/tests/fixtures/trees/sim_poisson_glmtree_nosplit.json +918 -0
  242. modeltrees-0.1.0/tests/fixtures/trees/sim_poisson_glmtree_weights.json +3706 -0
  243. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_few_lmtree_cluster.json +337 -0
  244. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_glmtree_binomial_cluster.json +577 -0
  245. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_lmtree_cluster.json +293 -0
  246. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_models_glmtree_poisson_cluster.json +293 -0
  247. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_models_multinom_cluster.json +337 -0
  248. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_models_negbin_cluster.json +293 -0
  249. modeltrees-0.1.0/tests/fixtures/vcovcl/sim_cluster_models_safelogit_cluster.json +293 -0
  250. modeltrees-0.1.0/tests/fixtures_io.py +44 -0
  251. modeltrees-0.1.0/tests/grown_trees.py +103 -0
  252. modeltrees-0.1.0/tests/slow.py +51 -0
  253. modeltrees-0.1.0/tests/test_api_fixtures.py +470 -0
  254. modeltrees-0.1.0/tests/test_blind_cases.py +353 -0
  255. modeltrees-0.1.0/tests/test_design.py +550 -0
  256. modeltrees-0.1.0/tests/test_design_fixtures.py +129 -0
  257. modeltrees-0.1.0/tests/test_encoding.py +75 -0
  258. modeltrees-0.1.0/tests/test_entry_points.py +261 -0
  259. modeltrees-0.1.0/tests/test_errors.py +102 -0
  260. modeltrees-0.1.0/tests/test_failures.py +388 -0
  261. modeltrees-0.1.0/tests/test_fast_paths.py +713 -0
  262. modeltrees-0.1.0/tests/test_formula.py +146 -0
  263. modeltrees-0.1.0/tests/test_formula_fixtures.py +544 -0
  264. modeltrees-0.1.0/tests/test_frame.py +244 -0
  265. modeltrees-0.1.0/tests/test_glm_fit.py +383 -0
  266. modeltrees-0.1.0/tests/test_hessians.py +887 -0
  267. modeltrees-0.1.0/tests/test_imports.py +98 -0
  268. modeltrees-0.1.0/tests/test_instability.py +869 -0
  269. modeltrees-0.1.0/tests/test_model_protocols.py +309 -0
  270. modeltrees-0.1.0/tests/test_model_tree.py +175 -0
  271. modeltrees-0.1.0/tests/test_multinom.py +880 -0
  272. modeltrees-0.1.0/tests/test_negbin.py +596 -0
  273. modeltrees-0.1.0/tests/test_node_models.py +356 -0
  274. modeltrees-0.1.0/tests/test_parallel.py +436 -0
  275. modeltrees-0.1.0/tests/test_predict.py +303 -0
  276. modeltrees-0.1.0/tests/test_predict_fixtures.py +205 -0
  277. modeltrees-0.1.0/tests/test_pvalues.py +219 -0
  278. modeltrees-0.1.0/tests/test_readme.py +37 -0
  279. modeltrees-0.1.0/tests/test_report.py +140 -0
  280. modeltrees-0.1.0/tests/test_response.py +153 -0
  281. modeltrees-0.1.0/tests/test_safelogit.py +489 -0
  282. modeltrees-0.1.0/tests/test_tree.py +742 -0
  283. modeltrees-0.1.0/tests/test_tree_vcov.py +401 -0
  284. modeltrees-0.1.0/tests/test_vcov.py +285 -0
  285. modeltrees-0.1.0/tests/test_vcov_fixtures.py +575 -0
  286. modeltrees-0.1.0/tests/tree_fixtures.py +92 -0
@@ -0,0 +1,30 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ .venv/
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .mypy_cache/
8
+ .coverage
9
+ htmlcov/
10
+ dist/
11
+ build/
12
+ *.egg-info/
13
+
14
+ # R
15
+ .Rhistory
16
+ .RData
17
+ .Rproj.user/
18
+ r/renv/library/
19
+ r/renv/staging/
20
+ r/renv/local/
21
+
22
+ # Project
23
+ reference/
24
+ notes/
25
+
26
+ # Editors and OS
27
+ .idea/
28
+ .vscode/
29
+ .DS_Store
30
+ .env
@@ -0,0 +1,37 @@
1
+ # Changelog
2
+
3
+ All notable changes are listed here. Versions follow 0.x semantics: names in
4
+ `modeltrees.__all__` and `modeltrees.models` may still change in a minor release
5
+ (docs/api-design.md, section 8.4). A change that alters a grown tree gets an
6
+ entry in docs/decisions.md.
7
+
8
+ ## 0.1.0 (2026-10-22)
9
+
10
+ First release.
11
+
12
+ - Model-based recursive partitioning ported from R's partykit 1.3-0: the
13
+ parameter instability tests with partykit's supLM p-values and chi-squared
14
+ factor tests, Bonferroni and Sidak adjustment, binary split search for
15
+ numeric, ordered and nominal partitioning variables, `minsize`, `maxdepth`,
16
+ `trim`, `restart`, `caseweights` and `numsplit`, and AIC and BIC post-pruning.
17
+ - Entry points `lmtree`, `glmtree` (gaussian, binomial and poisson with
18
+ canonical links), `negbintree`, `safelogittree`, `multinomtree`, and `mob` for
19
+ arrays and custom node models.
20
+ - Ports of R's `glm.fit`, `lm.fit`, `lm.wfit` and the LINPACK `dqrdc2` QR, and
21
+ of MASS's `glm.nb` and `theta.ml`.
22
+ - Negative binomial node model following Rusch (2012), with the log-likelihood
23
+ (default) or deviance split objective.
24
+ - Safe logit and multinomial logit node models, this project's own provisional
25
+ designs (docs/extensions-spec.md).
26
+ - Formula interface (`y ~ x1 + x2 | z1 + z2`) on any eager dataframe that
27
+ narwhals supports, or on a dict of arrays; levels, kinds and missing-data
28
+ handling as in docs/api-design.md.
29
+ - `cluster` for the instability tests, and cluster-robust leaf covariances
30
+ (`ModelTree.vcov`, HC0 and HC1 with `cadjust`) checked against
31
+ `sandwich::vcovCL`.
32
+ - `predict` with types `node`, `link`, `response`, `prob` and `class`;
33
+ `coef_table`, `summary`, `loglik`, `aic`, `bic` and a printed tree.
34
+ - Parallel split search with `n_jobs`, giving results identical to the serial
35
+ search under single-threaded BLAS.
36
+ - `modeltrees.reference_path()`, which runs the exact reference implementation
37
+ that the faster paths are tested against.
@@ -0,0 +1,42 @@
1
+ cff-version: 1.2.0
2
+ message: >-
3
+ If you use modeltrees, please cite the software and the publications
4
+ whose methods it implements: Zeileis, Hothorn and Hornik (2008) for
5
+ model-based recursive partitioning, and Rusch (2012) when you use the
6
+ negative binomial model.
7
+ title: modeltrees
8
+ abstract: >-
9
+ Model-based recursive partitioning (MOB) in Python, ported from R's
10
+ partykit, with negative binomial, safe logit and multinomial node models.
11
+ type: software
12
+ version: 0.1.0
13
+ license: GPL-3.0-only
14
+ authors:
15
+ - alias: BNM
16
+ references:
17
+ - type: article
18
+ title: Model-Based Recursive Partitioning
19
+ authors:
20
+ - family-names: Zeileis
21
+ given-names: Achim
22
+ - family-names: Hothorn
23
+ given-names: Torsten
24
+ - family-names: Hornik
25
+ given-names: Kurt
26
+ journal: Journal of Computational and Graphical Statistics
27
+ volume: 17
28
+ issue: 2
29
+ start: 492
30
+ end: 514
31
+ year: 2008
32
+ doi: 10.1198/106186008X319331
33
+ - type: thesis
34
+ title: Recursive Partitioning of Models of a Generalized Linear Model Type
35
+ authors:
36
+ - family-names: Rusch
37
+ given-names: Thomas
38
+ thesis-type: Doctoral thesis
39
+ institution:
40
+ name: WU Vienna
41
+ year: 2012
42
+ doi: 10.57938/f43bea09-fe60-44fb-a995-ba63733c8c69