它是人為虛設的變數,通常取值為0或1,來反映某個變數的不同屬性。對於有n個分類屬性的自變數,通常需要選取1個分類作為參照,因此可以產生n-1個啞變數。
如職業、性別對收入的影響,戰爭、自然災害對gdp的影響,季節對某些產品(如冷飲)銷售的影響等等。
這種「量化」通常是通過引入「啞變數」來完成的。根據這些因素的屬性型別,構造只取「0」或「1」的人工變數,通常稱為啞變數(dummyvariables),記為d。
舉乙個例子,假設變數「職業」的取值分別為:工人、農民、學生、企業職員、其他,5種選項,我們可以增加4個啞變數來代替「職業」這個變數,分別為d1(1=工人/0=非工人)、d2(1=農民/0=非農民)、d3(1=學生/0=非學生)、d4(1=企業職員/0=非企業職員),最後乙個選項「其他」的資訊已經包含在這4個變數中了,所以不需要再增加乙個d5(1=其他/0=非其他)了。這個過程就是引入啞變數的過程,其實在結合分析(conjointanalysis)中,就是利用啞變數來分析各個屬性的效用值的。
此時,我們通常會將原始的多分類變數轉化為啞變數,每個啞變數只代表某兩個級別或若干個級別間的差異,通過構建回歸模型,每乙個啞變數都能得出乙個估計的回歸係數,從而使得回歸的結果更易於解釋,更具有實際意義。
舉乙個例子,如血型,一般分為a、b、o、ab四個型別,為無序多分類變數,通常情況下在錄入資料的時候,為了使資料量化,我們常會將其賦值為1、2、3、4。
從數字的角度來看,賦值為1、2、3、4後,它們是具有從小到大一定的順序關係的,而實際上,四種血型之間並沒有這種大小關係存在,它們之間應該是相互平等獨立的關係。如果按照1、2、3、4賦值並帶入到回歸模型中是不合理的,此時我們就需要將其轉化為啞變數。
例如疾病的嚴重程度,一般分為輕、中、重度,可認為是有序多分類變數,通常情況下我們也常會將其賦值為1、2、3(等距)或1、2、4(等比)等形式,通過由小到大的數字關係,來體現疾病嚴重程度之間一定的等級關係。
但需要注意的是,一旦賦值為上述等距或等比的數值形式,這在某種程度上是認為疾病的嚴重程度也呈現類似的等距或等比的關係。而事實上由於疾病在臨床上的複雜性,不同的嚴重程度之間並非是嚴格的等距或等比關係,因此再賦值為上述形式就顯得不太合理,此時可以將其轉化為啞變數進行量化。
對於連續性變數,很多人認為可以直接將其帶入到回歸模型中即可,但有時我們還需要結合實際的臨床意義,對連續性變數作適當的轉換。例如年齡,以連續性變數帶入模型時,其解釋為年齡每增加一歲時對於因變數的影響。但往往年齡增加一歲,其效應是很微弱的,並沒有太大的實際意義。
此時,我們可以將年齡這個連續性變數進行離散化,按照10歲乙個年齡段進行劃分,如0-10、11-20、21-30、31-40等等,將每一組賦值為1、2、3、4,此時構建模型的回歸係數就可以解釋為年齡每增加10歲時對因變數的影響。
以上賦值方式是基於乙個前提,即年齡與因變數之間存在著一定的線性關係。但有時候可能會出現以下情況,例如在年齡段較低和較高的人群中,某種疾病的死亡率較高,而在中青年人群中,死亡率卻相對較低,年齡和死亡結局之間呈現乙個u字型的關係,此時再將年齡段賦值為1、2、3、4就顯得不太合理了。
因此,當我們無法確定自變數和因變數之間的變化關係,將連續性自變數離散化時,可以考慮進行啞變數轉換。
還有一種情況,例如將bmi按照臨床診斷標準分為體重過低、正常體重、超重、肥胖等幾種分類時,由於不同分類之間劃分的切點是不等距的,此時賦值為1、2、3就不太符合實際情況,也可以考慮將其轉化為啞變數。
在上面的內容中我們提到,對於有n個分類的自變數,需要產生n-1個啞變數,當所有n-1個啞變數取值都為0的時候,這就是該變數的第n類屬性,即我們將這類屬性作為參照。
例如上面提到的以職業因素為例,共分為學生、農民、工人、公務員、其他共5個分類,設定了4啞變數,其中職業因素中「其它」這個屬性,每個啞變數的賦值均為0,此時我們就將「其它」這個屬性作為參照,在最後進行模型解釋時,所有類別啞變數的回歸係數,均表示該啞變數與參照相比之後對因變數的影響。
在設定啞變數時,應該選擇哪一類作為參照呢?
例如,婚姻狀態分為未婚、已婚、離異、喪偶等情況,可以將「未婚」作為參照;或者如學歷,分為小學、中學、大學、研究生等類別,存在著一定的順序,可以將「小學」作為參照,以便於回歸係數更容易解釋。
例如,bmi按照臨床診斷標準分為體重過低、正常體重、超重、肥胖等類別,此時可以選擇「正常體重」作為參照,其他分類都與正常體重進行比較,更具有臨床實際意義。
例如血型,分為a、b、o、ab四個型別,研究者更關注o型血的人,因此可以將o型作為參照,來分析其他血型與o型相比後對於結局產生影響的差異。
(1)啞變數方法只在離散型變數水平數較小時使用,一般在3個及以內。如乙個人的年齡水平只有三個(青年、中年、老年)。
(2)由於啞變數的取值只有0和1,它起到的作用像是乙個「開關」的作用,它可以遮蔽掉d=0的case,使之不進入分析,
啞變數的處理
library caret 將幾個離散變數轉換為因子,目的便於下面一次性處理啞變數 final housecl uste r f acto r cl ust cluster final housefl oow f acto r fi nalh ouse floow final housety pe....
將連續的浮點數轉化成啞變數
一二 中每行都有乙個starttime 上線時間 和offlinetime 下線時間 備註 python 中pandas所帶的get dummies會將整個時間作為乙個字串變數,即只能在頭和尾形成啞變數,無法在中間插入數值,為了解決這個問題所以才有了現在這篇部落格 隨意建立兩個資料的 data pd...
啞編碼示例解釋一
和注釋如下 coding utf 8 import sys reload sys sys.setdefaultencoding utf 8 from sklearn.preprocessing import onehotencoder enc onehotencoder enc.fit 1,1,4 ...