aigroup-econ-mcp 1.3.3__py3-none-any.whl → 2.0.1__py3-none-any.whl

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 (198) hide show
  1. .gitignore +253 -0
  2. PKG-INFO +732 -0
  3. README.md +687 -0
  4. __init__.py +14 -0
  5. aigroup_econ_mcp-2.0.1.dist-info/METADATA +732 -0
  6. aigroup_econ_mcp-2.0.1.dist-info/RECORD +170 -0
  7. aigroup_econ_mcp-2.0.1.dist-info/entry_points.txt +2 -0
  8. aigroup_econ_mcp-2.0.1.dist-info/licenses/LICENSE +21 -0
  9. cli.py +32 -0
  10. econometrics/README.md +18 -0
  11. econometrics/__init__.py +191 -0
  12. econometrics/advanced_methods/modern_computing_machine_learning/__init__.py +30 -0
  13. econometrics/advanced_methods/modern_computing_machine_learning/causal_forest.py +253 -0
  14. econometrics/advanced_methods/modern_computing_machine_learning/double_ml.py +268 -0
  15. econometrics/advanced_methods/modern_computing_machine_learning/gradient_boosting.py +249 -0
  16. econometrics/advanced_methods/modern_computing_machine_learning/hierarchical_clustering.py +243 -0
  17. econometrics/advanced_methods/modern_computing_machine_learning/kmeans_clustering.py +293 -0
  18. econometrics/advanced_methods/modern_computing_machine_learning/neural_network.py +264 -0
  19. econometrics/advanced_methods/modern_computing_machine_learning/random_forest.py +195 -0
  20. econometrics/advanced_methods/modern_computing_machine_learning/support_vector_machine.py +226 -0
  21. econometrics/advanced_methods/modern_computing_machine_learning/test_all_modules.py +329 -0
  22. econometrics/advanced_methods/modern_computing_machine_learning/test_report.md +107 -0
  23. econometrics/basic_parametric_estimation/__init__.py +31 -0
  24. econometrics/basic_parametric_estimation/gmm/__init__.py +13 -0
  25. econometrics/basic_parametric_estimation/gmm/gmm_model.py +256 -0
  26. econometrics/basic_parametric_estimation/mle/__init__.py +13 -0
  27. econometrics/basic_parametric_estimation/mle/mle_model.py +241 -0
  28. econometrics/basic_parametric_estimation/ols/__init__.py +13 -0
  29. econometrics/basic_parametric_estimation/ols/ols_model.py +141 -0
  30. econometrics/causal_inference/__init__.py +66 -0
  31. econometrics/causal_inference/causal_identification_strategy/__init__.py +104 -0
  32. econometrics/causal_inference/causal_identification_strategy/control_function.py +112 -0
  33. econometrics/causal_inference/causal_identification_strategy/difference_in_differences.py +107 -0
  34. econometrics/causal_inference/causal_identification_strategy/event_study.py +119 -0
  35. econometrics/causal_inference/causal_identification_strategy/first_difference.py +89 -0
  36. econometrics/causal_inference/causal_identification_strategy/fixed_effects.py +103 -0
  37. econometrics/causal_inference/causal_identification_strategy/hausman_test.py +69 -0
  38. econometrics/causal_inference/causal_identification_strategy/instrumental_variables.py +145 -0
  39. econometrics/causal_inference/causal_identification_strategy/mediation_analysis.py +121 -0
  40. econometrics/causal_inference/causal_identification_strategy/moderation_analysis.py +109 -0
  41. econometrics/causal_inference/causal_identification_strategy/propensity_score_matching.py +140 -0
  42. econometrics/causal_inference/causal_identification_strategy/random_effects.py +100 -0
  43. econometrics/causal_inference/causal_identification_strategy/regression_discontinuity.py +98 -0
  44. econometrics/causal_inference/causal_identification_strategy/synthetic_control.py +111 -0
  45. econometrics/causal_inference/causal_identification_strategy/triple_difference.py +86 -0
  46. econometrics/distribution_analysis/__init__.py +28 -0
  47. econometrics/distribution_analysis/oaxaca_blinder.py +184 -0
  48. econometrics/distribution_analysis/time_series_decomposition.py +152 -0
  49. econometrics/distribution_analysis/variance_decomposition.py +179 -0
  50. econometrics/missing_data/__init__.py +18 -0
  51. econometrics/missing_data/imputation_methods.py +219 -0
  52. econometrics/missing_data/missing_data_measurement_error/__init__.py +0 -0
  53. econometrics/model_specification_diagnostics_robust_inference/README.md +173 -0
  54. econometrics/model_specification_diagnostics_robust_inference/__init__.py +78 -0
  55. econometrics/model_specification_diagnostics_robust_inference/diagnostic_tests/__init__.py +20 -0
  56. econometrics/model_specification_diagnostics_robust_inference/diagnostic_tests/diagnostic_tests_model.py +149 -0
  57. econometrics/model_specification_diagnostics_robust_inference/generalized_least_squares/__init__.py +15 -0
  58. econometrics/model_specification_diagnostics_robust_inference/generalized_least_squares/gls_model.py +130 -0
  59. econometrics/model_specification_diagnostics_robust_inference/model_selection/__init__.py +18 -0
  60. econometrics/model_specification_diagnostics_robust_inference/model_selection/model_selection_model.py +286 -0
  61. econometrics/model_specification_diagnostics_robust_inference/regularization/__init__.py +15 -0
  62. econometrics/model_specification_diagnostics_robust_inference/regularization/regularization_model.py +177 -0
  63. econometrics/model_specification_diagnostics_robust_inference/robust_errors/__init__.py +15 -0
  64. econometrics/model_specification_diagnostics_robust_inference/robust_errors/robust_errors_model.py +122 -0
  65. econometrics/model_specification_diagnostics_robust_inference/simultaneous_equations/__init__.py +15 -0
  66. econometrics/model_specification_diagnostics_robust_inference/simultaneous_equations/simultaneous_equations_model.py +246 -0
  67. econometrics/model_specification_diagnostics_robust_inference/weighted_least_squares/__init__.py +15 -0
  68. econometrics/model_specification_diagnostics_robust_inference/weighted_least_squares/wls_model.py +127 -0
  69. econometrics/nonparametric/__init__.py +35 -0
  70. econometrics/nonparametric/gam_model.py +117 -0
  71. econometrics/nonparametric/kernel_regression.py +161 -0
  72. econometrics/nonparametric/nonparametric_semiparametric_methods/__init__.py +0 -0
  73. econometrics/nonparametric/quantile_regression.py +249 -0
  74. econometrics/nonparametric/spline_regression.py +100 -0
  75. econometrics/spatial_econometrics/__init__.py +68 -0
  76. econometrics/spatial_econometrics/geographically_weighted_regression.py +211 -0
  77. econometrics/spatial_econometrics/gwr_simple.py +154 -0
  78. econometrics/spatial_econometrics/spatial_autocorrelation.py +356 -0
  79. econometrics/spatial_econometrics/spatial_durbin_model.py +177 -0
  80. econometrics/spatial_econometrics/spatial_econometrics_new/__init__.py +0 -0
  81. econometrics/spatial_econometrics/spatial_regression.py +315 -0
  82. econometrics/spatial_econometrics/spatial_weights.py +226 -0
  83. econometrics/specific_data_modeling/micro_discrete_limited_data/README.md +164 -0
  84. econometrics/specific_data_modeling/micro_discrete_limited_data/__init__.py +40 -0
  85. econometrics/specific_data_modeling/micro_discrete_limited_data/count_data_models.py +311 -0
  86. econometrics/specific_data_modeling/micro_discrete_limited_data/discrete_choice_models.py +294 -0
  87. econometrics/specific_data_modeling/micro_discrete_limited_data/limited_dependent_variable_models.py +282 -0
  88. econometrics/specific_data_modeling/survival_duration_data/__init__.py +0 -0
  89. econometrics/specific_data_modeling/time_series_panel_data/__init__.py +143 -0
  90. econometrics/specific_data_modeling/time_series_panel_data/arima_model.py +104 -0
  91. econometrics/specific_data_modeling/time_series_panel_data/cointegration_vecm.py +334 -0
  92. econometrics/specific_data_modeling/time_series_panel_data/dynamic_panel_models.py +653 -0
  93. econometrics/specific_data_modeling/time_series_panel_data/exponential_smoothing.py +176 -0
  94. econometrics/specific_data_modeling/time_series_panel_data/garch_model.py +198 -0
  95. econometrics/specific_data_modeling/time_series_panel_data/panel_diagnostics.py +125 -0
  96. econometrics/specific_data_modeling/time_series_panel_data/panel_var.py +60 -0
  97. econometrics/specific_data_modeling/time_series_panel_data/structural_break_tests.py +87 -0
  98. econometrics/specific_data_modeling/time_series_panel_data/time_varying_parameter_models.py +106 -0
  99. econometrics/specific_data_modeling/time_series_panel_data/unit_root_tests.py +204 -0
  100. econometrics/specific_data_modeling/time_series_panel_data/var_svar_model.py +372 -0
  101. econometrics/statistical_inference/__init__.py +21 -0
  102. econometrics/statistical_inference/bootstrap_methods.py +162 -0
  103. econometrics/statistical_inference/permutation_test.py +177 -0
  104. econometrics/statistical_inference/statistical_inference_techniques/__init__.py +0 -0
  105. econometrics/statistics/distribution_decomposition_methods/__init__.py +0 -0
  106. econometrics/survival_analysis/__init__.py +18 -0
  107. econometrics/survival_analysis/survival_models.py +259 -0
  108. econometrics/tests/basic_parametric_estimation_tests/__init__.py +3 -0
  109. econometrics/tests/basic_parametric_estimation_tests/test_gmm.py +128 -0
  110. econometrics/tests/basic_parametric_estimation_tests/test_mle.py +127 -0
  111. econometrics/tests/basic_parametric_estimation_tests/test_ols.py +100 -0
  112. econometrics/tests/causal_inference_tests/__init__.py +3 -0
  113. econometrics/tests/causal_inference_tests/detailed_test.py +441 -0
  114. econometrics/tests/causal_inference_tests/test_all_methods.py +418 -0
  115. econometrics/tests/causal_inference_tests/test_causal_identification_strategy.py +202 -0
  116. econometrics/tests/causal_inference_tests/test_difference_in_differences.py +53 -0
  117. econometrics/tests/causal_inference_tests/test_instrumental_variables.py +44 -0
  118. econometrics/tests/model_specification_diagnostics_tests/__init__.py +3 -0
  119. econometrics/tests/model_specification_diagnostics_tests/test_diagnostic_tests.py +86 -0
  120. econometrics/tests/model_specification_diagnostics_tests/test_robust_errors.py +89 -0
  121. econometrics/tests/specific_data_modeling_tests/__init__.py +3 -0
  122. econometrics/tests/specific_data_modeling_tests/test_arima.py +98 -0
  123. econometrics/tests/specific_data_modeling_tests/test_dynamic_panel.py +198 -0
  124. econometrics/tests/specific_data_modeling_tests/test_exponential_smoothing.py +105 -0
  125. econometrics/tests/specific_data_modeling_tests/test_garch.py +118 -0
  126. econometrics/tests/specific_data_modeling_tests/test_micro_discrete_limited_data.py +189 -0
  127. econometrics/tests/specific_data_modeling_tests/test_unit_root.py +156 -0
  128. econometrics/tests/specific_data_modeling_tests/test_var.py +124 -0
  129. econometrics//321/206/320/254/320/272/321/205/342/225/235/320/220/321/205/320/237/320/241/321/205/320/264/320/267/321/207/342/226/222/342/225/227/321/204/342/225/235/320/250/321/205/320/225/320/230/321/207/342/225/221/320/267/321/205/320/230/320/226/321/206/320/256/320/240.md +544 -0
  130. prompts/__init__.py +0 -0
  131. prompts/analysis_guides.py +43 -0
  132. pyproject.toml +85 -0
  133. resources/MCP_MASTER_GUIDE.md +422 -0
  134. resources/MCP_TOOLS_DATA_FORMAT_GUIDE.md +185 -0
  135. resources/__init__.py +0 -0
  136. server.py +97 -0
  137. tools/README.md +88 -0
  138. tools/__init__.py +119 -0
  139. tools/causal_inference_adapter.py +658 -0
  140. tools/data_loader.py +213 -0
  141. tools/decorators.py +38 -0
  142. tools/distribution_analysis_adapter.py +121 -0
  143. tools/econometrics_adapter.py +286 -0
  144. tools/gwr_simple_adapter.py +54 -0
  145. tools/machine_learning_adapter.py +567 -0
  146. tools/mcp_tool_groups/__init__.py +15 -0
  147. tools/mcp_tool_groups/basic_parametric_tools.py +173 -0
  148. tools/mcp_tool_groups/causal_inference_tools.py +643 -0
  149. tools/mcp_tool_groups/distribution_analysis_tools.py +169 -0
  150. tools/mcp_tool_groups/machine_learning_tools.py +422 -0
  151. tools/mcp_tool_groups/microecon_tools.py +325 -0
  152. tools/mcp_tool_groups/missing_data_tools.py +117 -0
  153. tools/mcp_tool_groups/model_specification_tools.py +402 -0
  154. tools/mcp_tool_groups/nonparametric_tools.py +225 -0
  155. tools/mcp_tool_groups/spatial_econometrics_tools.py +323 -0
  156. tools/mcp_tool_groups/statistical_inference_tools.py +131 -0
  157. tools/mcp_tool_groups/time_series_tools.py +494 -0
  158. tools/mcp_tools_registry.py +124 -0
  159. tools/microecon_adapter.py +412 -0
  160. tools/missing_data_adapter.py +73 -0
  161. tools/model_specification_adapter.py +369 -0
  162. tools/nonparametric_adapter.py +190 -0
  163. tools/output_formatter.py +563 -0
  164. tools/spatial_econometrics_adapter.py +318 -0
  165. tools/statistical_inference_adapter.py +90 -0
  166. tools/survival_analysis_adapter.py +46 -0
  167. tools/time_series_panel_data_adapter.py +858 -0
  168. tools/time_series_panel_data_tools.py +65 -0
  169. aigroup_econ_mcp/__init__.py +0 -19
  170. aigroup_econ_mcp/cli.py +0 -82
  171. aigroup_econ_mcp/config.py +0 -561
  172. aigroup_econ_mcp/server.py +0 -452
  173. aigroup_econ_mcp/tools/__init__.py +0 -19
  174. aigroup_econ_mcp/tools/base.py +0 -470
  175. aigroup_econ_mcp/tools/cache.py +0 -533
  176. aigroup_econ_mcp/tools/data_loader.py +0 -195
  177. aigroup_econ_mcp/tools/file_parser.py +0 -1027
  178. aigroup_econ_mcp/tools/machine_learning.py +0 -60
  179. aigroup_econ_mcp/tools/ml_ensemble.py +0 -210
  180. aigroup_econ_mcp/tools/ml_evaluation.py +0 -272
  181. aigroup_econ_mcp/tools/ml_models.py +0 -54
  182. aigroup_econ_mcp/tools/ml_regularization.py +0 -186
  183. aigroup_econ_mcp/tools/monitoring.py +0 -555
  184. aigroup_econ_mcp/tools/optimized_example.py +0 -229
  185. aigroup_econ_mcp/tools/panel_data.py +0 -619
  186. aigroup_econ_mcp/tools/regression.py +0 -214
  187. aigroup_econ_mcp/tools/statistics.py +0 -154
  188. aigroup_econ_mcp/tools/time_series.py +0 -698
  189. aigroup_econ_mcp/tools/timeout.py +0 -283
  190. aigroup_econ_mcp/tools/tool_descriptions.py +0 -410
  191. aigroup_econ_mcp/tools/tool_handlers.py +0 -1016
  192. aigroup_econ_mcp/tools/tool_registry.py +0 -478
  193. aigroup_econ_mcp/tools/validation.py +0 -482
  194. aigroup_econ_mcp-1.3.3.dist-info/METADATA +0 -525
  195. aigroup_econ_mcp-1.3.3.dist-info/RECORD +0 -30
  196. aigroup_econ_mcp-1.3.3.dist-info/entry_points.txt +0 -2
  197. /aigroup_econ_mcp-1.3.3.dist-info/licenses/LICENSE → /LICENSE +0 -0
  198. {aigroup_econ_mcp-1.3.3.dist-info → aigroup_econ_mcp-2.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,128 @@
1
+ """
2
+ GMM模型测试脚本
3
+ """
4
+
5
+ import sys
6
+ import os
7
+ import numpy as np
8
+
9
+ # 添加项目根目录到路径
10
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
11
+
12
+ from econometrics.basic_parametric_estimation.gmm.gmm_model import gmm_estimation, GMMResult
13
+
14
+
15
+ def test_gmm_basic():
16
+ """测试基本GMM功能"""
17
+ print("测试基本GMM功能...")
18
+
19
+ # 生成测试数据
20
+ np.random.seed(42)
21
+ n = 100
22
+ x1 = np.random.randn(n)
23
+ x2 = np.random.randn(n)
24
+ # 真实模型: y = 2 + 3*x1 + 2*x2 + noise
25
+ y = 2 + 3*x1 + 2*x2 + np.random.randn(n) * 0.5
26
+
27
+ # 准备数据
28
+ x_data = [[x1[i], x2[i]] for i in range(n)]
29
+ y_data = y.tolist()
30
+
31
+ # 执行GMM回归(无工具变量,退化为OLS)
32
+ result = gmm_estimation(y_data, x_data, feature_names=['x1', 'x2'])
33
+
34
+ # 验证结果类型
35
+ assert isinstance(result, GMMResult), "结果应为GMMResult类型"
36
+
37
+ # 验证系数数量
38
+ assert len(result.coefficients) == 3, "应该有3个系数(包括常数项)"
39
+
40
+ # 验证统计量合理性
41
+ assert result.n_obs == n, f"观测数量应为{n}"
42
+ assert result.n_moments == 3, "矩条件数量应为3"
43
+
44
+ print(" 系数:", result.coefficients)
45
+ print(" J统计量:", result.j_statistic)
46
+ print(" 基本GMM功能测试通过")
47
+
48
+
49
+ def test_gmm_with_instruments():
50
+ """测试带工具变量的GMM"""
51
+ print("测试带工具变量的GMM...")
52
+
53
+ # 生成测试数据(工具变量)
54
+ np.random.seed(42)
55
+ n = 80
56
+ x1 = np.random.randn(n)
57
+ x2 = np.random.randn(n)
58
+ z1 = np.random.randn(n) # 工具变量
59
+ z2 = np.random.randn(n) # 工具变量
60
+ # 真实模型: y = 2 + 3*x1 + 2*x2 + noise
61
+ y = 2 + 3*x1 + 2*x2 + np.random.randn(n) * 0.5
62
+
63
+ # 准备数据
64
+ x_data = [[x1[i], x2[i]] for i in range(n)]
65
+ instruments = [[z1[i], z2[i]] for i in range(n)]
66
+ y_data = y.tolist()
67
+
68
+ # 执行GMM回归(带工具变量)
69
+ result = gmm_estimation(y_data, x_data, instruments=instruments, feature_names=['x1', 'x2'])
70
+
71
+ # 验证系数数量
72
+ assert len(result.coefficients) == 3, "应该有3个系数(包括常数项)"
73
+
74
+ print(" 系数:", result.coefficients)
75
+ print(" 带工具变量的GMM测试通过")
76
+
77
+
78
+ def test_gmm_no_constant():
79
+ """测试不包含常数项的GMM"""
80
+ print("测试不包含常数项的GMM...")
81
+
82
+ # 生成测试数据
83
+ np.random.seed(42)
84
+ n = 50
85
+ x = np.random.randn(n)
86
+ # 真实模型: y = 2*x + noise
87
+ y = 2*x + np.random.randn(n) * 0.3
88
+
89
+ # 执行GMM回归(不包含常数项)
90
+ result = gmm_estimation(y.tolist(), x.tolist(), constant=False, feature_names=['x1'])
91
+
92
+ # 验证系数数量
93
+ assert len(result.coefficients) == 1, "应该有1个系数(不包括常数项)"
94
+
95
+ print(" 系数:", result.coefficients)
96
+ print(" 不包含常数项的GMM测试通过")
97
+
98
+
99
+ def test_gmm_errors():
100
+ """测试GMM错误处理"""
101
+ print("测试GMM错误处理...")
102
+
103
+ # 测试空数据
104
+ try:
105
+ gmm_estimation([], [])
106
+ assert False, "应该抛出ValueError异常"
107
+ except ValueError:
108
+ print(" 空数据错误处理正确")
109
+
110
+ # 测试不一致的数据维度
111
+ try:
112
+ y_data = [1, 2, 3]
113
+ x_data = [[1, 2], [3, 4]] # 维度不匹配
114
+ gmm_estimation(y_data, x_data)
115
+ assert False, "应该抛出ValueError异常"
116
+ except ValueError:
117
+ print(" 数据维度不一致错误处理正确")
118
+
119
+ print(" GMM错误处理测试通过")
120
+
121
+
122
+ if __name__ == "__main__":
123
+ print("开始测试GMM模型...")
124
+ test_gmm_basic()
125
+ test_gmm_with_instruments()
126
+ test_gmm_no_constant()
127
+ test_gmm_errors()
128
+ print("所有GMM测试通过!")
@@ -0,0 +1,127 @@
1
+ """
2
+ MLE模型测试脚本
3
+ """
4
+
5
+ import sys
6
+ import os
7
+ import numpy as np
8
+
9
+ # 添加项目根目录到路径
10
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
11
+
12
+ from econometrics.basic_parametric_estimation.mle.mle_model import mle_estimation, MLEResult
13
+
14
+
15
+ def test_mle_normal():
16
+ """测试正态分布MLE"""
17
+ print("测试正态分布MLE...")
18
+
19
+ # 生成正态分布测试数据
20
+ np.random.seed(42)
21
+ data = np.random.normal(5, 2, 100).tolist() # 均值5,标准差2
22
+
23
+ # 执行MLE估计
24
+ result = mle_estimation(data, distribution="normal")
25
+
26
+ # 验证结果类型
27
+ assert isinstance(result, MLEResult), "结果应为MLEResult类型"
28
+
29
+ # 验证参数数量
30
+ assert len(result.parameters) == 2, "正态分布应有2个参数(均值和标准差)"
31
+
32
+ # 验证参数名称
33
+ assert result.param_names == ["mu", "sigma"], "参数名称应为['mu', 'sigma']"
34
+
35
+ # 验证统计量合理性
36
+ assert result.n_obs == 100, "观测数量应为100"
37
+ assert result.log_likelihood < 0, "对数似然值应为负数"
38
+
39
+ print(" 估计参数:", result.parameters)
40
+ print(" 对数似然值:", result.log_likelihood)
41
+ print(" AIC:", result.aic)
42
+ print(" 正态分布MLE测试通过")
43
+
44
+
45
+ def test_mle_poisson():
46
+ """测试泊松分布MLE"""
47
+ print("测试泊松分布MLE...")
48
+
49
+ # 生成泊松分布测试数据
50
+ np.random.seed(42)
51
+ data = np.random.poisson(3, 100).tolist() # 均值3
52
+
53
+ # 执行MLE估计
54
+ result = mle_estimation(data, distribution="poisson")
55
+
56
+ # 验证结果类型
57
+ assert isinstance(result, MLEResult), "结果应为MLEResult类型"
58
+
59
+ # 验证参数数量
60
+ assert len(result.parameters) == 1, "泊松分布应有1个参数"
61
+
62
+ # 验证参数名称
63
+ assert result.param_names == ["lambda"], "参数名称应为['lambda']"
64
+
65
+ print(" 估计参数:", result.parameters)
66
+ print(" 泊松分布MLE测试通过")
67
+
68
+
69
+ def test_mle_exponential():
70
+ """测试指数分布MLE"""
71
+ print("测试指数分布MLE...")
72
+
73
+ # 生成指数分布测试数据
74
+ np.random.seed(42)
75
+ data = np.random.exponential(2, 100).tolist() # 均值2
76
+
77
+ # 执行MLE估计
78
+ result = mle_estimation(data, distribution="exponential")
79
+
80
+ # 验证结果类型
81
+ assert isinstance(result, MLEResult), "结果应为MLEResult类型"
82
+
83
+ # 验证参数数量
84
+ assert len(result.parameters) == 1, "指数分布应有1个参数"
85
+
86
+ # 验证参数名称
87
+ assert result.param_names == ["lambda"], "参数名称应为['lambda']"
88
+
89
+ print(" 估计参数:", result.parameters)
90
+ print(" 指数分布MLE测试通过")
91
+
92
+
93
+ def test_mle_errors():
94
+ """测试MLE错误处理"""
95
+ print("测试MLE错误处理...")
96
+
97
+ # 测试空数据
98
+ try:
99
+ mle_estimation([])
100
+ assert False, "应该抛出ValueError异常"
101
+ except ValueError:
102
+ print(" 空数据错误处理正确")
103
+
104
+ # 测试不支持的分布类型
105
+ try:
106
+ mle_estimation([1, 2, 3], distribution="unsupported")
107
+ assert False, "应该抛出ValueError异常"
108
+ except ValueError:
109
+ print(" 不支持的分布类型错误处理正确")
110
+
111
+ # 测试负值的指数分布数据
112
+ try:
113
+ mle_estimation([-1, 0, 1], distribution="exponential")
114
+ assert False, "应该抛出ValueError异常"
115
+ except ValueError:
116
+ print(" 负值指数分布数据错误处理正确")
117
+
118
+ print(" MLE错误处理测试通过")
119
+
120
+
121
+ if __name__ == "__main__":
122
+ print("开始测试MLE模型...")
123
+ test_mle_normal()
124
+ test_mle_poisson()
125
+ test_mle_exponential()
126
+ test_mle_errors()
127
+ print("所有MLE测试通过!")
@@ -0,0 +1,100 @@
1
+ """
2
+ OLS模型测试脚本
3
+ """
4
+
5
+ import sys
6
+ import os
7
+ import numpy as np
8
+
9
+ # 添加项目根目录到路径
10
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
11
+
12
+ from econometrics.basic_parametric_estimation.ols.ols_model import ols_regression, OLSResult
13
+
14
+
15
+ def test_ols_basic():
16
+ """测试基本OLS功能"""
17
+ print("测试基本OLS功能...")
18
+
19
+ # 生成测试数据
20
+ np.random.seed(42)
21
+ n = 100
22
+ x1 = np.random.randn(n)
23
+ x2 = np.random.randn(n)
24
+ # 真实模型: y = 2 + 3*x1 + 2*x2 + noise
25
+ y = 2 + 3*x1 + 2*x2 + np.random.randn(n) * 0.5
26
+
27
+ # 准备数据
28
+ x_data = [[x1[i], x2[i]] for i in range(n)]
29
+ y_data = y.tolist()
30
+
31
+ # 执行OLS回归
32
+ result = ols_regression(y_data, x_data, feature_names=['x1', 'x2'])
33
+
34
+ # 验证结果类型
35
+ assert isinstance(result, OLSResult), "结果应为OLSResult类型"
36
+
37
+ # 验证系数数量
38
+ assert len(result.coefficients) == 3, "应该有3个系数(包括常数项)"
39
+
40
+ # 验证统计量合理性
41
+ assert 0 <= result.r_squared <= 1, "R方应在0到1之间"
42
+ assert result.n_obs == n, f"观测数量应为{n}"
43
+
44
+ print(" 系数:", result.coefficients)
45
+ print(" R方:", result.r_squared)
46
+ print(" 调整R方:", result.adj_r_squared)
47
+ print(" F统计量:", result.f_statistic)
48
+ print(" 基本OLS功能测试通过")
49
+
50
+
51
+ def test_ols_no_constant():
52
+ """测试不包含常数项的OLS"""
53
+ print("测试不包含常数项的OLS...")
54
+
55
+ # 生成测试数据
56
+ np.random.seed(42)
57
+ n = 50
58
+ x = np.random.randn(n)
59
+ # 真实模型: y = 2*x + noise
60
+ y = 2*x + np.random.randn(n) * 0.3
61
+
62
+ # 执行OLS回归(不包含常数项)
63
+ result = ols_regression(y.tolist(), x.tolist(), constant=False, feature_names=['x1'])
64
+
65
+ # 验证系数数量
66
+ assert len(result.coefficients) == 1, "应该有1个系数(不包括常数项)"
67
+
68
+ print(" 系数:", result.coefficients)
69
+ print(" 不包含常数项的OLS测试通过")
70
+
71
+
72
+ def test_ols_errors():
73
+ """测试OLS错误处理"""
74
+ print("测试OLS错误处理...")
75
+
76
+ # 测试空数据
77
+ try:
78
+ ols_regression([], [])
79
+ assert False, "应该抛出ValueError异常"
80
+ except ValueError:
81
+ print(" 空数据错误处理正确")
82
+
83
+ # 测试不一致的数据维度
84
+ try:
85
+ y_data = [1, 2, 3]
86
+ x_data = [[1, 2], [3, 4]] # 维度不匹配
87
+ ols_regression(y_data, x_data)
88
+ assert False, "应该抛出ValueError异常"
89
+ except ValueError:
90
+ print(" 数据维度不一致错误处理正确")
91
+
92
+ print(" OLS错误处理测试通过")
93
+
94
+
95
+ if __name__ == "__main__":
96
+ print("开始测试OLS模型...")
97
+ test_ols_basic()
98
+ test_ols_no_constant()
99
+ test_ols_errors()
100
+ print("所有OLS测试通过!")
@@ -0,0 +1,3 @@
1
+ """
2
+ 因果推断测试模块
3
+ """