如何用Python進(jìn)行回歸分析與相關(guān)分析
一、前言
1.1 回歸分析
是用于研究分析某一變量受其他變量影響的分析方法,其基本思想是以被影響變量為因變量,以影響變量為自變量,研究因變量與自變量之間的因果關(guān)系。
1.2 相關(guān)分析
不考慮變量之間的因果關(guān)系而只研究變量之間的相關(guān)關(guān)系的一種統(tǒng)計(jì)方法。
二、代碼的編寫(xiě)
2.1 前期準(zhǔn)備
在編寫(xiě)代碼之前,我們首先要知道需要用到的庫(kù)有哪些。分別為:pandas\numpy\statsmodels\patsy。如果沒(méi)有安裝這些庫(kù)是無(wú)法運(yùn)行代碼的 ,因此需要提前安裝好這幾個(gè)庫(kù)。安裝方法我在基礎(chǔ)篇的第一章已經(jīng)寫(xiě)有,可以進(jìn)行參考:如何在Python中導(dǎo)入EXCEL數(shù)據(jù)
然后便可以導(dǎo)入庫(kù)和所要處理的數(shù)據(jù)了。
import pandas as pd import numpy as np import statsmodels.api as sm from patsy import dmatrices data=pd.read_excel(r'D:\雜貨\編碼數(shù)據(jù).xlsx',sheet_name='編碼數(shù)據(jù)')
展示以下我所導(dǎo)入的數(shù)據(jù)的樣式:

我準(zhǔn)備的excel表格的數(shù)據(jù)比較多,在python中輸出出來(lái)大概就是這個(gè)樣子,至于這些數(shù)字是什么含義不用過(guò)多理會(huì),這并不影響本篇方法的介紹。
2.2 編寫(xiě)代碼
2.2.1 相關(guān)分析
首先介紹最簡(jiǎn)單的一個(gè)數(shù)據(jù)指標(biāo):相關(guān)系數(shù)
代碼如下:
v=data['Q1'].corr(data['Q2'])#相關(guān)系數(shù)(求某兩個(gè)變量的相關(guān)系數(shù)) print(v) v=data.corr()#求所有變量之間的相關(guān)系數(shù) print(v)
前者是指定求某兩個(gè)變量間的相關(guān)系數(shù),而后者是直接接計(jì)算出所有變量的相關(guān)系數(shù)。
輸出結(jié)果如下:
前者:

后者:

2.2.2 一元線性回歸分析
代碼如下:
x=np.array(data['Q1'])#一元線性回歸分析 y=np.array(data['Q2']) X=sm.add_constant(x)#向x左側(cè)添加截距列x0=[1,……,1] model=sm.OLS(y,X)#建立最小二乘估計(jì) fit=model.fit()#擬合模型 print(fit.summary())
該方法是通過(guò)矩陣的形式進(jìn)行運(yùn)算的,首先將要輸入的數(shù)據(jù)x,y轉(zhuǎn)換為矩陣的形式,然后再給自變量x增加一列截距列,形成X矩陣,再進(jìn)行最小二乘估計(jì),然后擬合結(jié)果。
矩陣形式:
輸出結(jié)果如下:

2.2.3 多元線性回歸分析
vars=['Q1','Q2','Q6','Q7']#多元線性回歸分析
df=data[vars]#將輸入的數(shù)據(jù)轉(zhuǎn)換為矩陣(數(shù)組)形式
y,X=dmatrices('Q1~Q2+Q6+Q7',data=df,return_type='dataframe')
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())多元的代碼的編寫(xiě)形式與一元的編寫(xiě)形式實(shí)質(zhì)上差別不大,不同的地方在于第三行代碼,其形式為 y,X=dmatrices('Q1~Q2+Q6+Q7',data=df,return_type='dataframe'),而該行代碼的形式也是固定的,括號(hào)中的'Q1~Q2+Q6+Q7'這部分可根據(jù)個(gè)人想要模擬的方程形式編寫(xiě),Q1為因變量,Q2,Q6,Q7……等部分為自變量,個(gè)數(shù)不限;data=df部分是將轉(zhuǎn)換好的矩陣(數(shù)組)賦值給data;而return_type='dataframe'部分可以直接使用,一般不需要更改。
model=sm.OLS(y,X)進(jìn)行最小二乘估計(jì),fit=model.fit()進(jìn)行模型的擬合,最后輸出的fit.summary()即我們所需要的表格。
輸出結(jié)果如下:

補(bǔ)充:
在此附上關(guān)于多元回歸模型的一些內(nèi)容,可幫助理解矩陣形式的回歸模型。(摘自:《計(jì)量經(jīng)濟(jì)學(xué)基礎(chǔ)》張曉峒)

2.2.4 廣義線性回歸分析
廣義的線性回歸分析包括四種模型,分別為:正態(tài)分布擬合;二項(xiàng)分布擬合;泊松分布擬合;伽馬分布擬合。
本人常用二項(xiàng)分布,因此本篇以二項(xiàng)分布為例進(jìn)行介紹。
代碼如下:
vars2=['Q1','Q2']#廣義線性回歸分析 vars1=['Q6','Q7','Q8','Q9'] glm_binom=sm.GLM(data[vars2],data[vars1],family=sm.families.Binomial()) res=glm_binom.fit() print(res.summary())
需要注意的是:若在廣義線性回歸分析中的vars2的數(shù)據(jù)換成0-1形式的,則其結(jié)果與logistic回歸分析的結(jié)果一致,即可以說(shuō)0-1形式的因變量的廣義線性回歸為邏輯回歸。
輸出結(jié)果如下:

