- Python量化投资:技术、模型与策略
- 赵志强 刘志伟
- 724字
- 2021-04-04 11:20:17
3.4 StatsModels
StatsModels是Python的统计建模和计量经济学工具包,包括一些描述统计、统计模型估计和推断。一般来讲,StatsModels能够很好地满足各类研究人员的统计计算需求。
事实上,Scipy中提供了一个子模块stats用于统计计算。但是stats模块是围绕随机变量提供数值方法的,比如随机变量的分位数、cdf等,还有一些检验方法,t检验、正太性检验等。stats模块缺少了回归方法,这一点完全是由StatsModels提供的,也就是围绕着回归模型提供操作方法,如数据访问、拟合、绘图等。所以在进行统计建模的时候,一般会使用StatsModels。
官网中介绍,StatsModels中的模型都会与现在已有的统计包进行对比测试,以确保所有的模型实现都是正确的。
为了照顾习惯使用R分析的人士,StatsModels提供了R风格的编程接口,同时也保留了原始风格的编程接口。
下面是官网上提供的两个例子,分别使用的是R风格和原始风格的编程方法。
R风格代码如下:
import numpy as np import statsmodels.api as sm import statsmodels.formula.api as smf # Load data dat = sm.datasets.get_rdataset("Guerry", "HistData").data # Fit regression model (using the natural log of one of the regressors) results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit() # Inspect the results print(results.summary())
原始风格代码如下:
import numpy as np import statsmodels.api as sm # Generate artificial data (2 regressors + constant) nobs = 100 X = np.random.random((nobs, 2)) X = sm.add_constant(X) beta = [1, .1, .5] e = np.random.random(nobs) y = np.dot(X, beta) + e # Fit regression model results = sm.OLS(y, X).fit() # Inspect the results print(results.summary())
然后导入statsmodels,代码如下:
import statsmodels print(dir(statsmodels.formula.api)) print(dir(statsmodels.api))
在实际使用过程中,大家可以根据自己的习惯挑选使用。不过需要注意的是,statsmodels.formula.api并没有包含statsmodels.api中的所有函数。比如时间序列分析包tsa就没有包含在statsmodels.formula.api中。我们可以通过如下代码查看这两个api中所包含的函数:
import statsmodels print(len(dir(statsmodels.formula.api))) print(len(dir(statsmodels.api))) print(dir(statsmodels.formula.api)) print(dir(statsmodels.api))
输出结果如下:
['GEE', 'GLM', 'GLS', 'GLSAR', 'Logit', 'MNLogit', 'MixedLM', 'NegativeBinomial', 'NominalGEE', 'OLS', 'OrdinalGEE', 'PHReg', 'Poisson', 'Probit', 'QuantReg', 'RLM', 'WLS', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'gee', 'glm', 'gls', 'glsar', 'logit', 'mixedlm', 'mnlogit', 'negative- binomial', 'nominal_gee', 'ols', 'ordinal_gee', 'phreg', 'poisson', 'probit', 'quantreg', 'rlm', 'wls'] ['GEE', 'GLM', 'GLS', 'GLSAR', 'Logit', 'MNLogit', 'MixedLM', 'NegativeBinomial', 'NominalGEE', 'OLS', 'OrdinalGEE', 'PHReg', 'Poisson', 'ProbPlot', 'Probit', 'QuantReg', 'RLM', 'WLS', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add_constant', 'categorical', 'cov_struct', 'datasets', 'distributions', 'emplike', 'families', 'formula', 'genmod', 'graphics', 'iolib', 'load', 'nonparametric', 'qqline', 'qqplot', 'qqplot_2samples', 'regression', 'robust', 'show_versions', 'stats', 'test', 'tools', 'tsa', 'version', 'webdoc']
可以看到,这两个api中包含的函数并不是一一对应的。在后面的章节中也会引用StatsModels,届时会做进一步说明,所以这里不再多作介绍。