日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

An example of using Pandas for regression

發(fā)布時(shí)間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 An example of using Pandas for regression 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。