R語言和Python實現回歸分析

2021-02-23 愛數據原統計網

變量之間關係可以分為兩類:

函數關係:反映了事務之間某種確定性關係

相關關係:兩個變量之間存在某種依存關係,但二者並不是一一對應的;反映了事務間不完全確定關係;相關係數(r)可以衡量這種相關關係。

r的取值範圍是[-1,1],r=1表示完全正相關!r=-1表示完全負相關!r=0表示完全不相關。


為什麼要對相關係數進行顯著性檢驗?

1)實際上完全沒有關係的變量,在利用樣本數據進行計算時也可能得到一個較大的相關係數值(尤其是時間序列數值)

2)當樣本數較少,相關係數就很大。當樣本量從100減少到40後,相關係數大概率會上升,但上升到多少,這個就不能保證了;取決於你的剔除數據原則,還有這組數據真的可能不存在相關性;

改變兩列數據的順序,不會對相關係數,和散點圖(擬合的函數曲線)造成影響;


對兩列數據進行歸一化處理,標準化處理,不會影響相關係數;

我們計算的相關係數是線性相關係數,只能反映兩者是否具備線性關係。相關係數高是線性模型擬合程度高的前提;此外相關係數反映兩個變量之間的相關性,多個變量之間的相關性可以通過復相關係數來衡量;


線性關係檢驗

回歸係數檢驗

最小二乘法是一種數學優化技術,它通過最小化誤差的平方和尋找數據的最佳函數匹配。

擬合優度:顧名思義,擬合優度就是衡量一個回歸做的好不好的指標,定義為 

我們期望回歸平方和佔比越大,那麼我們的模型就越好;但是回歸平方和<=總平方和;

 的缺陷:新增加一個變量,  會加大;所以單獨用  來評價模型的好壞並不靠譜

可以聯想到P值,我們總是說P<0.05,能得出顯著性的結論,我們拒絕H0,接受H1(往往我們對假設進行設計時,H1是我們想要支持的假設,H0是我們反對的假設。)


至於P<0.05的標準,則是統計學家們拍腦袋拍出來的。----人大著名統計學家吳喜之

針對  的缺陷:學者們提出了調整 

由此可見,R方總是小於調整R方的且調整R方可能為負;並且只有R方趨近1時,調整R方才有出馬的意義!

因此判斷多重共線性也多了一個方法:

選擇其中一個自變量將其作為因變量,重新擬合,求  ;若  趨近1,則存在多重共線性!


多重共線性:多重共線性與統計假設沒有直接關聯,但是對於解釋多元回歸的結果非常重要。相關係數反應兩個變量之間的相關性;回歸係數是假設其他變量不變,自變量變化一個單位,對因變量的影響,而存在多重共線性(變量之間相關係數很大),就會導致解釋困難;比如y~x1+x2;x·1與x2存在多重共線性,當x1變化一個單位,x2不變,對y的影響;而x1與x2高度相關,就會解釋沒有意義。

一元回歸不存在多重共線性的問題;而多元線性回歸要摒棄多重共線性的影響;所以要先對所有的變量進行相關係數分析,初步判定是否滿足前提---多重共線性


時間序列數據會自發呈現完全共線性問題,所以我們用自回歸分析方法;

出現多重共線性如何改善:

1. 刪除變量對去除多重共線性最為顯著。

2. 不想刪除變量,可以對自變量進行降維(CPA主成分分析),主成分分析後的各主成分之間是正交的,所以一定是線性無關。

3. 改善模型。


折後消耗y,下載量x

Excel繪製方法:先繪製散點圖--右鍵--添加趨勢線

電力系統中長期負荷的變化受到很多因素制約,這種制約關係難以定性描述,徵對負荷影 響因素的複雜性和不確定性,即多變量和隨機性,筆者將多元回歸分析應用到中長期電力負 荷預測之中。因變量(y)為全社會用電量,自變量通常為影響電力負荷各種因素,比如經 濟,人口,氣候等等,本文選擇以國民生產總值 GDP(x1)、全國人口(x2)為自變量,建 立回歸方程。考慮到國內五年計劃對預測的影響,選擇 2001-2015 年的全社會用電量作為樣 本。

源數據 R語言

