在R中,非數字式的數據通常指「字符」數據。比如說:最簡易分組-男性(male)、女性(female);頭髮顏色—黑色(black)、金色(blonde)和棕色(brown);體重分組-高(high)、中(middle)、低(low)等。
這些數據本身是不能進行運算的(基礎四則運算等),然而在工作中,我們有時也需要判斷它們和因變量之間的關係,那麼這種情況需要我們怎麼做呢?
我們先來看一個比較簡單的情況:性別(male,female)與某一因素之間(y)的關係,首先我們定義基本數據內容,性別(gender)為「字符」數據,y為「數字數據」。
圖片二:定義基本數據
接下來我們對這一數據進行線性函數擬合,並且用summary()命令查看擬合結果。
圖片三 簡單分組數據的線性回歸擬合結果
我們可以看到,整個結果的格式與「數字式」數據擬合出的結果格式完全相同。請大家注意第三部分coefficients中,第一行intercept和之前一樣,第二行行名為gendermale。
咦,是不是缺了點什麼?
之前我們定義數據內容時,性別(gender)有兩組:男性(male)和女性(female),為什麼結果裡只體現出一組呢?
敲黑板!!小夥伴們注意,重點來了,在R中,當自變量是「字符」數據時,默認會有一組數據(例子中為female組)被選為「基準組」,又稱對照組,這個自變量中同一元素(例子中為gender元素)中其它組別(male)都和這一組做對比。
為什麼會有這樣一個「默認操作」呢?那就要從數字數據和字符數據的根本區別開始說起了。
小夥伴們先回憶一下上一期文章中的數據哈(圖片一),在圖片一的例子中,整個分析的邏輯是什麼樣子的?應該是,當我知道speed是某個數值時,可以預測(模擬)出dist值時多少,並且,speed的取值是任意的。
重點就在「任意的」這三個字上,在數據樣本中,speed的取值為4,7,8,9等。如果我們經過分析,確定speed和dist之間存在線性關係,那麼我們隨意給出一個speed數值,比如21,37,都可以得到相應的dist值。
那麼對於「字符數據」式的自變量來說,這個「任意性」還存不存在了呢?
不存在了呀小夥伴們!!
拿我們的例子來說,例子中gender這個元素內含兩組:male,female,新數據的gender元素也必須是這兩者之一才能放入函數之中,假如某項新數據的gender元素恰好超出了原有數據的範疇,那麼它是不能應用在已有的函數上的。
比如說呀,假如這裡有一小撮新數據,它們的收集標準與時間和原有數據相同,其中有某一項gender元素為not sure (或者是unknown什麼的,拿gender舉例子我也實在是跪了 ),那麼這一項數據是不能用我們這一次求得的線性函數來算y值的。
我們通過具體例子把兩種數據的區別講清楚了,下面還是要看一下,在數學原理上它們有什麼不同。
首先,我們要回顧一下線性回歸的本質:
公式一 經典線性回歸模型
數字數據的應用與經典模型完全契合,如果我們將圖片一中的例子帶入,那麼模擬出的線性回歸模型為:
公式二 通過示例1模擬線性回歸模型
我們之前提到的,數字數據的任意性就是指,對於新數據,可以將任意speed值帶入公式,影響因子不變,從而求得新的dist。
ifspeed new = 33 ,
公式三 示例1中新數據在線性回歸模型中的應用
字符數據的應用就與經典模型有區別了,如果我們將之前的例子(gender數據)帶入,那麼模擬出的線性回歸模型為:
公式四 通過示例2模擬線性回歸模型
這裡涉及到字符數據一個非常有趣的特徵:排他性。什麼意思呢?male和female能同時出現嗎? 不能。換句話說,gender元素的male組和female組能同時出現嗎?不能。
總結一下:字符數據中一項元素的任意兩個「組別」不能在同一數據樣本中同時出現,又稱為字符數據的「排他性」。
由於排他性的存在,當字符數據有且只有兩組時(gender只有male和female兩組),R是這麼處理的: 選擇一組為對照組(reference),對照組被認為是0,另一組被認為是1,函數可以寫成:
公式五 字符數據只有兩組時的線性回歸模型
在此例子中,male=1, female=0;具體而言,當我們拿到某個樣本,如果這個樣本的gender元素為male,那麼它的y值為:
公式六 樣本性別為男性時因變量算法
同理,如果樣本gender元素為female,那麼樣本的y值為𝛼(intercept)。
這種算法又稱為虛擬編碼(dummy code),它解決了組別之間的區分問題,同時令計算過程簡單明了——相信小夥伴們在看到之前的代碼時都猶豫過為什麼「純字符」的數據居然也能得出數字結論吧,奧妙就在虛擬編碼的0-1賦值上。
好,相信到這裡小夥伴們都明白了在字符數據有且僅有兩組時R中線性回歸的擬合方法,也了解了虛擬編碼這一神奇的方法。下面我們就要來說一說,當字符數據有很多組時,我們在R中要怎麼做。
首先,我們新建一些數據,這次我們使用頭髮顏色(hair)的數據。頭髮顏色(hair)有三種:黑色(black)、棕色(brown)、金色(blonde)。因變量依然是y。我們看一下數據的情況:
圖片四 頭髮顏色數據展示
在這個新的例子中,自變量依然只有一項(hair)並且是字符數據,因變量依然為y。這時我們要怎麼進行虛擬編碼呢?當自變量只有兩組時可以0-1編碼,現在有三種了,難不成要編成0、1和-1嗎?
不是這樣啦,我們不需要-1的出現,計算過程中也只有0、1兩種情況。在這裡呢,R是這樣操作的,把自變量按「具體的分組」分成不同的「新自變量」,再對新自變量進行0-1虛擬編碼。
比如說在新例子中,根據經典公式,線性回歸函數的寫法應該是:
公式七 hair數據的經典線性回歸函數公式
那麼如果我們根據hair的內容將它拆成新的自變量,它就會是:hairblack,hairbrown,hairblonde。這時,問題由原來的單一自變量轉為三個自變量,用公式表示為:
公式八 由hair單一自變量拆分成的三個自變量構成的線性回歸函數
在分組多於兩個時,R中依然保留了預設對照組的處理方法(在之前的二元問題中,R選擇了男性male組作為對照組),在這個問題中,R選擇black組為對照組,因此R中出現的線性回歸公式實際應為:
公式九 一項內容設為對照組後的線性回歸函數
在這個公式下,x1對應hairbrown,x2對應hairblonde,它們的取值及意義為:
表格一 確定對照組後X1和X2取值的意義
同時,x1與x2取值的對照關係為:
表格二 X1和X2不同取值下對應數據的實際意義
由這個表格可以看出,當x1與x2分別是0-1編碼時,產生的四個組合恰好滿足了原始自變量(hair)的三種分組。x1=1與x2=1不能同時出現(hair不能同時是brown和blonde),因此四個組合中有一個是「廢掉的」,另外三個完美覆蓋數據出現的所有情況。
我們可以借用數學中「降維」(降低維度)這一概念描述這一處理方法:當某一字符式自變量內容多於兩組時,按照其內容將單一自變量變為多項自變量,同時其中一項內容被設置為對照組,即整個自變量維度降一級。
好,原理講清楚了,下面我們來看一看在R中實際操作的過程與結果:
圖片五 hair數據線性回歸函數擬合(多組自變量)過程與結果
summary()命令的結果清晰的體現了「降維」的處理方式,第三部分Coefficients中列出的自變量為hairblonde 與hairbrown,estimate依然是它們分別的影響因子,那麼假設線性回歸擬合成立,那麼結果可以寫為:
ifhair=black, y=4.3333;(x1=0,x2=0)
ifhair=blonde, y=4.3333+0.6667*1=5;(x1=1,x2=0)
ifhair=brown, y=4.3333+0.6667*0+2.6667*1=7;(x1=0,x2=1)
請大家注意的是,對照組(reference:hairblack)本身在線性回歸中是「基準參照物」,其它組別都是「和對照組進行比較」。因此,我們在以上結果中看到,hairbalck在intercept中體現了出來,同時hairblonde與hairbrown都是在hairbalck的基礎上得出的結果(intercept+𝛽1 和 intercept+𝛽2)。
這就是兩組或多組「字符式」數據在線性回歸中的處理方法。