變量之間關係可以分為兩類:
函數關係:反映了事務之間某種確定性關係
相關關係:兩個變量之間存在某種依存關係,但二者並不是一一對應的;反映了事務間不完全確定關係;相關係數(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