statsmodels包可以做傳統統計方面的分析,有強大的函數庫可以調用,比如線性回歸,時間序列等
官網:http://www.statsmodels.org/stable/index.html
我們先通過例子快速了解如何通過Statsmodels進行統計學分析,我們首先導入相應庫:
在這裡我們需要引入一點矩陣運算的知識補充:
tip:我們只要是通過回歸的方法,都可以認為是一種「抓住信息」的過程:
我們也可以這樣看,有這樣一系列數據,我們如果直接帶入上述這樣的方程,其實是無解的,這個時候我們就需要找到一個「折中的方案」,也就是「誤差最小」的方案:
我們找到一個「誤差最小的」模型,然後用這個模型去擬合這樣一組數據,這樣我們就能夠通過模型最大限度「抓住」這k組數據的特徵,這樣如果我們面對新的數據,就能夠通過我們這個模型進行判斷和預測了。
所以問題來了,我們該如何改變這個模型的係數對數據進行「擬合」呢?
tip:這個時候我們需要介紹OLS方法:通過最小化誤差的平方和尋找數據的最佳函數匹配,比如說下圖的diabetes的數據,數據呈現散點,我們可以通過OLS找到一條誤差最小的線,去最大限度的擬合所有的散點,這條線,就是我們通過數據「抽象出來」的「規律」,
或者我們可以這樣感性的理解:我們的生活中經歷的事情就是這一些散點,這一條線,就是我們「總結出來的經驗」。
有以上的感性理解與直覺判斷後,我們通過數學公式來嚴格定義:
誤差平方最小化,也就是上式最小化
我們當然可以通過代數的方法求解,但是計算非常複雜,我們這裡介紹矩陣的方法求線性方程組:
同樣是上述方程組:
我們將其寫成矩陣的形式:
根據矩陣運算性質,有:
也就是說,我們如果想把「最優的係數」擬合出來,本質上轉換成了求A的過程
我們做一下矩陣的變換,可得A:
我們甚至能把回歸的SSE求出來:
我們來看一下Statsmodels裡面的OLS該如何調用:
注意這裡的參數,是用的內生變量和外生變量
tip:一個模型,是由許多變量構成的。當我們想要研究一些變量對另一個變量的影響時,被選定的變量就是自變量,被影響的變量就是因變量。由模型自身所決定的變量,被稱為內生變量,由模型外的因素和條件所決定的變量,就是外生變量。在一個模型中的參數就是由模型外部條件所決定的,通常就是外生變量
所以endog 是回歸中的反應變量(也稱因變量),是模型中y(t), 輸入是一個長度k的array, exog 則是回歸變量(也稱自變量)的值,就是
statsmodels.OLS 不會假設回歸模型有常數項,我們需要注意這一個參數的設定:
所以在默認情況下,模型為:
那麼我們接下來可以生成一組數據,先用純矩陣運算的方法求出A,然後再看看Statsmodels裡面的如何調用,再將兩者對比看看是否一致:
我們首先可以通過linspace生成x的樣本array:
注意我們需要x矩陣的第一列為1,Statsmodels裡面恰好有這一功能,非常方便:
接下來我們不妨確認下係數,我們選擇8與18兩個吉利的數字:
當然殘差項不能忘記,我們根據性質,生成正態分布的殘差項:
接著我們可以進行運算,求得y:
這樣我們首先可以直接通過矩陣運算求A:
通過下式:
當然,矩陣連乘還可以用這樣的方法:
兩者結果一樣
那麼我們再來看看用statsmodels如何快速計算出係數:
我們需要把y與X放入,生成模型後開始擬合數據就行了
我們會發現擬合模型的數據與我們直接用矩陣運算的數據完全一致
當然我們也可以通過summary調出整個回歸的詳細:
我們可以發現係數7.69,18.02與我們最開始設置的8,18非常接近
當然我們也可以可視化一下:
我們通過導入matplotlib
並將擬合的y數據調出:
然後我們可以生成數據的圖與通過OLS回歸出來的圖
當然,如果覺得不明顯的話,我們可以通過調整殘差的係數對數據進行調整,例如,我們將殘差乘以5
得
未完待續.
Hey,想學了那麼久的Python,推薦一個超乾乾貨入門合集。用Python做爬蟲,數據分析,全棧建設,Fintech金融量化,機器學習,辦公自動化,樹莓派,美好生活DIY,.2000+連載,不僅有編程,還有更多原理講解。
更多內容,歡迎點擊【閱讀原文】訂閱連載視頻。觀看逐行代碼與原理講解與加入同業交流與技術探討社區。也歡迎關注公眾號,有更多編程/機器學習/數據科學/FinTech/量化投資/雲計算 原創乾貨