原文鏈接:http://tecdat.cn/?p=24203
原文出處:拓端數據部落公眾號
本教程使用R介紹了具有非信息先驗的貝葉斯 GLM(廣義線性模型) 。
當前教程特別關注貝葉斯邏輯回歸在二元結果和計數/比例結果場景中的使用,以及模型評估的相應方法。使用教育數據示例。 此外,本教程簡要演示了貝葉斯 GLM 模型的多層次擴展。
本教程遵循以下結構:
1. 准備工作;
2.GLM介紹;
3. 教育數據;
4. 數據准備;
5.貝葉斯邏輯回歸;
6.貝葉斯二項Logistic回歸;
7. 貝葉斯層次邏輯回歸。
准備
本教程需要:
– 假設檢驗和統計推斷的基礎知識;
– 貝葉斯統計推斷的基礎知識;
– R 編碼的基礎知識;
– 使用 tidyverse 進行繪圖和數據操作的基本知識。
廣義線性模型 (GLM) 介紹
廣義線性模型,是為了克服線性回歸模型的缺點出現的,是線性回歸模型的推廣。首先自變量可以是離散的,也可以是連續的。離散的可以是0-1變量,也可以是多種取值的變量。廣義線性模型取消了對殘差(因變量)服從正態分布的要求。殘差不一定要服從正態分布,可以服從二項、泊松、負二項、正態、伽馬、逆高斯等分布,這些分布被統稱為指數分布族。
教育數據
本教程中使用的數據是教育數據。
這些數據來自於全國性的小學教育調查。數據中的每一行都是指一個學生。結果變量REPEAT是一個二分變量,表示一個學生在小學教育期間是否留過級。SCHOOLID變量表示一個學生所在的學校。個人層面的預測因素包括。性別(0=女性,1=男性)和PPED(受過學前教育,0=沒有,1=有)。學校層面的是MSESC,代表學校平均SES(社會經濟地位)得分。
本教程試圖使用教育數據回答的主要研究問題是:
- 忽略數據的層次結構,性別和學前教育對學生是否留級有什么影響?
- 忽略數據的層次結構,學校平均SES對學生留級比例的影響是什么?
- 考慮到數據的層次結構,性別、學前教育和學校平均社會經濟地位對學生是否留級有什么影響?
這三個問題分別通過使用以下模型來回答: 貝葉斯二元邏輯回歸;貝葉斯二項式邏輯回歸;貝葉斯多層次二元邏輯回歸。
數據准備
加載必要的包
-
-
library(tidyverse) #用於數據處理和繪圖
-
library(sjstats) #用於計算類內相關(ICC)。
-
library(ROCR) #用於計算曲線下面積(AUC)的統計數據
-
library(modelr) #用於數據處理
-
導入數據

