拓端tecdat|R語言邏輯回歸Logistic回歸分析預(yù)測股票漲跌
原文鏈接:http://tecdat.cn/?p=23449?
原文出處:拓端數(shù)據(jù)部落公眾號
本文回答了關(guān)于邏輯回歸的問題:它與線性回歸有什么不同,如何在R中用glm()函數(shù)擬合和評估這些模型等等?
Logistic回歸是機(jī)器學(xué)習(xí)從統(tǒng)計學(xué)領(lǐng)域的一種技術(shù)。它是用一個或多個解釋變量對二項式結(jié)果進(jìn)行建模的一種強(qiáng)大的統(tǒng)計方法。它通過使用邏輯函數(shù)估計概率來衡量分類因變量和一個或多個自變量之間的關(guān)系,這就是邏輯分布。
本R教程將指導(dǎo)你完成邏輯回歸的簡單執(zhí)行。
你將首先探索邏輯回歸背后的理論:你將了解更多關(guān)于與線性回歸的區(qū)別以及邏輯回歸模型的樣子。你還會發(fā)現(xiàn)多指標(biāo)和序數(shù)邏輯回歸。
接下來,你將解決R中的邏輯回歸問題:你不僅要探索一個數(shù)據(jù)集,還要使用R中強(qiáng)大的glm()函數(shù)擬合邏輯回歸模型,評估結(jié)果并解決過擬合問題。
提示:如果你有興趣將你的線性回歸技能提高到一個新的水平,也可以考慮參加我們的R語言課程!
?
回歸分析:簡介
邏輯回歸是一種回歸分析技術(shù)。回歸分析是一套統(tǒng)計過程,你可以用它來估計變量之間的關(guān)系。更具體地說,你用這套技術(shù)來模擬和分析一個因變量和一個或多個自變量之間的關(guān)系?;貧w分析幫助你了解當(dāng)一個自變量被調(diào)整而其他變量被固定時,因變量的典型值如何變化。
正如你已經(jīng)讀到的,有各種回歸技術(shù)。你可以通過觀察三個方面來區(qū)分它們:自變量的數(shù)量、因變量的類型和回歸線的形狀。
線性回歸
線性回歸是最廣為人知的建模技術(shù)之一。簡而言之,它允許你使用線性關(guān)系來預(yù)測Y的(平均)數(shù)值,對于X的一個給定值,用一條直線。這條線被稱為 "回歸線"。
因此,線性回歸模型是y=ax+b。該模型假設(shè)因變量y是定量的。然而,在許多情況下,因變量是定性的,或者換句話說,是分類的。例如,性別是定性的,取值為男性或女性。
預(yù)測一個觀察值的定性反應(yīng)可以被稱為對該觀察值進(jìn)行分類,因為它涉及到將觀察值分配到一個類別或等級。另一方面,經(jīng)常用于分類的方法首先預(yù)測定性變量的每個類別的概率,作為進(jìn)行分類的基礎(chǔ)。
線性回歸不能夠預(yù)測概率。例如,如果你使用線性回歸為二元因變量建模,所產(chǎn)生的模型可能不會將預(yù)測的Y值限制在0和1之內(nèi)。 這里就是邏輯回歸發(fā)揮作用的地方,你可以得到一個反映事件發(fā)生概率的概率分?jǐn)?shù)。
Logistic邏輯回歸
邏輯回歸是分類技術(shù)的一個實例,你可以用它來預(yù)測一個定性的反應(yīng)。更具體地說,邏輯回歸是對性別屬于某個特定類別的概率建模。
這意味著,如果你想做性別分類,其中反應(yīng)性別屬于男性或女性這兩個類別中的一個,你將使用邏輯回歸模型來估計性別屬于某個特定類別的概率。
例如,給定長頭發(fā)的性別的概率可以寫成:。
Pr(gender=female|longhair)(縮寫為p(longhair))的值將在0和1之間。那么,對于任何給定的longhair值,可以對性別進(jìn)行預(yù)測。
鑒于X是解釋變量,Y是因變量,那么你應(yīng)該如何建立p(X)=Pr(Y=1|X)和X之間的關(guān)系模型?線性回歸模型表示這些概率為。
這種方法的問題是,任何時候?qū)幋a為0或1的二元因變量進(jìn)行直線擬合,原則上我們總是可以預(yù)測X的某些值的p(X)<0,其他值的p(X)>1。
為了避免這個問題,你可以使用logistic函數(shù)來建立p(X)的模型,對于X的所有值,它的輸出在0和1之間。
對數(shù)函數(shù)總是會產(chǎn)生一個S型曲線,所以無論X的值是多少,我們都會得到一個合理的預(yù)測。
上述方程也可以重構(gòu)為:
數(shù)量
被稱為幾率比,可以在0和∞之間取任何值。接近0和∞的幾率值分別表示p(X)的概率非常低和非常高。
通過從上式中對兩邊取對數(shù),你可以得到。
左手邊被稱為Logit。在一個邏輯回歸模型中,增加一個單位的X會使對數(shù)改變β0。但無論X的價值如何,如果β1是正的,那么增加X將與增加P(X)相關(guān),如果β1是負(fù)的,那么增加X將與減少P(X)相關(guān)。
系數(shù)β0和β1是未知的,必須根據(jù)現(xiàn)有的訓(xùn)練數(shù)據(jù)來估計。對于邏輯回歸,你可以使用最大似然,一種強(qiáng)大的統(tǒng)計技術(shù)。讓我們再來看看你的性別分類的例子。
你尋求β0和β1的估計值,將這些估計值插入p(X)的模型中,對于所有的女性樣本,產(chǎn)生一個接近于1的數(shù)字,對于所有的非女性樣本,產(chǎn)生一個接近于0的數(shù)字。
可以用一個叫做似然函數(shù)的數(shù)學(xué)方程來正式化。
選擇估計值β0和β1是為了使這個似然函數(shù)最大化。一旦系數(shù)被估計出來,你就可以簡單地計算出在任何長發(fā)的情況下是女性的概率??偟膩碚f,最大似然法是擬合非線性模型的一個非常好的方法。
多項式Logistic回歸
到目前為止,本教程只關(guān)注了二項式邏輯回歸,因為你是將實例分類為男性或女性。多項式Logistic回歸模型是二項式Logistic回歸模型的一個簡單擴(kuò)展,當(dāng)探索性變量有兩個以上的名義(無序)類別時,你可以使用該模型。
在多項式邏輯回歸中,探索性變量被虛擬編碼為多個1/0變量。除了一個類別外,所有類別都有一個變量,所以如果有M個類別,就會有M-1M-1個虛擬變量。每個類別的虛擬變量在其類別中的值為1,在所有其他類別中的值為0。有一個類別,即參考類別,不需要它自己的虛擬變量,因為它是由所有其他變量都是0來唯一識別的。
然后,多叉邏輯回歸為每個虛擬變量估計一個單獨的二元邏輯回歸模型。結(jié)果是M-1M-1二元邏輯回歸模型。每個模型都傳達(dá)了預(yù)測因素對該類別成功概率的影響,與參考類別相比較。
有序logistic邏輯回歸
除了多叉邏輯回歸,你還有有序邏輯回歸,它是二叉邏輯回歸的另一個延伸。有序回歸是用來預(yù)測具有 "有序 "的多個類別和自變量的因變量。你已經(jīng)在這種類型的邏輯回歸的名稱中看到了這一點,因為 "有序 "意味著 "類別的順序"。
換句話說,它被用來分析因變量(有多個有序?qū)哟危┡c一個或多個自變量的關(guān)系。
例如,你正在進(jìn)行客戶訪談,評估他們對我們新發(fā)布產(chǎn)品的滿意度。你的任務(wù)是向受訪者提出一個問題,他們的答案介于滿意-滿意或不滿意-非常不滿意之間。為了很好地概括答案,你在回答中加入了一些等級,如非常不滿意,不滿意,中立,滿意,非常滿意。這有助于你觀察類別中的自然秩序。
用glm進(jìn)行R語言的Logistic回歸
在本節(jié)中,你將研究一個二元邏輯回歸的例子,你將用ISLR包解決這個問題,它將為你提供數(shù)據(jù)集,glm()函數(shù)一般用于擬合廣義線性模型,將用于擬合邏輯回歸模型。
加載數(shù)據(jù)
首先要做的是安裝和加載ISLR包,它有你要使用的所有數(shù)據(jù)集。
在本教程中,你將使用股市數(shù)據(jù)集。該數(shù)據(jù)集顯示了2001年至2005年間標(biāo)準(zhǔn)普爾500股票指數(shù)的每日收益率。
探索數(shù)據(jù)
讓我們來探索一下。names()對于查看數(shù)據(jù)框上的內(nèi)容很有用,head()是對前幾行的一瞥,而summary()也很有用。
?
summary()函數(shù)為你提供了數(shù)據(jù)框架上每個變量的簡單總結(jié)。你可以看到有成交量,收盤價,和漲跌方向。你將使用 "漲跌方向 "作為因變量,因為它顯示了自前一天以來市場是上漲還是下跌。
數(shù)據(jù)的可視化
數(shù)據(jù)可視化也許是總結(jié)和了解你的數(shù)據(jù)的最快和最有用的方法。你將從單獨探索數(shù)字變量開始。
直方圖提供了一個數(shù)字變量的柱狀圖,它被分成若干個部分,其高度顯示了屬于每個部分的實例的數(shù)量。它們對于獲得一個屬性的分布特征是很有用的。
for(i in 1:8)hist(Smarket[,i]
這是極難看到的,但大多數(shù)變量顯示出高斯或雙高斯的分布。
你可以用盒狀圖和盒須圖以不同的方式來觀察數(shù)據(jù)的分布。盒子包括了數(shù)據(jù)的中間50%,線顯示了中位數(shù),圖中的須線顯示了數(shù)據(jù)的合理范圍。任何在須線之外的點都是離群值。
for(i in 1:8) boxplot(Smarket[,i]
你可以看到,Lags和Today都有一個類似的范圍。除此之外,沒有任何離群值的跡象。
缺失數(shù)據(jù)對建模有很大影響。因此,你可以使用缺失圖來快速了解數(shù)據(jù)集中的缺失數(shù)據(jù)量。X軸顯示屬性,Y軸顯示實例。水平線表示一個實例的缺失數(shù)據(jù),垂直塊表示一個屬性的缺失數(shù)據(jù)。
mis( col=c("blue", "red")
在這個數(shù)據(jù)集中沒有缺失數(shù)據(jù)!
讓我們開始計算每一對數(shù)字變量之間的相關(guān)性。這些成對的相關(guān)關(guān)系可以繪制在相關(guān)矩陣圖中,了解哪些變量在一起變化。
corrplot(correlations, method="circle")
使用點表示法,藍(lán)色代表正相關(guān),紅色代表負(fù)相關(guān)。點越大,相關(guān)度越大。你可以看到矩陣是對稱的,對角線是完全正相關(guān)的,因為它顯示了每個變量與自身的相關(guān)性。但是,沒有一個變量是相互關(guān)聯(lián)的。
我們來做一個數(shù)據(jù)圖。有一個pair()函數(shù)可以將Smarket中的變量繪制成一個散點圖矩陣。在這種情況下,"漲跌方向",你的二元因變量,是顏色指標(biāo)。
看起來這里沒有什么關(guān)聯(lián)性。該類變量來自于變量今日收益,所以漲和跌做了劃分。
讓我們來看看按方向值細(xì)分的每個變量的密度分布。像上面的散點圖矩陣一樣,按方向繪制的密度圖可以幫助看到漲和跌的方向。它還可以幫助了解一個變量的方向的重疊情況。
Plot(x=x, y=y, plot="density", scales=scales)
你可以看到,所有這些變量的方向值都是重疊的,這意味著僅憑一兩個變量很難預(yù)測上漲或下跌。
建立Logistic回歸模型
現(xiàn)在你調(diào)用glm.fit()函數(shù)。你傳遞給這個函數(shù)的第一個參數(shù)是一個R公式。在這種情況下,該公式表明方向是因變量,而滯后和成交量變量是預(yù)測因素。正如你在介紹中看到的,glm通常用于擬合廣義線性模型。
然而,在這種情況下,你需要明確表示你想擬合一個邏輯回歸模型。你通過將族參數(shù)設(shè)置為二項式來解決這個問題。這樣,你就告訴glm()把擬合一個邏輯回歸模型,而不是可以擬合glm的許多其他模型中的一個。
接下來,你可以做一個summary(),它告訴你一些關(guān)于擬合的信息。
正如你所看到的,summary()返回每個系數(shù)的估計值、標(biāo)準(zhǔn)誤差、z-score和p值??瓷先]有一個系數(shù)是顯著的。它還給出了無效偏差(僅指平均值的偏差)和殘差偏差(包含所有預(yù)測因素的模型的偏差)。兩者之間的差異非常小,而且有6個自由度。
你把glm.fit()的預(yù)測結(jié)果分配給glm.probs,類型等于因變量。這將對你用來擬合模型的訓(xùn)練數(shù)據(jù)進(jìn)行預(yù)測,并給我一個擬合概率的向量。
你看一下前5個概率,它們非常接近50%。
probs[1:5]
現(xiàn)在我將根據(jù)滯后期和其他預(yù)測因素對市場是上漲還是下跌做出預(yù)測。特別是,我將通過0.5的閾值將概率變成分類。為了做到這一點,我使用ifelse()命令。
ifelse(probs > 0.5, "Up", "Down")
glm.pred是一個真和假的向量。如果glm.probs大于0.5,glm.pred調(diào)用 "Up";否則,調(diào)用 "False"。
在這里,你附上數(shù)據(jù)框架Smarket,并制作一個glm.pred的表格,這是上一個方向的上漲和下跌。你還可以取其中的平均值。
從表中看,對角線上的實例是你獲得正確分類的地方,而對角線外的實例是你分類錯誤的地方??雌饋砟惴噶撕芏噱e誤。平均值給出的比例是0.52。
創(chuàng)建訓(xùn)練樣本和測試樣本
你怎么能做得更好呢?把數(shù)據(jù)分成訓(xùn)練集和測試集是一個好的策略。
# ?生成訓(xùn)練和測試集
train = Year<2005
predict(glm.fit,
newdata = Smarket[!train,],
type = "response")
讓我們詳細(xì)看看這個代碼塊。
train等于比2005年少的那一年。對于所有小于2005年的年份,你會得到一個true;否則,我會得到一個false。
然后你用glm.fit()重新擬合模型,只是子集等于'train',這意味著它只擬合小于2005年的數(shù)據(jù)。
然后你再次對glm.probs使用predict()函數(shù)來預(yù)測大于或等于2005年的剩余數(shù)據(jù)。對于新的數(shù)據(jù),你給了它Smarket,用!"train "作為索引(如果年份大于或等于2005,train為真)。你將類型設(shè)置為 "因變量 "以預(yù)測概率。
最后,你對glm.pred再次使用ifelse()函數(shù)來生成上漲和下跌變量。
你現(xiàn)在做一個新的變量來存儲測試數(shù)據(jù)的新子集,并把它叫做Direction.2005。因變量仍然是方向。你制作一個表格并計算這個新測試集的平均值。
Direction.2005 = Direction[!train]
比以前的情況還糟糕。怎么會出現(xiàn)這種情況?
解決過度擬合的問題
好吧,你可能對數(shù)據(jù)進(jìn)行了過度擬合。為了解決這個問題,你要擬合一個較小的模型,使用Lag1、Lag2、Lag3作為預(yù)測因子,從而撇開所有其他變量。代碼的其余部分是一樣的。
#擬合一個較小的模型
glm(family = binomial, subset = train)
好吧,你得到了59%的分類率,不算太差。使用較小的模型似乎表現(xiàn)得更好。
最后,你對glm.fit做一個summary(),看看是否有任何明顯的變化。
沒有什么變得很重要,至少P值更好了,表明對性能的預(yù)測有所提高。
結(jié)語
所以,這個關(guān)于使用glm()函數(shù)和設(shè)置族為二項式建立邏輯回歸模型的R教程就結(jié)束了。glm()并不假設(shè)因變量和自變量之間的線性關(guān)系。然而,它假定logit模型中的鏈接函數(shù)和自變量之間存在線性關(guān)系,我希望你能學(xué)到有價值的東西。
最受歡迎的見解
1.R語言多元Logistic邏輯回歸 應(yīng)用案例
2.面板平滑轉(zhuǎn)移回歸(PSTR)分析案例實現(xiàn)
3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)
4.R語言泊松Poisson回歸模型分析案例
5.R語言混合效應(yīng)邏輯回歸Logistic模型分析肺癌
6.r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現(xiàn)
7.R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機(jī)森林算法預(yù)測心臟病
8.python用線性回歸預(yù)測股票價格
9.R語言用邏輯回歸、決策樹和隨機(jī)森林對信貸數(shù)據(jù)集進(jìn)行分類預(yù)測