廣義線性模型

2021-07-25 18:53:17 字數 3909 閱讀 1012

廣義線性模型是線性模型的擴充套件,主要是對非正態因變數的分析

廣義線性擬合的核心是最大似然估計,而不是最小二乘

擬合模型如下 μy

=β0+

∑pj=

1βjx

j 其中,beta是係數,mu是優勢比的對數,beta係數是對優勢比的影響。通過擬合求得的就是

我們可以通過兩個例子看一下兩種變數

類別型:

自變數x:人口統計資訊、人際關係資訊、個人資訊

因變數y:婚姻狀況

計數型:

自變數x:藥物使用狀況

因變數y:八周以來累計的癲癇次數

glm(formula, family=family(link=function), data=)
今天用到的兩個分布

概率分布

連線函式

binomial

logit

poisson

log

通過一系列的連續型或者類別型的**變數來**二值型結果變數。

我們主要使用aer包裡的affairs資料框為例。

data

(affairs, package = "aer")

summary

(affairs)

table

(affairs$affairs)

但是其實我們需要的是二值型的**結果,我們可以做乙個轉換,把affair變為ynaffair

affairs$ynaffair[affairs$affairs > 0] <- 1

affairs$ynaffair[affairs$affairs == 0] <- 0

affairs$ynaffair

<- factor(affairs$ynaffair,

levels = c(0,1),

labels = c("no","yes"))

table(affairs$ynaffair)

然後我們來做**,把ynaffair作為結果變數進行擬合

fit.full <- glm(ynaffair ~ gender + age + yearsmarried + children + 

religiousness + education + occupation + rating,

data= affairs, family = binomial())

summary(fit.full)

從回歸係數的p值可以排除幾個不顯著的變數,再重新擬合

fit.reduce <- glm(ynaffair ~ age + yearsmarried + religiousness + 

rating, data= affairs, family = binomial())

summary(fit.reduce)

我們可以用anova函式對兩次擬合進行比較,廣義線性回歸應該用卡方檢驗

anova(fit.reduce, fit.full, test="chisq")
兩次擬合的效果顯然相同

先看看**值和殘差的圖形

plot(predict(fit.reduce, type="response"),

residuals(fit.reduce,type= "deviance"))

遺憾的是,下面這個最方便的診斷函式用不了,只能針對lm物件

gvmodel <- gvlma(fit.reduce)

summary(gvmodel)

coef(fit.reduce)

exp(coef(fit.reduce))

其中,intercept是截距

+2.3.2 看看概率的影響(更加直觀)

觀察某個**變數在各個水平對結果概率的影響(需要把其他變數設為均值)

testdata

<- data.frame(rating=c(1, 2, 3 ,4 ,5), age=mean(affairs$age),

yearsmarried=mean(affairs$yearsmarried),

religiousness=mean(affairs$religiousness))

testdata

使用測試資料集進行**,可以看出不太婚姻幸福水平的人婚變的可能

testdata$prob

<- predict(fit.reduce,newdata=testdata, type="response")

testdata

以此類推還可以**年齡的影響概率

關於過度離勢的內容放在最後一起講

過度離勢指的是觀測變數的方差大於所屬分布的方差,主要後果是會造成顯著性檢驗不精確,導致可解釋性降低

通過一系列的連續型或者類別型的**變數來**計數型結果變數。

我們主要使用robust包裡的breslow資料框為例。

先看看資料

data(breslow.dat, package = "robust")

names(breslow.dat)

summary(breslow.dat[c(6,7,8,10)])

我們只關注前四個變數。結合前四個變數,我們看一下影象

opar <- par(no.readonly = true)

par(mfrow=c(1,2))

attach(breslow.dat)

hist(sumy, breaks=20, xlab="seizure count",

main="distribution of seizures")

boxplot(sumy ~ trt, xlab= "treatment", main="group comparisons")

par(opar)

可以看出藥物的作用導致發病數和極差都變小了(判斷出是泊松分布)

接下來我們開始擬合

然後我們來做**,把ynaffair作為結果變數進行擬合

fit

<- glm(sumy ~ base + age + trt, data= breslow.dat, family = poisson())

summary(fit)

coef(fit)

exp(coef(fit))

其中,intercept是截距

+3.3.2 也可以看看概率的影響(同上,不寫了,讀者請自己練習)

這裡需要用到qcc包

我們先進行判斷

qcc.overdispersion

.test(breslow.dat$sumy, type="poisson")

因為p值小於0.005,所以顯然存在過度離勢。

這時候,你需要使用另一種family引數來擬合,那就是quasipoisson

fit.od <- glm(sumy ~ base + age + trt, data= breslow.dat, family = quasipoisson())

qcc.overdispersion.test(breslow.dat$sumy, type="quasipoisson")

廣義線性模型

之前提到過,線性回歸模型有三個限制 響應變數服從正態分佈,響應變數和解釋變數之間服從線性關係,方差不變。其實在構建乙個線性模型的時候,除了上述的兩個要求,我們還需要對解釋變數進行具體的分析,主要有幾點,首先是解釋變數之間的相互作用 interaction 對結果的影響,簡單來說就是模型不僅僅受因素a...

1 1 廣義線性模型

下面介紹的是一組用於回歸的方法,這些方法的目標值是輸入變數的線性組合。用 作為 值。貫穿模組,我們指定向量 為coef 係數 為intercept 截距 要使用廣義線性模型實現分類,詳見logistic回歸。線性回歸擬合以係數 最小化可觀測到的資料的響應與線性模型 的響應的殘差和的平方,用數學公式表...

廣義線性模型和線性回歸

首先術語廣義線性模型 glm 通常是指給定連續和 或分類 變數的連續響應變數的常規線性回歸模型。它包括多元線性回歸,以及anova和ancova 僅具有固定效果 形式為 yi n x 2 其中xi包含已知的協變數,包含要估計的係數。這些模型使用最小二乘和加權最小二乘擬合。術語廣義線性模型 glim或...