data<-read.table("c:/Users/baihua/Desktop/ols.csv",header=T,sep=",",nrows=15,encoding = "UTF-8")newdata<-as.data.frame(data[,c("year","people","gdp","kw")])fit<-lm(kw~gdp+people,data=newdata)summary(fit)

回歸方程為:

對線性回歸方程進行如下假設檢驗:正態性檢驗、線性檢驗、獨立性檢驗、同方差性檢 驗。

對線性模型進行檢驗發現該模型不滿足同方差假設。同方差檢驗結果如圖 1 所示

採用 R 軟體包提供的 spreadLevelPlot()函數創建了一個添加最佳擬合曲線的散點圖,展 示標準化殘差絕對值與擬合值的關係。若滿足同方差假設,圖 1 中點的水平在最佳擬合曲線 周圍應該呈水平隨機分布,而圖 1 顯然不是,說明違反了同方差假設。模型不符合同方差假設,通常可以對因變量進行 BOX-COX 變換:

利用 R 軟體包提供的 powerTransform(),函數通過最大似然來估計出  ,研究發現對因變 量進行對數變換,去除自變量 GDP (x1)後,擬合效果最好,且滿足各種假設檢驗。

擬合結果如表 3 所示,模型整體解釋能力如表 4 所示:

建立的回歸方程:

常數項沒有物理意義,只是一個常量調整項。人口的回歸係數為 0.0001531,表示人口每 增加 1 萬人,全社會用電量增加 1.000151 億千瓦時,它的係數檢驗 P 值<0.05,表明在 0.05 的顯著水平下是顯著的。總體來看,人口解釋了全社會用電量 98%的方差。對回歸方程的 F 檢驗 p 值<0.05,表明預測變量人口有 95%以上的概率可以預測全社會用電量。

R 軟體包中的 qqPlot(),提供了準確的正態假設檢驗方法,它畫出了 n-p-1 個自由度下的 t 分布下的學生化殘差圖形,其中 n 是樣本大小,p 是回歸參數的數目(包括截距項)。如圖 2 所示:


R 軟體包中的 Durbin-Watson 檢驗的函數 durbinWatsonTest(),能夠檢驗出誤差的獨立 性。經檢驗 P 值>0.05,不顯著。說明誤差項之間獨立。

R 軟體包中的 crPlots()函數繪製的成分殘差圖,可以檢測出因變量與自變量之間是否非線 性關係,檢測結果如圖 所示:


R 軟體包中的 spreadLevelPlot()函數創建了一個添加最佳擬合曲線的散點圖,展示標準化 殘差絕對值與擬合值的關係。若滿足同方差假設,圖 4 中點的水平在最佳擬合曲線周圍應 該呈水平隨機分布,結果表明符合同方差假設。

library(car)qqPlot(fit,lables=row.names(newdata),id.method="identify",simulata=TRUE,main=" Q-Q Plot")durbinWatsonTest(fit)crPlots(fit)spreadLevelPlot(fit)ncvTest(fit)##BOX-COX 確定因變量類型函數summary(powerTransform(newdata$kw))##第一種變換fit<-lm(sqrt(kw)~gdp+people,data=newdata)summary(fit) ###假設檢驗 ##第二種變換fit<-lm(log(kw)~gdp+people,data=newdata)summary(fit) ###假設檢驗fit<-lm(log(kw)~gdp,data=newdata)summary(fit) ##假設檢驗fit<-lm(log(kw)~people,data=newdata)summary(fit)##假設檢驗fit<-lm(log(kw)~(gdp/people),data=newdata)summary(fit)##假設檢驗y.pre<-predict(fit)##計算預測值fit2<-exp(predict(fit))

Python回歸

import numpy as npimport pandas as pddata=pd.read_csv("C://Users//baihua//Desktop//vehicles.csv",encoding='utf-8')
df=pd.DataFrame(data)df.columns=["code","date","y","x1","x2","x3","x4","x5","x6","x7"]
'''思考:df=pd.DataFrame(data,columns=["code","date","y","x1","x2","x3","x4","x5","x6","x7"])print(df)
出現NaN的原因:columns是取data中的列而不是重命名,可以調整列中的順序但不可重命名!'''print(df)df1=df.drop(["code","date"],axis=1) #中文欄位名報錯,需要修改為英文欄位名

探索數據

做一個相關係數矩陣;
多元回歸如何選擇自變量?相關係數可以判斷自變量是否可以預測因變量