數據處理
-
Ed_e <- Ed_Ra %>%
-
mtae(SCHLI = fcor(SCLID,
-
SEX = if_se(SX == 0, "grl", "by"),
-
SEX = facor(SEX, lvls = c("gil", "boy")),
-
PED = if_ese(PPED == 0, "no", "yes"),
-
PED = facr(PPD, leel = c("no", "yes")))

檢查缺失數據
-
New %>%
-
summar(lst(~sm(is.na(.)))) %>%
-
gaer()

該數據缺少 1066 個MSESC 變量的觀測 值。缺失數據的處理本身就是一個復雜的話題。為方便起見,我們在本教程中簡單地按列刪除缺少數據的案例。
-
New <- New %>%
-
fltr(!is.na(MEC))
貝葉斯二元邏輯回歸(具有非信息先驗)
探索數據: REPEAT 與 SEX 和 PPED
-
-
gru_y(SEX) %>%
-
suma(RPEAT = sm(REEAT))

-
group_by(PED) %>%
-
sumais(RPEAT = sum(REEA))

看來,留級的學生人數在男女之間有很大的不同,更多的男學生不得不留級。更多沒有接受過學前教育的學生留級。這一觀察結果表明,性別和學前教育可能對留級有預測作用。
擬合貝葉斯二元 Logistic 回歸模型
執行貝葉斯 GLM。但是,請注意,在 family 參數中,我們需要為二元邏輯回歸指定 bernoulli (而不是 binomial)。還有一些額外的參數: warmup 指定預燒期(即應該丟棄的迭代次數); iter 指定總迭代次數; chains 指定鏈數; inits 指定迭代的起始值(通常你可以使用參數的最大似然估計作為起始值,或者簡單地要求算法從零開始); cores 指定用於算法的核心數; seed 指定隨機種子,允許復制結果。
請參閱下面的具有兩個預測變量的二元邏輯回歸模型的規范,不使用信息先驗。
-
Baysoel(fr= RPEAT ~ SX + PED,
-
famly = benouli(link = "logit"),
-
)

模型收斂
在查看模型摘要之前,我們應該檢查是否存在兩條鏈不收斂的依據。
首先,我們為每個感興趣的參數繪制毛毛蟲圖。
-
plot(BysMenr,
-
tpe = "trce")
![]()

該圖僅顯示預燒期后的迭代。兩條鏈對所有參數都很好地混合,因此,我們得出收斂的依據。
我們還可以檢查自相關,考慮到強自相關的存在會使方差估計產生偏差。
-
plot(Byory ,
-
tye = "afbar")

該圖沒有顯示兩個鏈中所有模型變量的自相關證據,因為自相關參數都迅速減小到零附近。
解釋
現在,我們可以進行模型的解釋。下面是貝葉斯二元邏輯回歸模型的模型摘要。
smma(Bayoenry)

為了比較,下面是頻率論二元邏輯回歸模型的模型摘要。
-
glm(fma= REEA ~ SX + PPD,
-
famly = bnmia(link = "logit"),
-
daa = Ne)

從上面的模型總結中,我們可以看到貝葉斯模型的估計與頻率論模型的估計幾乎相同。這些估計的解釋在頻率論和貝葉斯模型中是相同的。然而,請注意,不確定性區間的解釋在兩個模型之間是不同的。在頻率論模型中,使用 95% 的不確定性區間(置信區間)背后的想法是,在重復抽樣的情況下,95% 的結果不確定性區間將覆蓋真實的總體值。這讓我們可以說,對於給定的 95% 置信區間,我們有 95% 的置信區間包含真實的總體值。然而,它不允許我們說置信區間有 95% 的機會包含真實的總體值(即 頻率論不確定性區間不是概率陳述)。相比之下,在貝葉斯模型中,95% 的不確定性區間(稱為可信區間)更具可解釋性,表明真實總體值有 95% 的機會落入該區間內。當 95% 可信區間不包含零時,我們得出結論,相應的模型參數可能有意義。
讓我們使用可視化點估計及其相關的不確定性區間 。
-
plot(asMdeBinr,
-
tye = "aeas",
-
prb = 0.95)

上圖顯示了參數估計的密度。每個密度中的深藍色線表示點估計,而淺藍色區域表示 95% 的可信區間。我們可以很容易地看到, SEX 和 PPED 都是有意義的預測變量,因為它們的置信區間不包含零,並且它們的密度具有非常窄的形狀。 SEX 正面預測學生留級的概率,而PPED 負面預測 。具體來說,與作為女孩相比,作為男孩更有可能留級,假設其他一切都保持不變。假設其他一切都保持不變,之前的教育不太可能導致留級。
為了解釋參數估計的值,我們需要對估計取冪。見下文。
ex(fef(BeBiry)[,-2])

我們還可以繪制這些參數估計的密度。
-
plt(ay_dl_iay,
-
type ="areas",
-
prb = 0.95,
-
trnsoatos = "exp") +
-
mne(xtp = 1, clo = gey")

請注意,參數估計的解釋與幾率而不是概率有關。幾率的定義是。P(事件發生)/P(事件未發生)。在本分析中,假設其他一切保持不變,與女孩相比,男孩會增加54%的留級幾率;與沒有學前教育相比,假設其他一切保持不變,擁有學前教育會降低(1-0.54)%=46%的留級幾率。留級的基線幾率(由截距項表示),即如果你是一個沒有受過學校教育的女孩,大約是17%。
參數效果的可視化
我們可以繪制模型中變量的邊際效應(即重復評分的估計概率)。下面,我們展示了如何不同組合 SEX 和 PPED 不同的概率估計結果。這種方法的優點是概率比幾率更容易解釋。
-
Nw %>%
-
dta_gd(SX PE) %>%
-
d_fddws(Baeo_inry) %>%
-
plt(ae(x = .vau, y = inatn(SEX, PED))) +
-

如我們所見,未受過學前教育的男生概率最高(~0.21),其次是未受過學前教育的女孩(~0.15),受過學前教育的男孩(~0.13),最后,是一個受過學前教育的女孩(~0.09)。請注意,估計值的 68%(較粗的內線)和 95%(較細的外線)置信區間都包括在內,以使我們對估計值的不確定性有所了解。
模型評估
我們了解到我們可以使用似然比檢驗和 AIC 來評估模型的擬合優度。但是,這兩種方法不適用於貝葉斯模型。相反,貝葉斯模型利用所謂的 后驗預測 P 值 (PPP) 來評估模型的擬合度。此外,許多模型還使用 貝葉斯因子 來量化數據對模型的支持。
另外兩個度量 是 正確分類率 和 曲線下面積(AUC)。它們與模型無關,也就是說,它們可以應用於頻率論和貝葉斯模型。
正確分類率
正確分類的百分比是查看模型與數據擬合程度的有用度量。
-
-
#使用`prdct()`函數,從擬合的模型中計算出原始數據中學生的預測概率
-
Prd <- prdct(BadlBay, type = "espnse")
-
Ped <- ilse(Ped[,1] > 0.5, 1, 0)
-
CnuMx<- tale(Pre, pul(Nw,REPT)) #`pull`的結果是一個向量
-
#正確的分類率
-
sm(dag(Cosaix))/sum(Cofinaix)
-
![]()
CMatix

我們可以看到,該模型對所有觀測值的85.8%進行了正確分類。然而,仔細觀察混淆矩陣可以發現,模型預測所有的觀察值都屬於 "0 "類,也就是說,所有的學生都被預測為不會留級。考慮到REPEAT變量的多數類別是0(不),該模型在分類中的表現並不比簡單地將所有觀測值分配給多數類別0(不)更好。
AUC(曲線下面積)
使用正確分類率的替代方法是曲線下面積 (AUC) 度量。AUC 衡量歧視,即測試正確分類那些有和沒有目標響應的能力。在當前數據中,目標響應是重復一個等級。我們從“留級”組中隨機抽取一名學生,從“不留級”組中隨機抽取一名學生。預測概率較高的學生應該是“重復成績”組中的學生。AUC 是隨機抽取的對的百分比,這是正確的。此過程將 AUC 與正確分類率區分開來,因為 AUC 不依賴於結果變量中類別比例的不平衡。值 0.50 表示模型的分類效果並不比機會好。
使用正確分類率的一個替代方法是曲線下面積(AUC)測量。AUC衡量的是分辨力,即測試對因變量進行正確分類的能力。在目前的數據中,目標因變量是留級。我們從 "留級 "組和 "不留級 "組中隨機抽取一名學生。預測概率較高的學生應該是 "留級 "組中的學生。AUC是隨機抽出的對子的百分比,這一點是真實的。這個程序將AUC與正確分類率區分開來,因為AUC不依賴於結果變量中類的比例的變化。0.50的值意味着該模型的分類效果不比隨機好。一個好的模型的AUC分數應該遠遠高於0.50(最好是高於0.80)。
-
# 計算用該模型預測類別的AUC
-
Pr <- prdit(Bas_odl_iay type="rsone")
-
Pr <- rob[,1]
-
Prd <- prition(Prb, as.tor(ull(Ne, REPAT)))
-
auc <- pemneed, easre = "auc")
-
auc
![]()
AUC 得分接近 0.60,模型不能很好地區分。
貝葉斯二項式邏輯回歸(具有非信息先驗)
邏輯回歸也可用於對計數或比例數據進行建模。二元邏輯回歸假設結果變量來自伯努利分布(這是二項分布的特例),其中試驗次數 nn 為 1,因此結果變量只能是 1 或 0。相反,二項邏輯回歸假設目標事件的數量服從 n 次試驗和概率 q 的二項式分布。通過這種方式,二項邏輯回歸允許結果變量采用任何非負整數值,因此能夠處理計數數據。
聚集在學校內的個別學生的 信息。通過匯總按學校留級的學生人數,我們獲得了一個新數據集,其中每一行代表一所學校,以及有關該學校留級學生比例的信息。該 MSESC (平均得分SES)也對學校的水平; 因此,它可用於預測特定學校留級學生的比例或數量。見下文。
轉換數據
-
Prop <-New %>%
-
gouby(SOLD,MSC) %>%
-
suie(EAT = sum(RPT),
-
TAL = n()) %>%
-
urup()

在這個新的數據集中, REPEAT 指的是留級的學生人數; TOTAL 指特定學校的學生總數。
探索數據
-
Prop %>%
-
plot(aes(x , y ) +
-
point()

我們可以看到,留級的學生比例與 的逆對數呈(中等)負相關 MSESC。請注意,我們將變量建模 MSESC 為其逆 logit,因為在二項式回歸模型中,我們假設線性預測變量的逆 logit 與結果(即事件的比例)之間存在線性關系,而不是預測變量本身與預測變量之間的線性關系結果。
擬合二項 Logistic 回歸模型
為了擬合貝葉斯二項邏輯回歸模型,我們還使用了brm 與之前的貝葉斯二項邏輯回歸模型一樣的 函數。但是,有兩個不同之處:首先,要在公式中指定結果變量,我們需要指定目標事件數 ( REPEAT) 和包含在 中的試驗總數 ( TOTAL) trials(),它們之間用 分隔 |。此外, family 應該是“二項式”而不是“伯努利”。
-
ay_Moe(REAT | rias(TTAL) ~ SEC,
-
daa = Pop,
-
inillnk "logt"))

summary

頻率模型(用於比較):
-
glm(fla =ind(PEAT, TAL-PET) ~ SS,
-
famiy = inal(lgit),
-
dta =Prop)
-

我們可以看到貝葉斯和頻率二項式邏輯回歸模型之間的模型估計非常相似。請注意,為了使本教程更簡短,我們跳過了檢查模型收斂的步驟。您可以使用我們之前展示的相同代碼(使用二元邏輯回歸模型)來檢查該模型的收斂性。
解釋
二項式回歸模型中的參數解釋與二項邏輯回歸模型中的參數解釋相同。我們從上面的模型總結中知道,一所學校的平均 SES 分數與該學校學生留級的幾率呈負相關。為了增強可解釋性,我們再次計算 的指數系數估計 MSESC。由於 MSESC 是一個連續變量,我們可以對指數MSESC 估計進行標准化 (通過將原始估計與變量的 SD 相乘,然后對結果數字取冪)。
exp(fxef(Bodlrp)[2,-2]*sd(pll(_p,MSC), n.rm = T))
![]()
我們可以看到,隨着 的 SD 增加 MSESC,學生留級的幾率降低了大約 (1 – 85%) = 15%。“Q2.5”和“Q97.5”分別指不確定區間的下限和上限。該置信區間不包含零,表明該變量可能有意義。
我們可以將 的效果可視化 MSESC。
-
-
reraw(btrct, SSC) %>%
-
grp(MSESC) %>%
-
sume(ped_m = mean(ed,ar = R
-
re_lw = qantle(ped,po = 0.025),
-
rd_hgh = quatle(pd, prb = 0.975)) %>%
-
plt(as(x = SC, y = pedm)) +
-
line() +
-
gmn(es(ymn = pe_ow,yma = redig), aha=.2) +

上圖顯示了MSESC 對學生留級概率的預期影響 。保持其他一切不變,隨着 MSESC 增加,學生留級的概率降低(從 0.19 到 0.08)。灰色陰影區域表示每個 值處預測值的 95% 置信區間 MSESC。
模型評估
與貝葉斯二元邏輯回歸模型類似,我們可以使用PPPS和貝葉斯系數(本教程中沒有討論)來評估貝葉斯二元邏輯回歸模型的擬合度。正確分類率和AUC在這里不適合,因為該模型不涉及分類。
貝葉斯多層次二元邏輯回歸(具有非信息先驗)
前面介紹的貝葉斯二元邏輯回歸模型僅限於對學生層面的預測因素的影響進行建模;貝葉斯二元邏輯回歸僅限於對學校層面的預測因素的影響進行建模。為了同時納入學生層面和學校層面的預測因素,我們可以使用多層次模型,特別是貝葉斯的多層次二元邏輯回歸。
除了上述動機之外,還有更多的理由來使用多層次模型。例如,由於數據是在學校內聚類的,來自同一學校的學生很可能比來自其他學校的學生更相似。正因為如此,在一所學校,一個學生留級的概率可能很高,而在另一所學校,則很低。此外,即使是結果(即留級)和預測變量(如性別、學前教育、SES)之間的關系,在不同的學校也可能不同。還要注意的是,MSESC變量中存在缺失值。使用多層次模型可以適當地解決這些問題。
以下圖為例。該圖顯示了各個學校留級學生的比例。我們可以看到不同學校之間的巨大差異。因此,我們需要多層次模型。
-
Edu %>%
-
grop_(ID) %>%
-
sumrie(RP = sum(PA)/n()) %>%
-
plt()

我們還可以繪制SEX 和 REPEAT ,SCHOOLID之間的關系 ,查看性別和留級之間的關系是否因學校而異。
-
Euew %>%
-
utt(SX = ifelse(EX == "boy", 1, 0)) %>%
-
plt(es(x = SE, y = REAT)) +
-
pint(alpha = .1)+
-
ooth(mehod = "glm", se = F,
-
hd.s= lsily = "binomial"))

在上面的圖中,不同的顏色代表不同的學校。我們可以看到,不同學校的SEX和REPEAT之間的關系似乎有很大不同。
我們可以為PPED 和 REPEAT繪制相同的圖 。
-
due %>%
-
tat(PED = ifelse(PED == "yes", 1, 0)) %>%
-
pot(as(x = PP, y = RPT, cor =a.fcor(ID)) +
-
goi(lha=.1, )+
-
goth(method = "glm",
-
ehog = lst(family = "binomial")) +

PPED 和 之間的關系 REPEAT 似乎也因學校而異。但是,我們也可以看到,大多數關系遵循下降趨勢,從 0(未受過教育)到 1(受過教育),表明PPED 和 REPEAT之間存在負相關關系 。
由於上述觀察,我們可以得出結論,需要在當前數據中進行多層次建模,不僅具有隨機截距 ( SCHOOLID),而且還具有SEX 和 的 潛在隨機斜率 PPED。
中心變量
在擬合多層次模型之前,有必要使用適當的中心化方法(即大均值中心化或簇內中心化)對預測因子進行中心化,因為中心化方法對模型估計的解釋很重要。根據Enders和Tofighi(2007)的建議,我們應該對第一層次的預測因子SEX和PPED使用組內中心化,對第二層次的預測因子MSESC使用平均值中心化。
-
Euee <- New %>%
-
group_by(ID) %>%
-
muae(SEX - mean(SE),
-
PED - mean(PED)) %>%
-
uou() %>%
-
muate( ME - mean(MEC, na.rm = T))

僅截距模型
為了指定多層次模型,我們再次使用 包中的 brm 函數 brms。請注意,隨機效應項應包含在括號中。此外,在括號內,隨機斜率項和聚類項之間應以 隔開 |。
我們首先指定一個僅截距模型,以評估數據聚類結構的影響。我們將跳過模型收斂診斷的步驟。
-
BaeselMti(RPAT ~ 1 + (1|SOLID),
-
data
-
famly = beouli(link = "logt"

下面我們計算僅截距模型的 ICC(類內相關性)。請注意,對於非高斯貝葉斯模型(例如邏輯回歸),我們需要設置“ppd = T”,以便方差計算基於后驗預測分布。
icc(BylMunrept, pd = T)

0.29 的方差比(與 ICC 相當)意味着結果變量中 29% 的變異可以由數據的聚類結構來解釋。這提供了證據,表明與非多層次模型相比,多層次模型可能會對模型估計產生影響。因此,多層次模型的使用是必要的。
完整模型
按部就班地建立多層次模型是一個好的做法。然而,由於本教程的重點不是多層次模型,我們直接從僅有的截距模型到我們最終感興趣的完整模型。在完整模型中,我們不僅包括SEX、PPED和MSESC的固定效應項和一個隨機截距項,還包括SEX和PPED的隨機斜率項。請注意,我們指定family = bernoulli(link = "logit"),因為這個模型本質上是一個二元邏輯回歸模型。
-
baysMoel(RPET ~ EX + PED + SESC + (1 + EX + PPD|ID),
-
data
-
famy = brnuli(lnk = "loit"))
summary(BaeMil)

我們可以繪制相關模型參數估計的密度。
-
plot(ByodlMtil,
-
prb = 95)

結果(與固定效應有關)與之前貝葉斯二元邏輯回歸和二元邏輯回歸模型的結果相似。在學生層面上,性別對學生留級的幾率有正向影響,而PPED有負向影響。在學校層面上,MSESC對結果變量有負面的影響。在三個預測因子中,SEX和PPED的置信區間(由密度中的淺藍色陰影區域表示)顯然不包含零。因此,它們應該被視為有意義的預測因素。相反,MSESC盡管有95%的可信區間不含零,但可信區間的上界非常接近於零,其密度只包含零。正因為如此,MSESC可能是一個比SEX和PPED更不相關的預測因子。
現在讓我們看看隨機效應項 ( sd(Intercept), sd(SEX) 和 sd(PPED))。圖中的密度 sd(Intercept) 明顯遠離零,表明在模型中包含此隨機截距項的相關性。的隨機斜率方差SEX 為0.382=0.140.382=0.14, 隨機斜率方差 PPED 為0.262=0.070.262=0.07。這兩種差異都不可忽視。但是,如果我們看一下密度圖,兩者的置信區間的下限 sd(SEX) 和 sd(PPED) 非常接近零,並且它們的密度也沒有明確的從零分開。這表明可能不需要包括這兩個隨機斜率項。
我們還可以繪制跨學校的隨機效應項。
-
-
#提取所有隨機效應項的后驗分布
-
RdEffct <- rf(aoFl)
-
-
#提取 "sd(Intecpt) "的后驗分布
-
r_ec <- dRf$CI[, , 1] %>%。
-
abbe() %>
-
roton(var = "ID") %>%
-
uae(Vrible = "d(Inercpt)")
-
-
#提取`sd(SEX)`的后驗分布。
-
r_ <- dam$OD[, , 2] %>%>。
-
astle() %>%。
-
rnlmn(var = "ID") %>%
-
mae(Vaiae = "sd(SEX)")
-
-
#提取`sd(PPED)`的后驗分布
-
r_ED <-atdSH, 3] %>%>。
-
ate() %>%。
-
rotcnr = ID") %>%
-
ute(Vaiale = "sdPE)")
-
-
#繪圖
-
r_ntct %>%
-
bdows(r_EX) %>%
-
biws(_PED) %>%
-
mat(Coro= ifese(Q2.5*Q97.5 > 0, "no", "yes") ) %>%
-
pot() +
-
goint() +
-
erbr(as(yin=Q2.5, ymx=Q97.5))
-
-

同樣,我們可以看到隨機截距項 ( sd(Intercept))的后驗分布在不同學校之間有很大的差異。他們中的很多人也遠離零。因此,我們可以得出結論,包含隨機截距是必要的。相比較而言,所有的后驗分布的 sd(SEX) ,並 sd(PPED) 經過零,這表明有可能是沒有必要在模型中包含兩個隨機斜率。
為了解釋固定效應項,我們可以計算指數系數估計值。
-
##分類變量:SEX和PPED
-
exp(fif(BeoMiF)[-4,-2])

-
##連續的變量:MSESC
-
-
exp(fxf(BelFl)[4,-2]*sd(ul(i_o ))
![]()
我們可以看到,SEX、PPED和MSESC的影響與之前的模型結果非常相似。
參考
Sing, T., Sander, O., Beerenwinkel, N. & Lengauer, T. (2005)。 ROCR:可視化 R. 生物信息學中的分類器性能,21 (20),第 7881 頁。 http://rocr.bioinf.mpi-sb.mpg.de

最受歡迎的見解
4.R語言中的block Gibbs吉布斯采樣貝葉斯多元線性回歸
