An example of using Pandas for regression
An example of using Pandas for regression
這個(gè)例子來(lái)自這本書 - "Python for Data Analysis", 這本書的作者 Wes McKinney 就是pandas的作者。
pandas提供了一些很方便的功能,比如最小二乘法(OLS),可以用來(lái)計(jì)算回歸方程式的各個(gè)參數(shù)。 同時(shí)pandas還可以輸出類似ANOVA的匯總信息,比如決定系數(shù)(R平方), F 統(tǒng)計(jì)量等。
OK,直接上例子。
數(shù)據(jù)準(zhǔn)備
首先創(chuàng)建1000只股票,股票代碼(5個(gè)字符)通過(guò)隨機(jī)方式生成。
In [29]: import stringIn [32]: import randomIn [33]: random.seed(0)In [34]: N = 1000In [35]: def rands(n):....: choices = string.ascii_uppercase....: return ''.join([random.choice(choices) for _ in xrange(n)])....:In [36]: tickers = np.array([rands(5) for x in xrange(N)])回歸分析
假設(shè)現(xiàn)在有個(gè) multiple factor model, 如下所示:
y = 0.7 * x1 - 1.2 * x2 + 0.3 * x3 + random value按照這個(gè)模型創(chuàng)建一個(gè)portfolio, 然后我們?cè)倌脤?shí)際得到的值來(lái)跟這3個(gè)factor來(lái)做下回歸分析,看得到的系數(shù)是不是跟上面的這個(gè)model比較接近。
首先創(chuàng)建三個(gè)隨機(jī)數(shù)組(每個(gè)大小都為1000, 對(duì)應(yīng)剛才創(chuàng)建的1000只股票),分別為fac1, fac2, 和fac3.
In [58]: from numpy.random import randIn [59]: fac1, fac2, fac3 = np.random.rand(3, 1000)In [62]: ticker_subset = tickers.take(np.random.permutation(N)[:1000])用選擇的1000只股票按照上面的model創(chuàng)建portfolio, 得到的一組值也就是因變量y.
In [64]: port = Series(0.7*fac1 - 1.2*fac2 + 0.3*fac3 + rand(1000), index=ticker_subset)現(xiàn)在我們用實(shí)際得到y(tǒng)和x1/x2/x3來(lái)做下回歸。 首先把三個(gè)factors 構(gòu)建成DataFrame.
In [65]: factors = DataFrame({'f1':fac1, 'f2':fac2, 'f3':fac3}, index=ticker_subset)然后就直接調(diào)用pd.ols方法來(lái)進(jìn)行回歸 -
In [70]: pd.ols(y=port, x=factors) Out[70]:-------------------------Summary of Regression Analysis-------------------------Formula: Y ~ <f1> + <f2> + <f3> + <intercept>Number of Observations: 1000 Number of Degrees of Freedom: 4R-squared: 0.6867 Adj R-squared: 0.6857Rmse: 0.2859F-stat (3, 996): 727.6383, p-value: 0.0000Degrees of Freedom: model 3, resid 996-----------------------Summary of Estimated Coefficients------------------------Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5% --------------------------------------------------------------------------------f1 0.6968 0.0311 22.44 0.0000 0.6359 0.7577f2 -1.2672 0.0312 -40.64 0.0000 -1.3283 -1.2061f3 0.3345 0.0310 10.80 0.0000 0.2738 0.3952intercept 0.5018 0.0275 18.28 0.0000 0.4480 0.5557 ---------------------------------End of Summary---------------------------------In [71]:根據(jù)回歸結(jié)果,得到的方程式是 -
y = 0.5018 + 0.6968 * f1 - 1.2672 * f2 + 0.3345 * f3對(duì)比下實(shí)際的model -
y = 0.7 * x1 - 1.2 * x2 + 0.3 * x3 + random value可以看出還是比較match的。這個(gè)從每個(gè)參數(shù)p-value也可以看出來(lái)。
另外,如果只想關(guān)注每個(gè)系數(shù),可以直接讀取beta.
In [71]: pd.ols(y=port, x=factors).beta Out[71]: f1 0.696817 f2 -1.267172 f3 0.334505 intercept 0.501836 dtype: float64怎么樣,感覺(jué)pandas是不是棒棒噠!
轉(zhuǎn)載于:https://www.cnblogs.com/fangwenyu/p/4284523.html
總結(jié)
以上是生活随笔為你收集整理的An example of using Pandas for regression的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Lighttpd日志打印格式
- 下一篇: 从零开始学android开发-IDE空间