補充:選擇特徵的角度很多:變量的預測能力,變量之間的相關性,變量的簡單性(容易生成和使用),變量的強壯性(不容易被繞過),
變量在業務上的可解釋性(被挑戰時可以解釋的通)等等。但是,其中最主要和最直接的衡量標準是變量的預測能力。

1. 特徵選擇:特徵發散,如果一個特徵不發散,方差為0,說明樣本在這個特徵上基本沒有差異,這個特徵對於樣本區分基本沒用
2. 特徵選擇:考慮特徵與目標的相關性,優先選擇與目標相關性高的特徵!
3. 根據方差選擇特徵:計算各個特徵的方差,選擇方差大於閾值的特徵
4. 單變量特徵選擇:計算每個特徵與y的相關性;對於回歸問題或分類問題可以採用卡方檢驗的方式對特徵進行檢測
5. 皮爾遜相關係數(適用於回歸問題即y連續),簡單實用
6. 基於模型的特徵融合方法:主成分分析,聚類,支持向量機,隨機森林都可以作為篩選特徵的方法

'''print(df1.corr())print('---')print(df1.cov())
print(df1.describe())

多元回歸的變量選擇:

在變量較少的情況下,全子集回歸都要優於逐步回歸;
但若是變量較多,全子集回歸就會很費時間;

變量的自動選擇是對模型選擇的一種輔助方法,而不是直接方法;
缺陷:只能選出模型擬合度最高的模型,但是該模型是不是有意義,我們還需要結合真實場景進行選擇;

from sklearn.model_selection import train_test_splitimport numpy as npfrom sklearn import datasets,linear_modelimport pandas as pd
y=df1.iloc[:,0]x=df1.iloc[:,[1,2,3,4]]
# 訓練數據x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 1)regr = linear_model.LinearRegression()regr.fit(x_train,y_train) #訓練擬合參數
print('coefficients(b1,b2...):',regr.coef_)print('intercept(b0):',regr.intercept_)# 預測數據y_pred = regr.predict(x_test)print(y_pred)# 查看模型得分regr.score(x_test, y_test)
Out:coefficients(b1,b2...): [-2.58276362e-04 9.39725239e-04 3.19754647e+00 1.03817588e+00]intercept(b0): -15.518686092501014[513.46916069 820.48073383 595.60053947 112.04429448 548.1450162 618.4632776 271.81001594 368.01305579 660.92674908 575.78325852 523.48195751 545.90176081 718.77749951 501.81849186 360.00269366 808.0881115 578.33083072]
Out[66]:0.9981218281971582

相關焦點

  • 對比R語言和Python,教你實現回歸分析
    r的取值範圍是[-1,1],r=1表示完全正相關!r=-1表示完全負相關!r=0表示完全不相關。為什麼要對相關係數進行顯著性檢驗?我們期望回歸平方和佔比越大,那麼我們的模型就越好;但是回歸平方和<=總平方和;
  • rPython:在R語言中調用python命令
    經常使用Python和R語言的人都知道,如果R中有某些功能Python不容易實現時,則可以安裝加載rpy2包,從而實現在python中調用R語言命令的功能
  • 特徵工程總結:R與python的比較實現
    但本人將依據python代碼的實習,總結用R來實現,以方便對特徵工程全面的總結和理解。本文總結主要依據jasonfreak的「使用sklearn做單機特徵工程」總結,在此對其的深刻總結表示感謝。Alt text4.特徵選擇的python與R實現比較4.1導入數據    我們以經典的鳶尾花數據iris為例,分別根據已有的特徵選擇的框架圖,本人結合網絡上給出的python代碼總結,添加了運用R實現特徵選擇的方法
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。__version__)3.線性回歸分析Y= aX + b + e ,e表示殘差。
  • 一元(多元)線性回歸分析之R語言實現
    上篇介紹了《一元(多元)線性回歸分析之Excel實現》,本篇來探討一下回歸分析在R語言中的實現,我們將從更專業的角度對模型進行一些解讀。
  • R語言 | 回歸分析(四)
    R: The R Project for Statistical Computinghttps://www.r-project.org/RStudio:https://rstudio.com/今天是我們最後一期R語言入門系列。從去年11月份到今天,中間也因學業停更了很久,好在堅持了下來。
  • R語言 | 回歸分析(一)
    t檢驗,它是讓同一組個體參加了所有不同的處理條件,可以在ezANOVA( )函數中添加within=...語句實現重複測量分析。R: The R Project for Statistical Computinghttps://www.r-project.org/RStudio:https://rstudio.com/在生活中,我們遇到過這樣的問題:人的身高和體重有關係嗎?於是,你開始記錄並觀察許多人的身高和體重,得到相應的散點圖。
  • 做數據分析,Python和R究竟哪個更強?
    R語言由Ross Ihaka和Robert Gentleman於1995年發明。R語言最初是由S語言的一種實現,後者由John Chambers於1976年發明。R語言首個穩定的測試版本1.0.0於2000年發布。目前,由R開發核心團隊維護,最新的穩定版本為3.5.1。與Python不同,R在過去沒有需要語法轉化的重大變化。
  • 選擇R,還是Python?
    而為了實現同樣的功能,在Python中需要依靠導入模塊statsmodels。3. R中實現不同數據分析功能的包已形成龐大的生態系統,Python則僅有一些主要的數據分析包龐大的生態系統不一定意味著功能完備,關鍵還看系統內部各組分是否能有機融合為一體。
  • Python 和 R語言那個好?
    很多同學問我 R語言還是Python那個好?如果再有人問我,我就直接把這個文章轉發給他。
  • 用R也可以跑Python了
    如果你主要從事數據分析、統計建模和可視化,R大概是你的不二之選。但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。最近的KDnuggets Analytics的軟體調查中,Python和R位居數據科學和機器學習軟體的前兩名。如果你真的想提高你在數據科學領域的能力,這兩種語言你確實都應該學習。
  • 未來,不是【Python vs R】,而是【Python and R】
    原標題:未來,不是【Python vs R】,而是【Python and R】     近年來,一方面,民間對Python與R的對比分析「如火如荼」,給人感覺是「你死我活」;另一方面,業界開始探討Python和R的集成應用,好像是「你中有我,我中有你」。
  • R vs Python:硬碰硬的數據分析
    我們將在已有的數十篇從主觀角度對比Python和R的文章中加入自己的觀點,但是這篇文章旨在更客觀地看待這兩門語言。我們會平行使用Python和R分析一個數據集,展示兩種語言在實現相同結果時需要使用什麼樣的代碼。這讓我們了解每種語言的優缺點,而不是猜想。在Dataquest,我們教授兩種語言,並認為兩者在數據科學工具箱中都佔據各自的地位。
  • R語言從入門到精通:Day12--R語言統計--回歸分析
    回歸作為一個廣義的概念,涵蓋了許多變種,R語言中也為其提供了強大而豐富的函數和選項(但顯然選項越多,對初學者越不友好),早在2005年,R中就有200多種關於回歸分析的函數 (https://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf,這個文檔提供了部分回歸分析函數列表,供大家參考)。
  • 基於R語言的主成分和因子分析
    >)3)提取主成分4)主成分旋轉,當提取多個主成分時,對它們進行旋轉可使結果更具解釋性5)解釋結果6)計算主成分得分應用主成分分析使用psych包中的principal()函數,以下是該函數中參數的解釋:principal(r, nfactors
  • python多重線性回歸分析
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • 搞機器學習,Python 和 R 哪個更合適?
    機器學習和數據分析之間的區別隨著時間的推移都是相對變化,但是,其主要的區別是機器學習偏向模型解釋,而數據分析側重解釋和事實推測。在不斷增長的質疑聲中,Python在機器學習領域獲得了一席之地。R則作為一門用於事實推斷和統計推斷的語言在數據分析領域享有盛譽。
  • R語言邏輯回歸分析
    如何進行邏輯回歸分析邏輯回歸是當y=f(x),而y為分類變量的時候的邏輯曲線擬合的方法。
  • 大數據分析python自回歸模型
    在時間序列中,我們經常觀察到過去和現在的值之間的相似性。那是因為我們在此類數據中遇到自相關。換句話說,通過了解當今產品的價格,我們經常可以對明天的產品價值做出大致的預測。因此,在大數據分析python自回歸模型中,我們將討論一個反映這種相關性的模型。–自回歸模型。
  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。在這裡插入圖片描述此時求得的w即為最優模型參數OLS線性回歸的代碼實現#OLS線性回歸import numpy as npimport pandas as pdimport seaborn as