aigroup-econ-mcp 0.4.2__py3-none-any.whl → 1.4.3__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.
- .gitignore +253 -0
- PKG-INFO +710 -0
- README.md +672 -0
- __init__.py +14 -0
- aigroup_econ_mcp-1.4.3.dist-info/METADATA +710 -0
- aigroup_econ_mcp-1.4.3.dist-info/RECORD +92 -0
- aigroup_econ_mcp-1.4.3.dist-info/entry_points.txt +2 -0
- aigroup_econ_mcp-1.4.3.dist-info/licenses/LICENSE +21 -0
- cli.py +28 -0
- econometrics/README.md +18 -0
- econometrics/__init__.py +191 -0
- econometrics/advanced_methods/modern_computing_machine_learning/__init__.py +0 -0
- econometrics/basic_parametric_estimation/__init__.py +31 -0
- econometrics/basic_parametric_estimation/gmm/__init__.py +13 -0
- econometrics/basic_parametric_estimation/gmm/gmm_model.py +256 -0
- econometrics/basic_parametric_estimation/mle/__init__.py +13 -0
- econometrics/basic_parametric_estimation/mle/mle_model.py +241 -0
- econometrics/basic_parametric_estimation/ols/__init__.py +13 -0
- econometrics/basic_parametric_estimation/ols/ols_model.py +141 -0
- econometrics/causal_inference/causal_identification_strategy/__init__.py +0 -0
- econometrics/missing_data/missing_data_measurement_error/__init__.py +0 -0
- econometrics/model_specification_diagnostics_robust_inference/README.md +173 -0
- econometrics/model_specification_diagnostics_robust_inference/__init__.py +78 -0
- econometrics/model_specification_diagnostics_robust_inference/diagnostic_tests/__init__.py +20 -0
- econometrics/model_specification_diagnostics_robust_inference/diagnostic_tests/diagnostic_tests_model.py +149 -0
- econometrics/model_specification_diagnostics_robust_inference/generalized_least_squares/__init__.py +15 -0
- econometrics/model_specification_diagnostics_robust_inference/generalized_least_squares/gls_model.py +130 -0
- econometrics/model_specification_diagnostics_robust_inference/model_selection/__init__.py +18 -0
- econometrics/model_specification_diagnostics_robust_inference/model_selection/model_selection_model.py +286 -0
- econometrics/model_specification_diagnostics_robust_inference/regularization/__init__.py +15 -0
- econometrics/model_specification_diagnostics_robust_inference/regularization/regularization_model.py +177 -0
- econometrics/model_specification_diagnostics_robust_inference/robust_errors/__init__.py +15 -0
- econometrics/model_specification_diagnostics_robust_inference/robust_errors/robust_errors_model.py +122 -0
- econometrics/model_specification_diagnostics_robust_inference/simultaneous_equations/__init__.py +15 -0
- econometrics/model_specification_diagnostics_robust_inference/simultaneous_equations/simultaneous_equations_model.py +246 -0
- econometrics/model_specification_diagnostics_robust_inference/weighted_least_squares/__init__.py +15 -0
- econometrics/model_specification_diagnostics_robust_inference/weighted_least_squares/wls_model.py +127 -0
- econometrics/nonparametric/nonparametric_semiparametric_methods/__init__.py +0 -0
- econometrics/spatial_econometrics/spatial_econometrics_new/__init__.py +0 -0
- econometrics/specific_data_modeling/micro_discrete_limited_data/__init__.py +0 -0
- econometrics/specific_data_modeling/survival_duration_data/__init__.py +0 -0
- econometrics/specific_data_modeling/time_series_panel_data/__init__.py +143 -0
- econometrics/specific_data_modeling/time_series_panel_data/arima_model.py +104 -0
- econometrics/specific_data_modeling/time_series_panel_data/cointegration_vecm.py +334 -0
- econometrics/specific_data_modeling/time_series_panel_data/dynamic_panel_models.py +653 -0
- econometrics/specific_data_modeling/time_series_panel_data/exponential_smoothing.py +176 -0
- econometrics/specific_data_modeling/time_series_panel_data/garch_model.py +198 -0
- econometrics/specific_data_modeling/time_series_panel_data/panel_diagnostics.py +125 -0
- econometrics/specific_data_modeling/time_series_panel_data/panel_var.py +60 -0
- econometrics/specific_data_modeling/time_series_panel_data/structural_break_tests.py +87 -0
- econometrics/specific_data_modeling/time_series_panel_data/time_varying_parameter_models.py +106 -0
- econometrics/specific_data_modeling/time_series_panel_data/unit_root_tests.py +204 -0
- econometrics/specific_data_modeling/time_series_panel_data/var_svar_model.py +372 -0
- econometrics/statistical_inference/statistical_inference_techniques/__init__.py +0 -0
- econometrics/statistics/distribution_decomposition_methods/__init__.py +0 -0
- econometrics/tests/basic_parametric_estimation_tests/__init__.py +3 -0
- econometrics/tests/basic_parametric_estimation_tests/test_gmm.py +128 -0
- econometrics/tests/basic_parametric_estimation_tests/test_mle.py +127 -0
- econometrics/tests/basic_parametric_estimation_tests/test_ols.py +100 -0
- econometrics/tests/model_specification_diagnostics_tests/__init__.py +3 -0
- econometrics/tests/model_specification_diagnostics_tests/test_diagnostic_tests.py +86 -0
- econometrics/tests/model_specification_diagnostics_tests/test_robust_errors.py +89 -0
- econometrics/tests/specific_data_modeling_tests/__init__.py +3 -0
- econometrics/tests/specific_data_modeling_tests/test_arima.py +98 -0
- econometrics/tests/specific_data_modeling_tests/test_dynamic_panel.py +198 -0
- econometrics/tests/specific_data_modeling_tests/test_exponential_smoothing.py +105 -0
- econometrics/tests/specific_data_modeling_tests/test_garch.py +118 -0
- econometrics/tests/specific_data_modeling_tests/test_unit_root.py +156 -0
- econometrics/tests/specific_data_modeling_tests/test_var.py +124 -0
- prompts/__init__.py +0 -0
- prompts/analysis_guides.py +43 -0
- pyproject.toml +78 -0
- resources/MCP_MASTER_GUIDE.md +422 -0
- resources/MCP_TOOLS_DATA_FORMAT_GUIDE.md +185 -0
- resources/__init__.py +0 -0
- server.py +83 -0
- tools/README.md +88 -0
- tools/__init__.py +45 -0
- tools/data_loader.py +213 -0
- tools/decorators.py +38 -0
- tools/econometrics_adapter.py +286 -0
- tools/mcp_tool_groups/__init__.py +1 -0
- tools/mcp_tool_groups/basic_parametric_tools.py +173 -0
- tools/mcp_tool_groups/model_specification_tools.py +402 -0
- tools/mcp_tool_groups/time_series_tools.py +494 -0
- tools/mcp_tools_registry.py +114 -0
- tools/model_specification_adapter.py +369 -0
- tools/output_formatter.py +563 -0
- tools/time_series_panel_data_adapter.py +858 -0
- tools/time_series_panel_data_tools.py +65 -0
- aigroup_econ_mcp/__init__.py +0 -19
- aigroup_econ_mcp/cli.py +0 -82
- aigroup_econ_mcp/config.py +0 -561
- aigroup_econ_mcp/server.py +0 -452
- aigroup_econ_mcp/tools/__init__.py +0 -18
- aigroup_econ_mcp/tools/base.py +0 -470
- aigroup_econ_mcp/tools/cache.py +0 -533
- aigroup_econ_mcp/tools/data_loader.py +0 -171
- aigroup_econ_mcp/tools/file_parser.py +0 -829
- aigroup_econ_mcp/tools/machine_learning.py +0 -60
- aigroup_econ_mcp/tools/ml_ensemble.py +0 -210
- aigroup_econ_mcp/tools/ml_evaluation.py +0 -272
- aigroup_econ_mcp/tools/ml_models.py +0 -54
- aigroup_econ_mcp/tools/ml_regularization.py +0 -172
- aigroup_econ_mcp/tools/monitoring.py +0 -555
- aigroup_econ_mcp/tools/optimized_example.py +0 -229
- aigroup_econ_mcp/tools/panel_data.py +0 -553
- aigroup_econ_mcp/tools/regression.py +0 -214
- aigroup_econ_mcp/tools/statistics.py +0 -154
- aigroup_econ_mcp/tools/time_series.py +0 -667
- aigroup_econ_mcp/tools/timeout.py +0 -283
- aigroup_econ_mcp/tools/tool_handlers.py +0 -378
- aigroup_econ_mcp/tools/tool_registry.py +0 -170
- aigroup_econ_mcp/tools/validation.py +0 -482
- aigroup_econ_mcp-0.4.2.dist-info/METADATA +0 -360
- aigroup_econ_mcp-0.4.2.dist-info/RECORD +0 -29
- aigroup_econ_mcp-0.4.2.dist-info/entry_points.txt +0 -2
- /aigroup_econ_mcp-0.4.2.dist-info/licenses/LICENSE → /LICENSE +0 -0
- {aigroup_econ_mcp-0.4.2.dist-info → aigroup_econ_mcp-1.4.3.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
./.gitignore,sha256=M67x66mQGPjpk5A6LO93G9R7cY9vWCQH9sdLFt6S53c,3284
|
|
2
|
+
./LICENSE,sha256=DoyCJUWlDzKbqc5KRbFpsGYLwLh-XJRHKQDoITjb1yc,1083
|
|
3
|
+
./PKG-INFO,sha256=RcxXpD22GnkhG0mk9c2aCVZ41xwTp-ZzI4Ow6-u4ER4,23096
|
|
4
|
+
./README.md,sha256=Yyb3U92_cxxEmZuSZNLDHThEwlZwBV81xMu3FqVCkbA,22067
|
|
5
|
+
./__init__.py,sha256=4R069rUFbLRbjGo_pn8C-R330y3dXz6HxdELunjTTok,282
|
|
6
|
+
./cli.py,sha256=1pppkNYcSj0-bmYSpwx6TBVI0qC1bw8H5_vRlwgQV2M,639
|
|
7
|
+
./pyproject.toml,sha256=vkAKNgc72ZzYaujDMsLP14FoX20SxTZPgeCQV_RN4q8,2139
|
|
8
|
+
./server.py,sha256=OBTiYiG6XExQhgtJXmahnCeoL0yBGTS0QX1F9Se8Lcw,2542
|
|
9
|
+
./econometrics/README.md,sha256=kbBTUhv_ZHluD6ultI0FqSGqBKNc95OmaghESyrT0ZM,5499
|
|
10
|
+
./econometrics/__init__.py,sha256=PXN3is7i4PU4YVX4ZcDqrAOWEiizjA13TPQb68i47OM,4328
|
|
11
|
+
./econometrics/advanced_methods/modern_computing_machine_learning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
./econometrics/basic_parametric_estimation/__init__.py,sha256=IFgOw46qAzecWUha-uUlab0VptCh82Mhc1hsZIlNH8I,463
|
|
13
|
+
./econometrics/basic_parametric_estimation/gmm/__init__.py,sha256=H5KwHqEx-ALHNlI4DyOenj4XEJ5PI-vQ0kAXR9o_S1s,151
|
|
14
|
+
./econometrics/basic_parametric_estimation/gmm/gmm_model.py,sha256=uwBIxjmO58P41qx7lHSkECMh3WhQoZgYH4gyIDLnwQI,9410
|
|
15
|
+
./econometrics/basic_parametric_estimation/mle/__init__.py,sha256=w9eJFI5c-pcMqG7igIFedz5FOnQGIviZiXXc4Dso_-s,154
|
|
16
|
+
./econometrics/basic_parametric_estimation/mle/mle_model.py,sha256=sQcPlheEYD5Kpn0RDNKjy305AMwCP07kK2U6FN73u_Q,8526
|
|
17
|
+
./econometrics/basic_parametric_estimation/ols/__init__.py,sha256=NhFFi8COkCRrSJrcjvEVOlSJkQABa20PO9yFpykJ4X4,157
|
|
18
|
+
./econometrics/basic_parametric_estimation/ols/ols_model.py,sha256=vj98YSotw-7EbQMzGWG3CGRsgpI2C4axr-KgmmvmxcE,4655
|
|
19
|
+
./econometrics/causal_inference/causal_identification_strategy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
./econometrics/missing_data/missing_data_measurement_error/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
./econometrics/model_specification_diagnostics_robust_inference/README.md,sha256=A6MQ3e_fBRcgUTGG-8PIZoak2mKxg8wvoOo_mF52guk,4681
|
|
22
|
+
./econometrics/model_specification_diagnostics_robust_inference/__init__.py,sha256=EmJt_7fLMK3d6MkNCWYhWLPsZgHjjIj0zs9xkM9nh38,1832
|
|
23
|
+
./econometrics/model_specification_diagnostics_robust_inference/diagnostic_tests/__init__.py,sha256=KRhdc5K-xATvNQPnSBRnLRr3Hhi2mtbm6GG2_dYdsBU,446
|
|
24
|
+
./econometrics/model_specification_diagnostics_robust_inference/diagnostic_tests/diagnostic_tests_model.py,sha256=xqagx4CcqLbyIwJXcmnnb33TWe_0tXSwtqCUCIVHtZo,5119
|
|
25
|
+
./econometrics/model_specification_diagnostics_robust_inference/generalized_least_squares/__init__.py,sha256=3ELQkgGtOLgWY6UOi_ZFL3g7KQxid1WCMdhhByoZHUg,196
|
|
26
|
+
./econometrics/model_specification_diagnostics_robust_inference/generalized_least_squares/gls_model.py,sha256=HupVc4WkpltRCkEZYYcrdJG_8cdY7p6SJS-_v6emKqk,4418
|
|
27
|
+
./econometrics/model_specification_diagnostics_robust_inference/model_selection/__init__.py,sha256=kDxpczAVXNaam7T_Ri0SDKl42eY4hzzu8M_XzVt-M-4,319
|
|
28
|
+
./econometrics/model_specification_diagnostics_robust_inference/model_selection/model_selection_model.py,sha256=V0gTaHjIl_xRWAfILLIn-Z0Qt12E8Q2UMQwBVvsihgY,9297
|
|
29
|
+
./econometrics/model_specification_diagnostics_robust_inference/regularization/__init__.py,sha256=48Y9Lhm77kMtGtH-K1hrpEf41cNf10dSQO5As3Mb2RU,311
|
|
30
|
+
./econometrics/model_specification_diagnostics_robust_inference/regularization/regularization_model.py,sha256=kzkhAEN6pGSk3US-o4_vh2CwhcBpBoNTbAaDBNCD9P8,6047
|
|
31
|
+
./econometrics/model_specification_diagnostics_robust_inference/robust_errors/__init__.py,sha256=J-PaSUus5_f3t9kSC9EGWZPYcxwwCU5KEzymDYQi7ZA,257
|
|
32
|
+
./econometrics/model_specification_diagnostics_robust_inference/robust_errors/robust_errors_model.py,sha256=ctOQGLSRXCdKbReUw6WyjlFhHsnrl7RfLkmI92U-2tk,4269
|
|
33
|
+
./econometrics/model_specification_diagnostics_robust_inference/simultaneous_equations/__init__.py,sha256=gQg1Hjt3QWuLu8nPqUDG3GbsEmL9U31LuRpLAb2CxLI,294
|
|
34
|
+
./econometrics/model_specification_diagnostics_robust_inference/simultaneous_equations/simultaneous_equations_model.py,sha256=LQbOf6o6iVtcrJBgpi6txznaxtn9REBQCIgzBAZnlxM,10309
|
|
35
|
+
./econometrics/model_specification_diagnostics_robust_inference/weighted_least_squares/__init__.py,sha256=uUcFyCn7Ny3jkAw7GsB2UYT_ucrsbM1P6wGx7MAWoRc,193
|
|
36
|
+
./econometrics/model_specification_diagnostics_robust_inference/weighted_least_squares/wls_model.py,sha256=Jzc5p3TI1elFuYQp0EgGvTpsgtBiqKmKAPo5ppZ7xq0,4196
|
|
37
|
+
./econometrics/nonparametric/nonparametric_semiparametric_methods/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
./econometrics/spatial_econometrics/spatial_econometrics_new/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
./econometrics/specific_data_modeling/micro_discrete_limited_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
./econometrics/specific_data_modeling/survival_duration_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
./econometrics/specific_data_modeling/time_series_panel_data/__init__.py,sha256=HGRg4teWO8cbzr4oS_Zx2iqNJppAxRPp7WsaAt6CqMY,2526
|
|
42
|
+
./econometrics/specific_data_modeling/time_series_panel_data/arima_model.py,sha256=F_uhdZ0UsKCfGrJ1WscLmiyF4OAFKtqz_OJw5My7OYU,4162
|
|
43
|
+
./econometrics/specific_data_modeling/time_series_panel_data/cointegration_vecm.py,sha256=hGxOlGOchQQIEkzds8sHWlUrnenObJKjC1DctJx9jLQ,14048
|
|
44
|
+
./econometrics/specific_data_modeling/time_series_panel_data/dynamic_panel_models.py,sha256=a_d-F5Vtv5XCpshOiduvICeBTzGbtx5f4wOqFLzM1Xo,28094
|
|
45
|
+
./econometrics/specific_data_modeling/time_series_panel_data/exponential_smoothing.py,sha256=_EMoy13MfgZl2xNIZOHVOisihAvSsQo9RCs6ob38mnE,7354
|
|
46
|
+
./econometrics/specific_data_modeling/time_series_panel_data/garch_model.py,sha256=1-cnQz8qV6kPHJgo61g0rmF8cTKArqaMJPX-1o24Y3Y,7033
|
|
47
|
+
./econometrics/specific_data_modeling/time_series_panel_data/panel_diagnostics.py,sha256=zo2mkWvL8e4lIuQ_UT25geMnZq_uUPuiIIyuoIyCtnI,3910
|
|
48
|
+
./econometrics/specific_data_modeling/time_series_panel_data/panel_var.py,sha256=fzHkwORKwrCFEY24aExTGTdYXdtaiv_fZUJ-anySS5g,2225
|
|
49
|
+
./econometrics/specific_data_modeling/time_series_panel_data/structural_break_tests.py,sha256=lBJMSzvMG8KFuKBqjOYM_lPD_P_LXEBqnBmYRiaNJjk,2362
|
|
50
|
+
./econometrics/specific_data_modeling/time_series_panel_data/time_varying_parameter_models.py,sha256=iXGMdhcfPouDYa9VUQrmmAcjwvZA4AatKPxpFapvEes,3546
|
|
51
|
+
./econometrics/specific_data_modeling/time_series_panel_data/unit_root_tests.py,sha256=K6aTAYTF73Mcg7pLBK3tDY2wWsfXSc1xphOWBm2EfQM,6854
|
|
52
|
+
./econometrics/specific_data_modeling/time_series_panel_data/var_svar_model.py,sha256=1IviPC5XkQBsEVI09poonRXq5RAVDmK6Lu5pvsrgPIM,14742
|
|
53
|
+
./econometrics/statistical_inference/statistical_inference_techniques/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
+
./econometrics/statistics/distribution_decomposition_methods/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
+
./econometrics/tests/basic_parametric_estimation_tests/__init__.py,sha256=m4Nv29MZh4w-TekKYMdP5hLPxfIvw_X3s1a9fdnxjQk,53
|
|
56
|
+
./econometrics/tests/basic_parametric_estimation_tests/test_gmm.py,sha256=BA6KMQaYRLxnWJgw-LclCnJu_-npAiDtom5LsAAozNM,3760
|
|
57
|
+
./econometrics/tests/basic_parametric_estimation_tests/test_mle.py,sha256=kZa3sx7Cdu7s6hrx645AKXJNN7hnRJantw0VgBo_Mis,3735
|
|
58
|
+
./econometrics/tests/basic_parametric_estimation_tests/test_ols.py,sha256=dqsrYhmjKcwKVdRdhBHPaygukvsZ_mFsj4y7BoxJgCI,2835
|
|
59
|
+
./econometrics/tests/model_specification_diagnostics_tests/__init__.py,sha256=r_fvo5IW5smEMykzU0LGdd8vtL3NOI2ZyL4WgVOoYak,71
|
|
60
|
+
./econometrics/tests/model_specification_diagnostics_tests/test_diagnostic_tests.py,sha256=7ICFo3rDo2yK9rGcWtYSNe1iIEZO6ywp4oYFHVL_z4o,2694
|
|
61
|
+
./econometrics/tests/model_specification_diagnostics_tests/test_robust_errors.py,sha256=c5C7VcsvNmegIAzsok4q5iJKb5Lstpa8qHdY7jdW0g4,2905
|
|
62
|
+
./econometrics/tests/specific_data_modeling_tests/__init__.py,sha256=pT2dhJ9FeaPzTY4xcwuMYCk6rtnYie_xTwk7LARuFg4,53
|
|
63
|
+
./econometrics/tests/specific_data_modeling_tests/test_arima.py,sha256=aQGhShPzDdoDjU5GociZDJk190OhLbD1A2JRXIjDv6A,2806
|
|
64
|
+
./econometrics/tests/specific_data_modeling_tests/test_dynamic_panel.py,sha256=99FEc_o437W59Mfj8jzlb2m7QDCCWANWwMN0aEL24IU,6372
|
|
65
|
+
./econometrics/tests/specific_data_modeling_tests/test_exponential_smoothing.py,sha256=D90bZhBfDAIcT1IBhjkRluv0xpxJsulzAEudI4FLjKI,3366
|
|
66
|
+
./econometrics/tests/specific_data_modeling_tests/test_garch.py,sha256=Fkaih4Lh5TVScCBKjtXI60pSxnobi2aaGcca8p04PM4,3271
|
|
67
|
+
./econometrics/tests/specific_data_modeling_tests/test_unit_root.py,sha256=87gEu8fDh7LS20xMJk_OrBryA2UYa-8KPUBaVaNFjNc,4539
|
|
68
|
+
./econometrics/tests/specific_data_modeling_tests/test_var.py,sha256=kbWZVftblOULYABBBCiIS5x6JpBdPv-ZgG5HfbtsI4U,3556
|
|
69
|
+
./prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
|
+
./prompts/analysis_guides.py,sha256=FCsEtRCETWJUuG8exmAL30NRpD0eT9dyqljlpxXU5u0,1545
|
|
71
|
+
./resources/MCP_MASTER_GUIDE.md,sha256=lZ2R2xV1ksCHSkSl4YorvW0ZmgCJM3Oq8UuM0kZaG6I,13407
|
|
72
|
+
./resources/MCP_TOOLS_DATA_FORMAT_GUIDE.md,sha256=LFY_VS_bwLu5LBi1vbPruFac4qwGzP-UwvDAk1s9ha0,5706
|
|
73
|
+
./resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
+
./tools/README.md,sha256=KkEUtBa3TBwz2HcVoW1Z9sGExb8BrElKzcgSlG0eoP0,2217
|
|
75
|
+
./tools/__init__.py,sha256=y9A19bfUGDzDcS2BySRrGt8QhdH9_Ahk5s5g4eiURRI,1075
|
|
76
|
+
./tools/data_loader.py,sha256=-HFKORi03DejxCBD2i5HJJCiwEEdG5uSA4jJivhVT0Y,6886
|
|
77
|
+
./tools/decorators.py,sha256=ascsn0rNtzv1-RZWa4xQXArFD-43R3YuUbVIyxRtuOA,867
|
|
78
|
+
./tools/econometrics_adapter.py,sha256=MHXvzjBnULEgBGc5HRV5m93auzwPhSZyorl8dq3Mt_0,11429
|
|
79
|
+
./tools/mcp_tools_registry.py,sha256=0st55db2HWxSx2VWeyY89h_PkP_ULQQ7ydBg0ZyRNr0,3462
|
|
80
|
+
./tools/model_specification_adapter.py,sha256=M1bdELqKJe7Mg91V7BNqdBXV2D5l3nqC_h91sQ4Ifno,14570
|
|
81
|
+
./tools/output_formatter.py,sha256=l03L6QhsSKiOoDBSDeMkRjkxVHvfMAuBFcTdB7-m2CM,20751
|
|
82
|
+
./tools/time_series_panel_data_adapter.py,sha256=b9GsTzLIEQnUInC4jVUasOQbEmiEvhy60QxAWgznSWs,35746
|
|
83
|
+
./tools/time_series_panel_data_tools.py,sha256=W4R_CRBYnRjAd5s3_6_BfOPuIluxTkfj7iAfH-UWBgs,2098
|
|
84
|
+
./tools/mcp_tool_groups/__init__.py,sha256=5kVm7UKVJTdj8YWA6bhODUaXgONdEjAGjy31gVnry5o,21
|
|
85
|
+
./tools/mcp_tool_groups/basic_parametric_tools.py,sha256=9noEMDxQi7TfDlSXEl5RYEEd1RmQYT-FfzZtmjUUbIw,5827
|
|
86
|
+
./tools/mcp_tool_groups/model_specification_tools.py,sha256=-IqFF7OjXKwKaFU-XruOFO62AkvEVJqSHHgh8ymSj8s,14834
|
|
87
|
+
./tools/mcp_tool_groups/time_series_tools.py,sha256=IytweixTmJ14uMuAFczZ80mV6eUBrF85AQrBUkmpcCA,18276
|
|
88
|
+
aigroup_econ_mcp-1.4.3.dist-info/METADATA,sha256=RcxXpD22GnkhG0mk9c2aCVZ41xwTp-ZzI4Ow6-u4ER4,23096
|
|
89
|
+
aigroup_econ_mcp-1.4.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
90
|
+
aigroup_econ_mcp-1.4.3.dist-info/entry_points.txt,sha256=UbLsgggIXKYqolHc0xxLCKr0_aFxRek4_QOCAgzDHZk,45
|
|
91
|
+
aigroup_econ_mcp-1.4.3.dist-info/licenses/LICENSE,sha256=DoyCJUWlDzKbqc5KRbFpsGYLwLh-XJRHKQDoITjb1yc,1083
|
|
92
|
+
aigroup_econ_mcp-1.4.3.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 AIGroup
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
cli.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
AIGroup Econometrics MCP - CLI 入口
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
def main():
|
|
11
|
+
"""CLI 主函数"""
|
|
12
|
+
try:
|
|
13
|
+
# 导入并运行服务器
|
|
14
|
+
from server import main as server_main
|
|
15
|
+
server_main()
|
|
16
|
+
except ImportError as e:
|
|
17
|
+
print(f"导入错误: {e}")
|
|
18
|
+
print("请确保所有依赖已正确安装")
|
|
19
|
+
sys.exit(1)
|
|
20
|
+
except Exception as e:
|
|
21
|
+
print(f"启动服务器时出错: {e}")
|
|
22
|
+
sys.exit(1)
|
|
23
|
+
|
|
24
|
+
# 添加cli函数以匹配pyproject.toml中的入口点定义
|
|
25
|
+
cli = main
|
|
26
|
+
|
|
27
|
+
if __name__ == "__main__":
|
|
28
|
+
main()
|
econometrics/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 计量经济学模型说明文档
|
|
2
|
+
|
|
3
|
+
本目录包含AIGroup计量经济学MCP服务器的所有计量经济学分析功能。
|
|
4
|
+
| 核心类别 | 解决的核心问题 | 主要方法 |
|
|
5
|
+
| :--- | :--- | :--- |
|
|
6
|
+
| **1. 基础与参数估计** | 建立变量间的基础参数化关系,并进行估计。 | **普通最小二乘法 (OLS)**、**最大似然估计 (MLE)**、**广义矩估计 (GMM)** |
|
|
7
|
+
| **2. 模型设定、诊断与稳健推断** | 当基础模型的理想假设不成立时,修正模型或调整推断;对模型进行诊断和选择。 | **稳健标准误**(处理异方差/自相关)、**广义最小二乘法 (GLS)**、**加权最小二乘法 (WLS)**、**岭回归/LASSO/弹性网络**(处理多重共线性/高维数据)、**联立方程模型**(处理双向因果关系)<br><br>**模型诊断**:异方差检验(White、Breusch-Pagan)、自相关检验(Durbin-Watson、Ljung-Box)、正态性检验(Jarque-Bera)、多重共线性诊断(VIF)、内生性检验(Durbin-Wu-Hausman)、残差诊断、影响点分析<br><br>**模型选择**:信息准则(AIC/BIC/HQIC)、交叉验证(K折、留一法)、格兰杰因果检验 |
|
|
8
|
+
| **3. 因果识别策略** | 在非实验数据中,识别变量间的因果关系(解决内生性问题)。 | **工具变量法 (IV/2SLS)**、**控制函数法**、**面板数据模型**(固定效应、随机效应、一阶差分、Hausman检验)、**双重差分法 (DID)**、**三重差分法 (DDD)**、**事件研究法 (Event Study)**、**断点回归设计 (RDD)**、**合成控制法**、**匹配方法**(倾向得分匹配PSM、协变量平衡、倾向得分加权IPW、熵平衡法)<br><br>**效应分解与异质性**:中介效应分析(Baron-Kenny、Bootstrap检验、Sobel检验)、调节效应分析(交互项回归)、处理效应异质性 (HTE)、条件平均处理效应 (CATE)、因果森林<br><br>**稳健性检验**:敏感性分析、Rosenbaum bounds、双重机器学习 (Double ML) |
|
|
9
|
+
| **4. 特定数据类型建模** | 针对因变量或数据结构的固有特性进行建模。 | |
|
|
10
|
+
| **• 微观离散与受限数据** | 因变量为分类、计数、截断等非连续情况。 | **Logit/Probit**、**多项/有序/条件Logit**、**混合/嵌套Logit**、**Tobit**、**泊松/负二项回归**、**Heckman选择模型** |
|
|
11
|
+
| **• 时间序列与面板数据** | 分析具有时间维度数据的动态依赖、预测和非平稳性。 | **ARIMA**、**指数平滑法**、**VAR/SVAR**、**GARCH**、**协整分析/VECM**、**面板VAR**<br><br>**平稳性与单位根检验**:ADF检验、PP检验、KPSS检验<br><br>**动态面板模型**:Arellano-Bond估计(差分GMM)、Blundell-Bond估计(系统GMM)<br><br>**结构突变检验**:Chow检验、Quandt-Andrews检验、Bai-Perron检验(多重断点)<br><br>**面板数据诊断**:Hausman检验(FE vs RE)、F检验(Pooled vs FE)、LM检验(Pooled vs RE)、组内相关性检验<br><br>**时变参数模型**:门限模型/转换回归(TAR/STAR)、马尔科夫转换模型 |
|
|
12
|
+
| **• 生存/持续时间数据** | 分析"事件发生时间"数据并处理右删失。 | **Kaplan-Meier估计量**、**Cox比例风险模型**、**加速失效时间模型** |
|
|
13
|
+
| **5. 空间计量经济学** | 处理数据的空间依赖性和空间异质性。 | **空间权重矩阵构建**(邻接、距离、K近邻矩阵)<br><br>**空间自相关检验**:Moran's I、Geary's C、局部空间自相关 (LISA)<br><br>**空间回归模型**:空间滞后模型 (SAR)、空间误差模型 (SEM)、空间杜宾模型 (SDM)、地理加权回归 (GWR)、空间面板数据模型 |
|
|
14
|
+
| **6. 非参数与半参数方法** | 放宽函数形式的线性或参数化假设,让数据本身驱动关系形态。 | **核回归**、**局部回归**、**样条回归**、**广义可加模型 (GAM)**、**部分线性模型**、**非参数工具变量估计** |
|
|
15
|
+
| **7. 分布分析与分解方法** | 分析因变量整个条件分布的特征,而非仅仅条件均值;对差异或变化进行分解。 | **分位数回归**<br><br>**分解方法**:Oaxaca-Blinder分解、DiNardo-Fortin-Lemieux反事实分解、方差分解、ANOVA分解、Shapley值分解、时间序列分解(趋势-季节-随机) |
|
|
16
|
+
| **8. 现代计算与机器学习** | 处理高维数据、复杂模式识别、预测以及为因果推断提供辅助工具。 | **监督学习**:随机森林、梯度提升机 (GBM/XGBoost)、支持向量机 (SVM)、神经网络<br><br>**无监督学习**:聚类分析(K-means、层次聚类)<br><br>**因果推断增强**:双重机器学习 (Double ML)、因果森林 (Causal Forest) |
|
|
17
|
+
| **9. 统计推断技术** | 在理论分布难以推导或模型复杂时,进行可靠的区间估计与假设检验。 | **重采样方法**:自助法 (Bootstrap)、Pairs Bootstrap、Residual Bootstrap、Wild Bootstrap(异方差)、Block Bootstrap(时间序列/面板)、刀切法 (Jackknife)<br><br>**模拟方法**:蒙特卡洛模拟、置换检验 (Permutation Test)<br><br>**渐近方法**:Delta方法、聚类稳健推断 |
|
|
18
|
+
| **10. 缺失数据与测量误差** | 处理数据不完整或变量测量不准确的问题。 | **缺失数据处理**:列表删除法、均值插补、回归插补、多重插补 (Multiple Imputation - MICE/Amelia)、期望最大化算法 (EM)<br><br>**测量误差**:工具变量法、SIMEX方法 |
|
econometrics/__init__.py
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# 基础与参数估计模块
|
|
2
|
+
from .basic_parametric_estimation import (
|
|
3
|
+
OLSResult,
|
|
4
|
+
ols_regression,
|
|
5
|
+
MLEResult,
|
|
6
|
+
mle_estimation,
|
|
7
|
+
GMMResult,
|
|
8
|
+
gmm_estimation
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
# 二元选择模型模块
|
|
12
|
+
# from .discrete_choice.binary_choice import (
|
|
13
|
+
# logit_model,
|
|
14
|
+
# probit_model,
|
|
15
|
+
# BinaryChoiceResult
|
|
16
|
+
# )
|
|
17
|
+
|
|
18
|
+
# 多项选择模型模块
|
|
19
|
+
# from .discrete_choice.multinomial_choice import (
|
|
20
|
+
# multinomial_logit,
|
|
21
|
+
# ordered_choice_model,
|
|
22
|
+
# MultinomialResult,
|
|
23
|
+
# OrderedResult
|
|
24
|
+
# )
|
|
25
|
+
|
|
26
|
+
# 计数数据模型模块
|
|
27
|
+
# from .discrete_choice.count_data_models import (
|
|
28
|
+
# poisson_regression,
|
|
29
|
+
# negative_binomial_regression,
|
|
30
|
+
# tobit_model,
|
|
31
|
+
# PoissonResult,
|
|
32
|
+
# NegativeBinomialResult,
|
|
33
|
+
# TobitResult
|
|
34
|
+
# )
|
|
35
|
+
|
|
36
|
+
# 非参数回归模块
|
|
37
|
+
# from .nonparametric.nonparametric_regression import (
|
|
38
|
+
# kernel_regression,
|
|
39
|
+
# local_polynomial_regression,
|
|
40
|
+
# NonparametricRegressionResult
|
|
41
|
+
# )
|
|
42
|
+
|
|
43
|
+
# 样条和GAM模块
|
|
44
|
+
# from .nonparametric.spline_gam import (
|
|
45
|
+
# spline_regression,
|
|
46
|
+
# generalized_additive_model,
|
|
47
|
+
# SplineResult,
|
|
48
|
+
# GAMResult
|
|
49
|
+
# )
|
|
50
|
+
|
|
51
|
+
# 条件期望函数
|
|
52
|
+
# from .nonparametric.conditional_expectation_functions import (
|
|
53
|
+
# conditional_expectation_function,
|
|
54
|
+
# CEFResult
|
|
55
|
+
# )
|
|
56
|
+
|
|
57
|
+
# 面板数据分析模块
|
|
58
|
+
# from .panel_data.panel_data_models import (
|
|
59
|
+
# fixed_effects_model,
|
|
60
|
+
# random_effects_model,
|
|
61
|
+
# PanelDataResult
|
|
62
|
+
# )
|
|
63
|
+
|
|
64
|
+
# from .panel_data.panel_unit_root_tests import (
|
|
65
|
+
# levin_lin_test,
|
|
66
|
+
# im_pesaran_shin_test,
|
|
67
|
+
# madwu_test
|
|
68
|
+
# )
|
|
69
|
+
|
|
70
|
+
# 时间序列分析模块
|
|
71
|
+
# from .time_series.time_series_models import (
|
|
72
|
+
# ar_model,
|
|
73
|
+
# arma_model,
|
|
74
|
+
# var_model,
|
|
75
|
+
# TimeSeriesResult
|
|
76
|
+
# )
|
|
77
|
+
|
|
78
|
+
# from .time_series.advanced_time_series import (
|
|
79
|
+
# garch_model,
|
|
80
|
+
# state_space_model,
|
|
81
|
+
# variance_decomposition
|
|
82
|
+
# )
|
|
83
|
+
|
|
84
|
+
# 高级计量方法模块
|
|
85
|
+
# from .advanced_methods.advanced_methods import (
|
|
86
|
+
# psm_model,
|
|
87
|
+
# did_model,
|
|
88
|
+
# rdd_model,
|
|
89
|
+
# AdvancedMethodsResult
|
|
90
|
+
# )
|
|
91
|
+
|
|
92
|
+
# from .advanced_methods.quantile_regression import (
|
|
93
|
+
# quantile_regression,
|
|
94
|
+
# QuantileRegressionResult
|
|
95
|
+
# )
|
|
96
|
+
|
|
97
|
+
# from .advanced_methods.survival_analysis import (
|
|
98
|
+
# cox_model,
|
|
99
|
+
# kaplan_meier_estimation,
|
|
100
|
+
# SurvivalAnalysisResult
|
|
101
|
+
# )
|
|
102
|
+
|
|
103
|
+
# 统计推断模块
|
|
104
|
+
# from .statistical_inference.hypothesis_testing import (
|
|
105
|
+
# t_test,
|
|
106
|
+
# f_test,
|
|
107
|
+
# chi2_test,
|
|
108
|
+
# HypothesisTestResult
|
|
109
|
+
# )
|
|
110
|
+
|
|
111
|
+
# from .statistical_inference.confidence_intervals import (
|
|
112
|
+
# confidence_interval,
|
|
113
|
+
# ConfidenceIntervalResult
|
|
114
|
+
# )
|
|
115
|
+
|
|
116
|
+
# from .statistical_inference.bootstrapping import (
|
|
117
|
+
# bootstrap_inference,
|
|
118
|
+
# BootstrapResult
|
|
119
|
+
# )
|
|
120
|
+
|
|
121
|
+
# 模型设定、诊断和稳健推断模块
|
|
122
|
+
# from .model_specification_diagnostics_robust_inference.model_specification import (
|
|
123
|
+
# reset_test,
|
|
124
|
+
# ModelSpecificationResult
|
|
125
|
+
# )
|
|
126
|
+
|
|
127
|
+
# from .model_specification_diagnostics_robust_inference.model_diagnostics import (
|
|
128
|
+
# heteroskedasticity_test,
|
|
129
|
+
# autocorrelation_test,
|
|
130
|
+
# ModelDiagnosticsResult
|
|
131
|
+
# )
|
|
132
|
+
|
|
133
|
+
# from .model_specification_diagnostics_robust_inference.robust_inference import (
|
|
134
|
+
# robust_se_estimation,
|
|
135
|
+
# RobustInferenceResult
|
|
136
|
+
# )
|
|
137
|
+
|
|
138
|
+
# 缺失数据处理模块
|
|
139
|
+
# from .missing_data.missing_data_methods import (
|
|
140
|
+
# multiple_imputation,
|
|
141
|
+
# inverse_probability_weighting,
|
|
142
|
+
# MissingDataResult
|
|
143
|
+
# )
|
|
144
|
+
|
|
145
|
+
# 因果推断模块
|
|
146
|
+
# from .causal_inference.causal_inference_methods import (
|
|
147
|
+
# instrumental_variables,
|
|
148
|
+
# regression_discontinuity,
|
|
149
|
+
# CausalInferenceResult
|
|
150
|
+
# )
|
|
151
|
+
|
|
152
|
+
# 空间计量经济学模块
|
|
153
|
+
# from .spatial_econometrics.spatial_econometrics import (
|
|
154
|
+
# spatial_lag_model,
|
|
155
|
+
# spatial_error_model,
|
|
156
|
+
# SpatialEconometricsResult
|
|
157
|
+
# )
|
|
158
|
+
|
|
159
|
+
# 特定数据建模模块
|
|
160
|
+
# from .specific_data_modeling.heterogeneous_data_models import (
|
|
161
|
+
# mixed_effects_model,
|
|
162
|
+
# HeterogeneousDataResult
|
|
163
|
+
# )
|
|
164
|
+
|
|
165
|
+
# from .specific_data_modeling.micro_discrete_limited_data import (
|
|
166
|
+
# tobit_model_2,
|
|
167
|
+
# MicroDiscreteDataResult
|
|
168
|
+
# )
|
|
169
|
+
|
|
170
|
+
# from .specific_data_modeling.censored_truncated_data import (
|
|
171
|
+
# tobit_model_3,
|
|
172
|
+
# truncated_regression,
|
|
173
|
+
# CensoredTruncatedDataResult
|
|
174
|
+
# )
|
|
175
|
+
|
|
176
|
+
# 异常类
|
|
177
|
+
# from .exceptions import (
|
|
178
|
+
# EconometricToolError,
|
|
179
|
+
# DataValidationError,
|
|
180
|
+
# ModelFittingError,
|
|
181
|
+
# ConfigurationError
|
|
182
|
+
# )
|
|
183
|
+
|
|
184
|
+
__all__ = [
|
|
185
|
+
"OLSResult",
|
|
186
|
+
"ols_regression",
|
|
187
|
+
"MLEResult",
|
|
188
|
+
"mle_estimation",
|
|
189
|
+
"GMMResult",
|
|
190
|
+
"gmm_estimation"
|
|
191
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""
|
|
2
|
+
基础与参数估计模块
|
|
3
|
+
提供普通最小二乘法 (OLS)、最大似然估计 (MLE) 和广义矩估计 (GMM) 方法
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# OLS模块
|
|
7
|
+
from .ols import (
|
|
8
|
+
OLSResult,
|
|
9
|
+
ols_regression
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
# MLE模块
|
|
13
|
+
from .mle import (
|
|
14
|
+
MLEResult,
|
|
15
|
+
mle_estimation
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# GMM模块
|
|
19
|
+
from .gmm import (
|
|
20
|
+
GMMResult,
|
|
21
|
+
gmm_estimation
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
__all__ = [
|
|
25
|
+
"OLSResult",
|
|
26
|
+
"ols_regression",
|
|
27
|
+
"MLEResult",
|
|
28
|
+
"mle_estimation",
|
|
29
|
+
"GMMResult",
|
|
30
|
+
"gmm_estimation"
|
|
31
|
+
]
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"""
|
|
2
|
+
广义矩估计 (GMM) 模型实现
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import List, Optional
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
import numpy as np
|
|
8
|
+
from scipy import stats
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class GMMResult(BaseModel):
|
|
12
|
+
"""广义矩估计结果"""
|
|
13
|
+
coefficients: List[float] = Field(..., description="估计系数")
|
|
14
|
+
std_errors: List[float] = Field(..., description="系数标准误")
|
|
15
|
+
t_values: List[float] = Field(..., description="t统计量")
|
|
16
|
+
p_values: List[float] = Field(..., description="p值")
|
|
17
|
+
conf_int_lower: List[float] = Field(..., description="置信区间下界")
|
|
18
|
+
conf_int_upper: List[float] = Field(..., description="置信区间上界")
|
|
19
|
+
j_statistic: float = Field(..., description="J统计量")
|
|
20
|
+
j_p_value: float = Field(..., description="J统计量p值")
|
|
21
|
+
weight_matrix: List[List[float]] = Field(..., description="权重矩阵")
|
|
22
|
+
n_obs: int = Field(..., description="观测数量")
|
|
23
|
+
n_moments: int = Field(..., description="矩条件数量")
|
|
24
|
+
feature_names: List[str] = Field(..., description="特征名称")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _safe_inverse(matrix, reg_param=1e-10):
|
|
28
|
+
"""安全的矩阵求逆函数"""
|
|
29
|
+
try:
|
|
30
|
+
# 检查矩阵是否为空或非二维
|
|
31
|
+
if matrix.size == 0 or matrix.ndim != 2:
|
|
32
|
+
raise ValueError("矩阵为空或不是二维数组")
|
|
33
|
+
|
|
34
|
+
# 检查矩阵是否包含无效值
|
|
35
|
+
if np.isnan(matrix).any() or np.isinf(matrix).any():
|
|
36
|
+
raise ValueError("矩阵包含NaN或无穷大值")
|
|
37
|
+
|
|
38
|
+
# 尝试直接求逆
|
|
39
|
+
return np.linalg.inv(matrix)
|
|
40
|
+
except np.linalg.LinAlgError:
|
|
41
|
+
# 如果矩阵奇异,添加正则化项
|
|
42
|
+
try:
|
|
43
|
+
# 确保矩阵是方阵
|
|
44
|
+
if matrix.shape[0] != matrix.shape[1]:
|
|
45
|
+
raise ValueError("矩阵不是方阵,无法求逆")
|
|
46
|
+
|
|
47
|
+
# 添加正则化项
|
|
48
|
+
reg_matrix = matrix + np.eye(matrix.shape[0]) * reg_param
|
|
49
|
+
return np.linalg.inv(reg_matrix)
|
|
50
|
+
except np.linalg.LinAlgError:
|
|
51
|
+
# 如果仍然失败,使用伪逆
|
|
52
|
+
return np.linalg.pinv(matrix)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def gmm_estimation(
|
|
56
|
+
y_data: List[float],
|
|
57
|
+
x_data: List[List[float]],
|
|
58
|
+
instruments: Optional[List[List[float]]] = None,
|
|
59
|
+
feature_names: Optional[List[str]] = None,
|
|
60
|
+
constant: bool = True,
|
|
61
|
+
confidence_level: float = 0.95
|
|
62
|
+
) -> GMMResult:
|
|
63
|
+
"""
|
|
64
|
+
广义矩估计
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
y_data: 因变量数据
|
|
68
|
+
x_data: 自变量数据
|
|
69
|
+
instruments: 工具变量数据 (如果为None,则使用x_data作为工具变量,退化为OLS)
|
|
70
|
+
feature_names: 特征名称
|
|
71
|
+
constant: 是否包含常数项
|
|
72
|
+
confidence_level: 置信水平
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
GMMResult: 广义矩估计结果
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
ValueError: 当输入数据无效时抛出异常
|
|
79
|
+
"""
|
|
80
|
+
# 输入验证
|
|
81
|
+
if not y_data or not x_data:
|
|
82
|
+
raise ValueError("因变量和自变量数据不能为空")
|
|
83
|
+
|
|
84
|
+
# 转换为numpy数组
|
|
85
|
+
y = np.array(y_data)
|
|
86
|
+
|
|
87
|
+
# 确保X是二维数组
|
|
88
|
+
if isinstance(x_data[0], (int, float)):
|
|
89
|
+
# 单个特征的情况
|
|
90
|
+
X = np.array(x_data).reshape(-1, 1)
|
|
91
|
+
else:
|
|
92
|
+
X = np.array(x_data)
|
|
93
|
+
|
|
94
|
+
# 验证数据维度一致性
|
|
95
|
+
if len(y) != X.shape[0]:
|
|
96
|
+
raise ValueError(f"因变量长度({len(y)})与自变量长度({X.shape[0]})不一致")
|
|
97
|
+
|
|
98
|
+
n, k = X.shape
|
|
99
|
+
|
|
100
|
+
# 处理工具变量
|
|
101
|
+
if instruments is None:
|
|
102
|
+
# 如果没有提供工具变量,则使用自变量作为工具变量(退化为OLS)
|
|
103
|
+
Z = X.copy()
|
|
104
|
+
else:
|
|
105
|
+
# 确保工具变量是二维数组
|
|
106
|
+
if isinstance(instruments[0], (int, float)):
|
|
107
|
+
Z = np.array(instruments).reshape(-1, 1)
|
|
108
|
+
else:
|
|
109
|
+
Z = np.array(instruments)
|
|
110
|
+
|
|
111
|
+
# 验证工具变量维度
|
|
112
|
+
if len(Z) != len(y):
|
|
113
|
+
raise ValueError(f"工具变量长度({len(Z)})与因变量长度({len(y)})不一致")
|
|
114
|
+
|
|
115
|
+
# 添加常数项
|
|
116
|
+
if constant:
|
|
117
|
+
X = np.column_stack([np.ones(n), X])
|
|
118
|
+
Z = np.column_stack([np.ones(n), Z])
|
|
119
|
+
if feature_names:
|
|
120
|
+
feature_names = ["const"] + feature_names
|
|
121
|
+
else:
|
|
122
|
+
feature_names = [f"const"] + [f"x{i}" for i in range(X.shape[1]-1)]
|
|
123
|
+
else:
|
|
124
|
+
if not feature_names:
|
|
125
|
+
feature_names = [f"x{i}" for i in range(X.shape[1])]
|
|
126
|
+
|
|
127
|
+
# 手动实现GMM估计
|
|
128
|
+
try:
|
|
129
|
+
# 初始化权重矩阵为单位矩阵
|
|
130
|
+
W = np.eye(Z.shape[1])
|
|
131
|
+
|
|
132
|
+
# 迭代估计直到收敛
|
|
133
|
+
for iteration in range(100): # 最大迭代次数
|
|
134
|
+
# 一步GMM估计
|
|
135
|
+
# X'Z W Z'X beta = X'Z W Z'y
|
|
136
|
+
XZ = X.T @ Z
|
|
137
|
+
ZY = Z.T @ y
|
|
138
|
+
|
|
139
|
+
# 更稳定的矩阵运算
|
|
140
|
+
left_side = XZ @ W @ XZ.T
|
|
141
|
+
right_side = XZ @ W @ ZY
|
|
142
|
+
|
|
143
|
+
# 解线性方程组
|
|
144
|
+
try:
|
|
145
|
+
beta = np.linalg.solve(left_side, right_side)
|
|
146
|
+
except np.linalg.LinAlgError:
|
|
147
|
+
# 如果矩阵奇异,使用伪逆
|
|
148
|
+
beta = np.linalg.pinv(left_side) @ right_side
|
|
149
|
+
|
|
150
|
+
# 计算残差
|
|
151
|
+
residuals = y - X @ beta
|
|
152
|
+
|
|
153
|
+
# 更新权重矩阵(基于残差的矩条件)
|
|
154
|
+
moments = Z * residuals.reshape(-1, 1)
|
|
155
|
+
S = moments.T @ moments / n # 协方差矩阵
|
|
156
|
+
|
|
157
|
+
# 在更新权重矩阵前进行有效性检查
|
|
158
|
+
if np.isnan(S).any() or np.isinf(S).any():
|
|
159
|
+
raise ValueError("矩条件协方差矩阵包含无效值")
|
|
160
|
+
|
|
161
|
+
# 安全地更新权重矩阵
|
|
162
|
+
W_new = _safe_inverse(S, reg_param=1e-8) # 增加正则化参数以提高稳定性
|
|
163
|
+
|
|
164
|
+
# 检查新权重矩阵的有效性
|
|
165
|
+
if np.isnan(W_new).any() or np.isinf(W_new).any():
|
|
166
|
+
raise ValueError("计算出的权重矩阵包含无效值")
|
|
167
|
+
|
|
168
|
+
# 检查收敛性
|
|
169
|
+
if np.allclose(W, W_new, rtol=1e-6, atol=1e-10):
|
|
170
|
+
W = W_new
|
|
171
|
+
break
|
|
172
|
+
W = W_new
|
|
173
|
+
|
|
174
|
+
# 计算最终的协方差矩阵和统计量
|
|
175
|
+
residuals = y - X @ beta
|
|
176
|
+
moments = Z * residuals.reshape(-1, 1)
|
|
177
|
+
S = moments.T @ moments / n
|
|
178
|
+
|
|
179
|
+
# 检查矩条件协方差矩阵
|
|
180
|
+
if np.isnan(S).any() or np.isinf(S).any() or np.linalg.norm(S) == 0:
|
|
181
|
+
raise ValueError("矩条件协方差矩阵无效")
|
|
182
|
+
|
|
183
|
+
# 计算系数协方差矩阵
|
|
184
|
+
# Var(beta) = (X'Z W Z'X)^(-1) X'Z W S W Z'X (X'Z W Z'X)^(-1)
|
|
185
|
+
XZ = X.T @ Z
|
|
186
|
+
|
|
187
|
+
# 检查XZ矩阵
|
|
188
|
+
if np.isnan(XZ).any() or np.isinf(XZ).any():
|
|
189
|
+
raise ValueError("X'Z矩阵包含无效值")
|
|
190
|
+
|
|
191
|
+
left_side = XZ @ W @ XZ.T
|
|
192
|
+
|
|
193
|
+
# 检查左侧矩阵
|
|
194
|
+
if np.isnan(left_side).any() or np.isinf(left_side).any():
|
|
195
|
+
raise ValueError("左侧矩阵(X'Z W Z'X)包含无效值")
|
|
196
|
+
|
|
197
|
+
left_side_inv = _safe_inverse(left_side, reg_param=1e-8) # 使用相同正则化参数
|
|
198
|
+
|
|
199
|
+
# 检查逆矩阵
|
|
200
|
+
if np.isnan(left_side_inv).any() or np.isinf(left_side_inv).any():
|
|
201
|
+
raise ValueError("左侧矩阵的逆包含无效值")
|
|
202
|
+
|
|
203
|
+
# 计算协方差矩阵
|
|
204
|
+
cov_intermediate = XZ @ W @ S @ W @ XZ.T
|
|
205
|
+
if np.isnan(cov_intermediate).any() or np.isinf(cov_intermediate).any():
|
|
206
|
+
raise ValueError("中间协方差计算包含无效值")
|
|
207
|
+
|
|
208
|
+
cov_beta = left_side_inv @ cov_intermediate @ left_side_inv
|
|
209
|
+
std_errors = np.sqrt(np.diag(cov_beta))
|
|
210
|
+
|
|
211
|
+
# 避免零标准误
|
|
212
|
+
std_errors = np.maximum(std_errors, 1e-12)
|
|
213
|
+
|
|
214
|
+
# 检查标准误
|
|
215
|
+
if np.isnan(std_errors).any() or np.isinf(std_errors).any():
|
|
216
|
+
raise ValueError("计算出的标准误包含无效值")
|
|
217
|
+
|
|
218
|
+
# 计算t统计量和p值
|
|
219
|
+
t_values = beta / std_errors
|
|
220
|
+
p_values = 2 * (1 - stats.t.cdf(np.abs(t_values), n - len(beta)))
|
|
221
|
+
|
|
222
|
+
# 计算置信区间
|
|
223
|
+
alpha = 1 - confidence_level
|
|
224
|
+
t_critical = stats.t.ppf(1 - alpha/2, n - len(beta))
|
|
225
|
+
conf_int_lower = beta - t_critical * std_errors
|
|
226
|
+
conf_int_upper = beta + t_critical * std_errors
|
|
227
|
+
|
|
228
|
+
# J统计量(过度识别约束检验)
|
|
229
|
+
if Z.shape[1] > len(beta):
|
|
230
|
+
# 过度识别情况
|
|
231
|
+
moment_conditions = Z.T @ residuals
|
|
232
|
+
j_statistic = n * moment_conditions.T @ W @ moment_conditions
|
|
233
|
+
j_df = Z.shape[1] - len(beta)
|
|
234
|
+
j_p_value = 1 - stats.chi2.cdf(j_statistic, j_df)
|
|
235
|
+
else:
|
|
236
|
+
# 恰好识别情况
|
|
237
|
+
j_statistic = 0.0
|
|
238
|
+
j_p_value = 1.0
|
|
239
|
+
|
|
240
|
+
return GMMResult(
|
|
241
|
+
coefficients=beta.tolist(),
|
|
242
|
+
std_errors=std_errors.tolist(),
|
|
243
|
+
t_values=t_values.tolist(),
|
|
244
|
+
p_values=p_values.tolist(),
|
|
245
|
+
conf_int_lower=conf_int_lower.tolist(),
|
|
246
|
+
conf_int_upper=conf_int_upper.tolist(),
|
|
247
|
+
j_statistic=float(j_statistic),
|
|
248
|
+
j_p_value=float(j_p_value),
|
|
249
|
+
weight_matrix=W.tolist(),
|
|
250
|
+
n_obs=n,
|
|
251
|
+
n_moments=Z.shape[1],
|
|
252
|
+
feature_names=feature_names
|
|
253
|
+
)
|
|
254
|
+
except Exception as e:
|
|
255
|
+
# 如果GMM失败,抛出异常
|
|
256
|
+
raise ValueError(f"GMM估计失败: {str(e)}")
|