2.2.5 logistic回歸分析
代碼如下:
vars1=['Q6','Q7','Q8','Q9'] logit_mod=sm.Logit(data['Q13|3'],data[vars1])#logistic回歸分析,注意:data['Q13|3']的位置里的數(shù)據(jù)必須是0-1形式?。。? logit_res=logit_mod.fit(disp=0) print(logit_res.summary())
logistic回歸的代碼的編寫(xiě)形式與前面幾個(gè)回歸差別不大,理解起來(lái)不難,就不再重復(fù)講述。但需要注意的是,在使用邏輯回歸時(shí),sm.Logit(data['Q13|3'],data[vars1])中的data['Q13|3']的數(shù)據(jù)必須為0-1形式,亦可說(shuō)必須為虛擬變量的形式,否則程序會(huì)報(bào)錯(cuò)。這是邏輯回歸本身的含義,具體可自行查找邏輯回歸的資料學(xué)習(xí)。
輸出結(jié)果如下:

三、代碼集合
import pandas as pd
import numpy as np
import statsmodels.api as sm
from patsy import dmatrices
data=pd.read_excel(r'D:\雜貨\編碼數(shù)據(jù).xlsx',sheet_name='編碼數(shù)據(jù)')
pd.set_option('display.max_columns',1000)
pd.set_option("display.width",1000)
pd.set_option('display.max_colwidth',1000)
pd.set_option('display.max_rows',1000)
print(data)
v=data['Q1'].corr(data['Q2'])#相關(guān)系數(shù)
print(v)
x=np.array(data['Q1'])#一元線性回歸分析
y=np.array(data['Q2'])
X=sm.add_constant(x)#向x左側(cè)添加截距列x0=[1,……,1]
model=sm.OLS(y,X)#建立最小二乘估計(jì)
fit=model.fit()#擬合模型
print(fit.summary())
vars=['Q1','Q2','Q6','Q7']#多元線性回歸分析
df=data[vars]
y,X=dmatrices('Q1~Q2+Q6+Q7',data=df,return_type='dataframe')
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())
vars2=['Q1','Q2']#廣義線性回歸分析
vars1=['Q6','Q7','Q8','Q9']
glm_binom=sm.GLM(data[vars2],data[vars1],family=sm.families.Binomial())
res=glm_binom.fit()
print(res.summary())
logit_mod=sm.Logit(data['Q13|3'],data[vars1])#logistic回歸分析,注意:data['Q13|3']的位置里的數(shù)據(jù)必須是0-1形式?。?!
logit_res=logit_mod.fit(disp=0)
print(logit_res.summary())
#若在廣義線性回歸分析中的vars2的數(shù)據(jù)換成0-1形式的,則其結(jié)果與logistic回歸分析的結(jié)果一致。到此這篇關(guān)于如何用Python進(jìn)行回歸分析與相關(guān)分析的文章就介紹到這了,更多相關(guān)python 數(shù)據(jù)分析 回歸 數(shù)據(jù)挖掘內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python數(shù)據(jù)分析之線性回歸選擇基金
- Python數(shù)據(jù)分析之雙色球基于線性回歸算法預(yù)測(cè)下期中獎(jiǎng)結(jié)果示例
- python人工智能算法之線性回歸實(shí)例
- Python實(shí)現(xiàn)隨機(jī)森林回歸與各自變量重要性分析與排序
- Python利用keras接口實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)回歸
- Python基于TensorFlow接口實(shí)現(xiàn)深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)回歸
- Python反向傳播實(shí)現(xiàn)線性回歸步驟詳細(xì)講解
相關(guān)文章
python實(shí)現(xiàn)在一個(gè)畫(huà)布上畫(huà)多個(gè)子圖
今天小編就為大家分享一篇python實(shí)現(xiàn)在一個(gè)畫(huà)布上畫(huà)多個(gè)子圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python使用Rich實(shí)現(xiàn)美化終端顯示效果
Rich庫(kù)的功能就像它的名字一樣,使Python編程更加豐富(rich),用來(lái)幫助開(kāi)發(fā)者在控制臺(tái)(命令行)輸出中創(chuàng)建豐富、多彩和具有格式化的文本,下面我們就來(lái)了解下它的具體使用吧2024-02-02
Python工程師面試必備25條知識(shí)點(diǎn)
這篇文章主要為大家詳細(xì)介紹了Python工程師面試必備25條知識(shí)點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Python繪制loss曲線和準(zhǔn)確率曲線實(shí)例代碼
pytorch雖然使用起來(lái)很方便,但在一點(diǎn)上并沒(méi)有tensorflow方便,就是繪制模型訓(xùn)練時(shí)在訓(xùn)練集和驗(yàn)證集上的loss和accuracy曲線(共四條),下面這篇文章主要給大家介紹了關(guān)于Python繪制loss曲線和準(zhǔn)確率曲線的相關(guān)資料,需要的朋友可以參考下2022-08-08
Python中的fileinput模塊的簡(jiǎn)單實(shí)用示例
這篇文章主要介紹了Python中的fileinput模塊實(shí)用示例,文中的示例是使用其來(lái)便利硬盤(pán)分區(qū)下的文本文件并打印其中行的長(zhǎng)度,需要的朋友可以參考下2015-07-07
Pycharm中如何關(guān)掉python console
這篇文章主要介紹了Pycharm中如何關(guān)掉python console,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
python中正則表達(dá)式 re.findall 用法
在python中,通過(guò)內(nèi)嵌集成re模塊,程序媛們可以直接調(diào)用來(lái)實(shí)現(xiàn)正則匹配。本文重點(diǎn)給大家介紹python中正則表達(dá)式 re.findall 用法,感興趣的朋友跟隨小編一起看看吧2018-10-10

