多元迴歸分析python實戰-----對我國財政收入的多因素進行分析
目錄
前言
財政收入的規模大小對一個國家來說具有十分重要的意義,本文章分別從財政收入的組成因素和財政收入的影響因素兩個方面入手,對祖國1979-1999年度財政收入情況進行多因素分析。在財政收入影響因素分析上,除了通過理論選出因素並利用統計軟體建立模型分析,還把影響財政收入的結構因素進行了個別分析,最後在分析結論的基礎上,結合當前客觀條件和政策因素對未來財政收入做了一定的期望。
資料
資料來自網路,一共含有9個因素,GDP、能源消費總量、從業人員總數、全社會固定資產投資總額、實際利用外資總額,全國城鄉居民儲蓄存款年底月、居民人均消費水平、消費品零售總額和居民消費價格指數。資料如下。
其中t: 年份;y:財政收入;x1:GDP;x2:能源消費總量;x3:從業人員總數;x4:全社會固定資產投資總額;x5:實際利用外資總額;x6:全國城鄉居民儲蓄存款年底月;x7:居民人均消費水平;x8:消費品零售總額;x9:居民消費價格指數
t y x1 x2 x3 x4 x5 x6 x7 x8 x9 1979 1146.38 4038.2 58558 41024 849.36 31.14 281 197 1800 102 1980 1139.53 4517.8 60237 42361 910.9 31.14 399.5 236 2140 108.1 1981 1173.79 4860.3 59447 43725 961 31.14 523.7 249 2350 110.7 1982 1212.33 5301.8 62067 45296 1230.4 31.14 675.4 266 2570 112.8 1983 1366.95 5937.4 65040 46436 1430.1 19.81 892.5 289 2849.4 114.5 1984 1642.86 7206.7 70904 48197 1832.9 27.03 1214.7 327 3376.4 117.7 1985 2004.82 8986.1 76501 49873 2543.2 46.47 1622.6 437 4305 128.1 1986 2122.04 10201.4 80850 51282 3120.5 72.58 2238.5 452 4950 135.8 1987 2199.35 11954.5 86632 52783 3791.7 84.32 3081.4 550 5820 145.7 1988 2357.24 11922.3 92997 54334 4763.8 102.26 3822.2 692 7440 172.7 1989 2664.9 16917.8 96934 55329 4410.4 100.39 5196.4 762 8101.4 203.4 1990 2937.1 18398.4 95703 63909 4517 102.89 7119.8 802 8300.1 207.7 1991 3149.48 21662.3 103783 64799 5594.3 113.54 9241.6 896 9415.6 213.7 1992 3483.37 26651.9 109170 65554 8080.1 192.02 11759.4 1070 10993.7 225.2 1993 4348.93 34360.5 113993 66373 13072.3 359.6 15203.5 1331 12462.1 254.9 1994 5158.1 46670 122737 67199 17042.1 432.13 21318.8 1746 16264.7 310.2 1995 6242.2 57494.9 131176 67947 20019.3 481.33 29662.3 2236 20620 356.1 1996 7407.99 66830.3 138946 68850 22913.5 548.04 38520.8 2641 24774.1 377.8 1997 9651.14 73142.7 138173 69500 24914.1 644.08 46279.8 2834 27298.9 380.5 1998 9875.95 76967.1 132214 69957 28406.2 585.57 53407.5 2972 29153.5 370.9 1999 11444.05 80422.8 122000 70586 29834.7 526.59 59621.8 3143 31134.7 359.8
python相關分析
匯入資料
>>> import pandas as pd
>>> import numpy as np
>>> from matplotlib import pyplot as plt
>>> from sklearn.linear_model import LinearRegression
>>> data = pd.read_csv('D:\python\DataAnalysis\data\Revenue.csv')
>>> pd.read_csv('D:\python\DataAnalysis\data\Revenue.csv') t y x1 x2 ... x6 x7 x8 x9 0 1979 1146.38 4038.2 58558 ... 281.0 197 1800.0 102.0 1 1980 1139.53 4517.8 60237 ... 399.5 236 2140.0 108.1 2 1981 1173.79 4860.3 59447 ... 523.7 249 2350.0 110.7 3 1982 1212.33 5301.8 62067 ... 675.4 266 2570.0 112.8 4 1983 1366.95 5937.4 65040 ... 892.5 289 2849.4 114.5 5 1984 1642.86 7206.7 70904 ... 1214.7 327 3376.4 117.7 6 1985 2004.82 8986.1 76501 ... 1622.6 437 4305.0 128.1 7 1986 2122.04 10201.4 80850 ... 2238.5 452 4950.0 135.8 8 1987 2199.35 11954.5 86632 ... 3081.4 550 5820.0 145.7 9 1988 2357.24 11922.3 92997 ... 3822.2 692 7440.0 172.7 10 1989 2664.90 16917.8 96934 ... 5196.4 762 8101.4 203.4 11 1990 2937.10 18398.4 95703 ... 7119.8 802 8300.1 207.7 12 1991 3149.48 21662.3 103783 ... 9241.6 896 9415.6 213.7 13 1992 3483.37 26651.9 109170 ... 11759.4 1070 10993.7 225.2 14 1993 4348.93 34360.5 113993 ... 15203.5 1331 12462.1 254.9 15 1994 5158.10 46670.0 122737 ... 21318.8 1746 16264.7 310.2 16 1995 6242.20 57494.9 131176 ... 29662.3 2236 20620.0 356.1 17 1996 7407.99 66830.3 138946 ... 38520.8 2641 24774.1 377.8 18 1997 9651.14 73142.7 138173 ... 46279.8 2834 27298.9 380.5 19 1998 9875.95 76967.1 132214 ... 53407.5 2972 29153.5 370.9 20 1999 11444.05 80422.8 122000 ... 59621.8 3143 31134.7 359.8
>>> data.plot()
相關係數矩陣
>>> print (data.corr())
t y x1 ... x7 x8 x9
t 1.000000 0.901941 0.920798 ... 0.924618 0.930975 0.955969
y 0.901941 1.000000 0.985051 ... 0.986643 0.990883 0.934222
x1 0.920798 0.985051 1.000000 ... 0.998871 0.996276 0.974196
x2 0.975170 0.862568 0.910217 ... 0.912941 0.911467 0.971141
x3 0.979701 0.829253 0.862643 ... 0.863775 0.868514 0.926190
x4 0.910709 0.984607 0.996498 ... 0.995362 0.992484 0.962281
x5 0.902074 0.946547 0.980987 ... 0.977137 0.967684 0.973785
x6 0.874597 0.995125 0.984902 ... 0.985560 0.987829 0.925630
x7 0.924618 0.986643 0.998871 ... 1.000000 0.998598 0.974454
x8 0.930975 0.990883 0.996276 ... 0.998598 1.000000 0.969709
x9 0.955969 0.934222 0.974196 ... 0.974454 0.969709 1.000000
計算財政收入與其他列的相關係數
>>> print (data.corr()['y'])
t 0.901941
y 1.000000
x1 0.985051
x2 0.862568
x3 0.829253
x4 0.984607
x5 0.946547
x6 0.995125
x7 0.986643
x8 0.990883
x9 0.934222
Name: y, dtype: float64
分析結果
根據相關係數,y與x1-x9的關係都非常密切(r > 0.8,ρ < 0.001),財政收入與城鄉居民儲蓄存款年底餘額之間關係最為密切(r = 0.995,ρ < 0.001)
相關係數表明了各變數與財政收入之間的線性關係程度相當高,由此可以認為所選取的九個因素都與財政收入存在著線性關係。
基於此結果,覺的繼續進行線性迴歸分析,以便建立財政收入與每個因素之間的迴歸模型。這裡以財政收入為因變數,其他為自變數
python迴歸分析
這裡我們使用了sklearn庫,和高大上機器學習相關的
模型建立
>>> lrModel = LinearRegression()
>>> y = data['y'].values.reshape(-1, 1)
>>> x = data.ix[:,2:]
這裡因為函式的特殊性,即使是一維陣列也要轉換為二位陣列。
>>> x
x1 x2 x3 x4 ... x6 x7 x8 x9
0 4038.2 58558 41024 849.36 ... 281.0 197 1800.0 102.0
1 4517.8 60237 42361 910.90 ... 399.5 236 2140.0 108.1
2 4860.3 59447 43725 961.00 ... 523.7 249 2350.0 110.7
3 5301.8 62067 45296 1230.40 ... 675.4 266 2570.0 112.8
4 5937.4 65040 46436 1430.10 ... 892.5 289 2849.4 114.5
5 7206.7 70904 48197 1832.90 ... 1214.7 327 3376.4 117.7
6 8986.1 76501 49873 2543.20 ... 1622.6 437 4305.0 128.1
7 10201.4 80850 51282 3120.50 ... 2238.5 452 4950.0 135.8
8 11954.5 86632 52783 3791.70 ... 3081.4 550 5820.0 145.7
9 11922.3 92997 54334 4763.80 ... 3822.2 692 7440.0 172.7
10 16917.8 96934 55329 4410.40 ... 5196.4 762 8101.4 203.4
11 18398.4 95703 63909 4517.00 ... 7119.8 802 8300.1 207.7
12 21662.3 103783 64799 5594.30 ... 9241.6 896 9415.6 213.7
13 26651.9 109170 65554 8080.10 ... 11759.4 1070 10993.7 225.2
14 34360.5 113993 66373 13072.30 ... 15203.5 1331 12462.1 254.9
15 46670.0 122737 67199 17042.10 ... 21318.8 1746 16264.7 310.2
16 57494.9 131176 67947 20019.30 ... 29662.3 2236 20620.0 356.1
17 66830.3 138946 68850 22913.50 ... 38520.8 2641 24774.1 377.8
18 73142.7 138173 69500 24914.10 ... 46279.8 2834 27298.9 380.5
19 76967.1 132214 69957 28406.20 ... 53407.5 2972 29153.5 370.9
20 80422.8 122000 70586 29834.70 ... 59621.8 3143 31134.7 359.8
>>> y
array([[ 1146.38],
[ 1139.53],
[ 1173.79],
[ 1212.33],
[ 1366.95],
[ 1642.86],
[ 2004.82],
[ 2122.04],
[ 2199.35],
[ 2357.24],
[ 2664.9 ],
[ 2937.1 ],
[ 3149.48],
[ 3483.37],
[ 4348.93],
[ 5158.1 ],
[ 6242.2 ],
[ 7407.99],
[ 9651.14],
[ 9875.95],
[11444.05]])
模型檢驗
>>> lrModel.score(x,y)
0.9971458875882132
確定公式
檢視截距
>>> alpha = lrModel.intercept_[0]
>>> alpha
2425.6858933074127
檢視引數
>>> beta = lrModel.coef_[0]
>>> beta
array([ 0.1000633 , -0.06393532, 0.06399272, -0.09941855,
6.08718343, -0.1251754 , -5.19932315, 1.07558855,
-16.21937074])
最後公式為
>>> y =2425.6858933074127 + 0.1000633x1 - 0.06393532x2 + 0.06399272x3 - 0.09941855x4 + 6.08718343x5 - 0.1251754x6 - 5.19932315x7 + 1.07558855x8 - 16.21937074x9
從結果可知,對財政資料影響正相關的有 x1國內生產總值,x3從業人員總數,x5實際利用外資總額,x8消費品零售總額,x9居民消費總數。
>>> data['y'].plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x000000001C30E7F0>
分析結果
(1)從我們上面的步驟來看,我國財政增長具有相當的慣性
(2)財政收入對GDP的依存度較低,這反映出改革開放以來,我國財政收入佔GDP的比重出現逐年下滑的客觀事實。
(3)財政收入對能源消費總量x2和全社會固定資產投資總額出現輕微負相關,說明我國的消費結構發生了一些變化
(4)x3從業人數總額和x8零售品消費總額對財政收入正相關,這一直都是相輔相成的