aigroup-econ-mcp 1.4.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 (97) hide show
  1. PKG-INFO +344 -322
  2. README.md +335 -320
  3. __init__.py +1 -1
  4. aigroup_econ_mcp-2.0.1.dist-info/METADATA +732 -0
  5. aigroup_econ_mcp-2.0.1.dist-info/RECORD +170 -0
  6. cli.py +4 -0
  7. econometrics/advanced_methods/modern_computing_machine_learning/__init__.py +30 -0
  8. econometrics/advanced_methods/modern_computing_machine_learning/causal_forest.py +253 -0
  9. econometrics/advanced_methods/modern_computing_machine_learning/double_ml.py +268 -0
  10. econometrics/advanced_methods/modern_computing_machine_learning/gradient_boosting.py +249 -0
  11. econometrics/advanced_methods/modern_computing_machine_learning/hierarchical_clustering.py +243 -0
  12. econometrics/advanced_methods/modern_computing_machine_learning/kmeans_clustering.py +293 -0
  13. econometrics/advanced_methods/modern_computing_machine_learning/neural_network.py +264 -0
  14. econometrics/advanced_methods/modern_computing_machine_learning/random_forest.py +195 -0
  15. econometrics/advanced_methods/modern_computing_machine_learning/support_vector_machine.py +226 -0
  16. econometrics/advanced_methods/modern_computing_machine_learning/test_all_modules.py +329 -0
  17. econometrics/advanced_methods/modern_computing_machine_learning/test_report.md +107 -0
  18. econometrics/causal_inference/__init__.py +66 -0
  19. econometrics/causal_inference/causal_identification_strategy/__init__.py +104 -0
  20. econometrics/causal_inference/causal_identification_strategy/control_function.py +112 -0
  21. econometrics/causal_inference/causal_identification_strategy/difference_in_differences.py +107 -0
  22. econometrics/causal_inference/causal_identification_strategy/event_study.py +119 -0
  23. econometrics/causal_inference/causal_identification_strategy/first_difference.py +89 -0
  24. econometrics/causal_inference/causal_identification_strategy/fixed_effects.py +103 -0
  25. econometrics/causal_inference/causal_identification_strategy/hausman_test.py +69 -0
  26. econometrics/causal_inference/causal_identification_strategy/instrumental_variables.py +145 -0
  27. econometrics/causal_inference/causal_identification_strategy/mediation_analysis.py +121 -0
  28. econometrics/causal_inference/causal_identification_strategy/moderation_analysis.py +109 -0
  29. econometrics/causal_inference/causal_identification_strategy/propensity_score_matching.py +140 -0
  30. econometrics/causal_inference/causal_identification_strategy/random_effects.py +100 -0
  31. econometrics/causal_inference/causal_identification_strategy/regression_discontinuity.py +98 -0
  32. econometrics/causal_inference/causal_identification_strategy/synthetic_control.py +111 -0
  33. econometrics/causal_inference/causal_identification_strategy/triple_difference.py +86 -0
  34. econometrics/distribution_analysis/__init__.py +28 -0
  35. econometrics/distribution_analysis/oaxaca_blinder.py +184 -0
  36. econometrics/distribution_analysis/time_series_decomposition.py +152 -0
  37. econometrics/distribution_analysis/variance_decomposition.py +179 -0
  38. econometrics/missing_data/__init__.py +18 -0
  39. econometrics/missing_data/imputation_methods.py +219 -0
  40. econometrics/nonparametric/__init__.py +35 -0
  41. econometrics/nonparametric/gam_model.py +117 -0
  42. econometrics/nonparametric/kernel_regression.py +161 -0
  43. econometrics/nonparametric/quantile_regression.py +249 -0
  44. econometrics/nonparametric/spline_regression.py +100 -0
  45. econometrics/spatial_econometrics/__init__.py +68 -0
  46. econometrics/spatial_econometrics/geographically_weighted_regression.py +211 -0
  47. econometrics/spatial_econometrics/gwr_simple.py +154 -0
  48. econometrics/spatial_econometrics/spatial_autocorrelation.py +356 -0
  49. econometrics/spatial_econometrics/spatial_durbin_model.py +177 -0
  50. econometrics/spatial_econometrics/spatial_regression.py +315 -0
  51. econometrics/spatial_econometrics/spatial_weights.py +226 -0
  52. econometrics/specific_data_modeling/micro_discrete_limited_data/README.md +164 -0
  53. econometrics/specific_data_modeling/micro_discrete_limited_data/__init__.py +40 -0
  54. econometrics/specific_data_modeling/micro_discrete_limited_data/count_data_models.py +311 -0
  55. econometrics/specific_data_modeling/micro_discrete_limited_data/discrete_choice_models.py +294 -0
  56. econometrics/specific_data_modeling/micro_discrete_limited_data/limited_dependent_variable_models.py +282 -0
  57. econometrics/statistical_inference/__init__.py +21 -0
  58. econometrics/statistical_inference/bootstrap_methods.py +162 -0
  59. econometrics/statistical_inference/permutation_test.py +177 -0
  60. econometrics/survival_analysis/__init__.py +18 -0
  61. econometrics/survival_analysis/survival_models.py +259 -0
  62. econometrics/tests/causal_inference_tests/__init__.py +3 -0
  63. econometrics/tests/causal_inference_tests/detailed_test.py +441 -0
  64. econometrics/tests/causal_inference_tests/test_all_methods.py +418 -0
  65. econometrics/tests/causal_inference_tests/test_causal_identification_strategy.py +202 -0
  66. econometrics/tests/causal_inference_tests/test_difference_in_differences.py +53 -0
  67. econometrics/tests/causal_inference_tests/test_instrumental_variables.py +44 -0
  68. econometrics/tests/specific_data_modeling_tests/test_micro_discrete_limited_data.py +189 -0
  69. 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
  70. pyproject.toml +9 -2
  71. server.py +15 -1
  72. tools/__init__.py +75 -1
  73. tools/causal_inference_adapter.py +658 -0
  74. tools/distribution_analysis_adapter.py +121 -0
  75. tools/gwr_simple_adapter.py +54 -0
  76. tools/machine_learning_adapter.py +567 -0
  77. tools/mcp_tool_groups/__init__.py +15 -1
  78. tools/mcp_tool_groups/causal_inference_tools.py +643 -0
  79. tools/mcp_tool_groups/distribution_analysis_tools.py +169 -0
  80. tools/mcp_tool_groups/machine_learning_tools.py +422 -0
  81. tools/mcp_tool_groups/microecon_tools.py +325 -0
  82. tools/mcp_tool_groups/missing_data_tools.py +117 -0
  83. tools/mcp_tool_groups/nonparametric_tools.py +225 -0
  84. tools/mcp_tool_groups/spatial_econometrics_tools.py +323 -0
  85. tools/mcp_tool_groups/statistical_inference_tools.py +131 -0
  86. tools/mcp_tools_registry.py +13 -3
  87. tools/microecon_adapter.py +412 -0
  88. tools/missing_data_adapter.py +73 -0
  89. tools/nonparametric_adapter.py +190 -0
  90. tools/spatial_econometrics_adapter.py +318 -0
  91. tools/statistical_inference_adapter.py +90 -0
  92. tools/survival_analysis_adapter.py +46 -0
  93. aigroup_econ_mcp-1.4.3.dist-info/METADATA +0 -710
  94. aigroup_econ_mcp-1.4.3.dist-info/RECORD +0 -92
  95. {aigroup_econ_mcp-1.4.3.dist-info → aigroup_econ_mcp-2.0.1.dist-info}/WHEEL +0 -0
  96. {aigroup_econ_mcp-1.4.3.dist-info → aigroup_econ_mcp-2.0.1.dist-info}/entry_points.txt +0 -0
  97. {aigroup_econ_mcp-1.4.3.dist-info → aigroup_econ_mcp-2.0.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,44 @@
1
+ """
2
+ 工具变量法测试
3
+ """
4
+
5
+ import numpy as np
6
+ import unittest
7
+ from econometrics.causal_inference.causal_identification_strategy import instrumental_variables_2sls
8
+
9
+
10
+ class TestInstrumentalVariables(unittest.TestCase):
11
+
12
+ def test_instrumental_variables_2sls(self):
13
+ """测试工具变量法"""
14
+ # 生成模拟数据
15
+ np.random.seed(42)
16
+ n = 100
17
+
18
+ # 工具变量
19
+ z = np.random.normal(0, 1, n)
20
+
21
+ # 内生变量(与误差项相关)
22
+ e1 = np.random.normal(0, 1, n)
23
+ x = 1 + 0.5 * z + e1
24
+
25
+ # 结果变量
26
+ e2 = np.random.normal(0, 1, n)
27
+ y = 2 + 1.5 * x + e2 + 0.3 * e1 # 包含内生性
28
+
29
+ # 执行工具变量回归
30
+ result = instrumental_variables_2sls(
31
+ y=y.tolist(),
32
+ x=x.reshape(-1, 1).tolist(),
33
+ instruments=z.reshape(-1, 1).tolist()
34
+ )
35
+
36
+ # 检查结果
37
+ self.assertIsNotNone(result.estimate)
38
+ self.assertIsNotNone(result.std_error)
39
+ self.assertIsNotNone(result.p_value)
40
+ self.assertGreater(result.n_observations, 0)
41
+
42
+
43
+ if __name__ == "__main__":
44
+ unittest.main()
@@ -0,0 +1,189 @@
1
+ """
2
+ 微观离散与受限数据模型测试
3
+ """
4
+
5
+ import numpy as np
6
+ import pandas as pd
7
+ import sys
8
+ import os
9
+ from scipy import stats
10
+
11
+ # 添加项目根目录到路径
12
+ sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
13
+
14
+ try:
15
+ from econometrics.specific_data_modeling.micro_discrete_limited_data import (
16
+ LogitModel,
17
+ ProbitModel,
18
+ TobitModel,
19
+ PoissonModel,
20
+ NegativeBinomialModel
21
+ )
22
+ HAS_MODELS = True
23
+ except ImportError as e:
24
+ print(f"导入模型时出错: {e}")
25
+ HAS_MODELS = False
26
+
27
+
28
+ def test_logit_model():
29
+ """测试Logit模型"""
30
+ print("测试Logit模型...")
31
+
32
+ # 生成模拟数据
33
+ np.random.seed(42)
34
+ n = 1000
35
+ X = np.random.normal(0, 1, (n, 2))
36
+ coef_true = np.array([1.0, -0.5])
37
+ linear_pred = np.dot(X, coef_true)
38
+ prob = 1 / (1 + np.exp(-linear_pred))
39
+ y = np.random.binomial(1, prob)
40
+
41
+ # 拟合模型
42
+ model = LogitModel()
43
+ model.fit(X, y)
44
+
45
+ print(f"真实系数: {coef_true}")
46
+ print(f"估计系数: {model.results_.params[1:]}") # 排除常数项
47
+ print(f"常数项: {model.results_.params[0]}")
48
+ print(f"AIC: {model.results_.aic}")
49
+ print(f"BIC: {model.results_.bic}")
50
+ print()
51
+
52
+
53
+ def test_probit_model():
54
+ """测试Probit模型"""
55
+ print("测试Probit模型...")
56
+
57
+ # 生成模拟数据
58
+ np.random.seed(42)
59
+ n = 1000
60
+ X = np.random.normal(0, 1, (n, 2))
61
+ coef_true = np.array([0.5, -0.3])
62
+ linear_pred = np.dot(X, coef_true)
63
+ prob = np.clip(stats.norm.cdf(linear_pred), 1e-10, 1-1e-10)
64
+ y = np.random.binomial(1, prob)
65
+
66
+ # 拟合模型
67
+ model = ProbitModel()
68
+ model.fit(X, y)
69
+
70
+ print(f"真实系数: {coef_true}")
71
+ print(f"估计系数: {model.results_.params[1:]}") # 排除常数项
72
+ print(f"常数项: {model.results_.params[0]}")
73
+ print(f"AIC: {model.results_.aic}")
74
+ print(f"BIC: {model.results_.bic}")
75
+ print()
76
+
77
+
78
+ def test_tobit_model():
79
+ """测试Tobit模型"""
80
+ print("测试Tobit模型...")
81
+
82
+ # 生成模拟数据
83
+ np.random.seed(42)
84
+ n = 1000
85
+ X = np.random.normal(0, 1, (n, 2))
86
+ coef_true = np.array([1.0, -0.5])
87
+ sigma_true = 0.5
88
+
89
+ # 生成潜在变量
90
+ y_latent = np.dot(X, coef_true) + np.random.normal(0, sigma_true, n)
91
+
92
+ # 截断:低于0的值设为0
93
+ y = np.where(y_latent > 0, y_latent, 0)
94
+
95
+ # 拟合模型
96
+ model = TobitModel(lower_bound=0)
97
+ model.fit(X, y)
98
+
99
+ print(f"真实系数: {coef_true}")
100
+ print(f"估计系数: {model.results_.params[1:]}") # 排除常数项
101
+ print(f"常数项: {model.results_.params[0]}")
102
+ print(f"对数似然: {model.results_.llf}")
103
+ print()
104
+
105
+
106
+ def test_poisson_model():
107
+ """测试泊松模型"""
108
+ print("测试泊松模型...")
109
+
110
+ # 生成模拟数据
111
+ np.random.seed(42)
112
+ n = 1000
113
+ X = np.random.normal(0, 1, (n, 2))
114
+ coef_true = np.array([0.5, -0.3])
115
+ mu = np.exp(np.dot(X, coef_true))
116
+ y = np.random.poisson(mu)
117
+
118
+ # 拟合模型
119
+ model = PoissonModel()
120
+ model.fit(X, y)
121
+
122
+ print(f"真实系数: {coef_true}")
123
+ print(f"估计系数: {model.results_.params[1:]}") # 排除常数项
124
+ print(f"常数项: {model.results_.params[0]}")
125
+ print(f"对数似然: {model.results_.llf}")
126
+ print(f"AIC: {model.results_.aic}")
127
+ print(f"BIC: {model.results_.bic}")
128
+
129
+ # 预测测试
130
+ y_pred = model.predict(X[:5])
131
+ print(f"前5个样本的预测值: {y_pred}")
132
+ print()
133
+
134
+
135
+ def test_negative_binomial_model():
136
+ """测试负二项模型"""
137
+ print("测试负二项模型...")
138
+
139
+ # 生成模拟数据
140
+ np.random.seed(42)
141
+ n = 1000
142
+ X = np.random.normal(0, 1, (n, 2))
143
+ coef_true = np.array([0.5, -0.3])
144
+
145
+ mu = np.exp(np.dot(X, coef_true))
146
+ # 生成负二项分布数据
147
+ alpha = 0.5
148
+ size = 1.0 / alpha
149
+ prob = size / (size + mu)
150
+ y = np.random.negative_binomial(size, prob)
151
+
152
+ # 拟合模型
153
+ model = NegativeBinomialModel()
154
+ model.fit(X, y)
155
+
156
+ print(f"真实系数: {coef_true}")
157
+ print(f"估计系数: {model.results_.params[1:-1]}") # 排除常数项和alpha参数
158
+ print(f"常数项: {model.results_.params[0]}")
159
+ print(f"对数似然: {model.results_.llf}")
160
+ print(f"AIC: {model.results_.aic}")
161
+ print(f"BIC: {model.results_.bic}")
162
+
163
+ # 预测测试
164
+ y_pred = model.predict(X[:5])
165
+ print(f"前5个样本的预测值: {y_pred}")
166
+ print()
167
+
168
+
169
+ if __name__ == "__main__":
170
+ if not HAS_MODELS:
171
+ print("模型不可用,请确保已安装statsmodels库")
172
+ exit(1)
173
+
174
+ try:
175
+ import statsmodels.api as sm
176
+ except ImportError:
177
+ print("需要安装statsmodels库")
178
+ exit(1)
179
+
180
+ print("微观离散与受限数据模型测试")
181
+ print("=" * 50)
182
+
183
+ test_logit_model()
184
+ test_probit_model()
185
+ test_tobit_model()
186
+ test_poisson_model()
187
+ test_negative_binomial_model()
188
+
189
+ print("所有测试完成!")