R Generalised Linear Model (GLM) --1-- likelihood

寫在前面

介紹了 likelihood,指數家族概率分佈的公共形式和性質,GLM的定義,fitting the GLM,  Inference in the GLM , GLM的例子,GLM的限制。內容較多,會分成多篇。

一些prior基礎內容的瞭解是有必要的:常見概率分佈(如正態,泊松,二項,gamma等),基礎的高等數學,基礎的統計概念,簡單線性迴歸。

我的前幾篇博文,有說到:xx是GLM的特例,XX是GLM的推廣這樣的話,GLM確實是我個人較爲喜歡和推崇的內容,這裏我會盡可能地將它描述清楚。

likelihood

爲什麼要說 likelihood ? 

---- maximum likelihood estimation 是一種獲取模型參數點估計的方法。 因爲GLM支持多種概率分佈,不僅僅是正態分佈,這也就導致了使用  least squares minimisation以 獲取模型參數點估計 不再適用於 GLM,於是我們引入了 likelihood。 glm fitting 和 Inference 很大程度上是基於 likelihood 的。

爲什麼簡單線性迴歸沒有說 likelihood? 

----如果你回顧我之前寫的簡單線性迴歸的文章,你會發現 簡單線性迴歸使用的是 least squares minimisation 最小二乘法,這對於 fitting 和 Inference 就足夠了 。 你還會發現 ”如何得到模型參數的點估計?在lm和GLM中 使用的方法不同,但某種場景下他們又巧妙地 對等“ 這句話,這句話的意思就是 lm使用 least squares minimisation 而 GLM使用  MLE (maximum likelihood estimation),”某種場景“指的正態分佈(它是對稱的), 在這種場景下這兩種方法可視爲等價的,其它概率分佈就另當別論了,這也體現了簡單線性迴歸的侷限性。

幾個prior基礎概念 :

PDF/PMF :概率質量函數/概率密度函數,離散或者連續,這個函數的積分和爲1(說的不準確,別太糾結);

joint :兩個事件的 joint 的概率(並集)= P(A)*P(B),這要求A 和B 是 independent ;

independent random sample :likelihood 要求 數據是 independent random sample,因爲它要用到 joint;

什麼是likelihood?

標準解釋:

我的個人理解: 

我們相信數據遵循某種模型,這個模型可以有很簡單/複雜的形式,模型 是一堆 PDF/PMF 的 joint (對每一組數據有一個對應的PDF/PMF),我們將之稱爲p(y;θ),其中y是數據,θ是模型中待預估地未定參數。當然,前提我們假設數據是 independent random sample ,不然也就沒有 joint 一說了。於是這個模型 likelihood 是:

likelihood 代表了 在不同的 θ 下 ,觀測到 這一堆數據的可能性。 我們當然希望likelihood最大,也就是說我們希望在某種 θ 組合下,likelihood最大-----即:最大似然估計(MLE),它是一種確定模型參數值的方法。參數值的發現使模型描述的過程產生實際觀察到的數據的可能性最大。

maximum likelihood estimation MLE 怎麼求?

簡單點的我們可以手算(求log簡化計算,再對θ求導並=0時最大),如果你是學這個的,你應該在考試或者作業中幹過這個事兒。

計算機裏 我們使用 牛頓-XX(Newton-Raphson)迭代法計算得到,R中 我們可以用 nlm()函數 ,有一個很詳細的解釋這一套是怎麼玩的,我就不寫了,沒必要。

一個例子

binomial 數據

這是一個捕魚數據,用的兩層網,外層孔細,內層孔粗,內外層之間的魚較小,會被放生,以保護生態。 (不會真的有人看不懂這描述吧)

length :魚的長度, total :兩層網的捕魚總數 , escape :內外層之間的魚 

我們的目的是探索 魚的長度 length  和 逃脫 之間的關係。即使不看數據,我們也能猜出:它是一個概率,比如很小的魚 必然能逃脫, 很大的魚必然不能逃脫,中等的魚 看長度 影響概率,在 0到1 之間。

> fish
   length escape total       logit     logitZ
1      21      1     1 -0.28768207  1.0986123
2      23      1     1 -0.28768207  1.0986123
3      25      6     6 -0.07410797  2.5649494
4      26      6     6 -0.07410797  2.5649494
5      27      9     9 -0.05129329  2.9444390
6      28      7     8 -0.18232156  1.6094379
7      29      3     3 -0.13353139  1.9459101
8      30      8    11 -0.34484049  0.8873032
9      31      6     7 -0.20763936  1.4663371
10     32      2     6 -1.02961942 -0.5877867

binomial 模型 

這明顯不適合用 簡單線性模型(它更像一個S型曲線),於是我們給出了下圖這樣的一個模型(其實就是一個binomial GLM),至於爲什麼要是這個模型,而不是其他的,這其實不重要,你當然也可以寫其他的,重點是 這個模型對應着我們前面說的”我們相信 數據 遵循某種概率分佈模型,這個模型可以有很複雜的形式,我們將之統稱爲f(y;θ)“ 。 這裏的 θ 就是下圖的 β0 和 β1 。

response <- cbind(fish$escape,fish$total-fish$escape)
model <- glm(response~length,family="binomial",data=fish)
# Plot proportions and estimated probabilities from the model
plot(fish$length,fish$escape/fish$total,pch=20,xlab="length",ylab="proportion of fish escaping")
x <- seq(20,90,len=200)
lines(x,predict(model,newdata=data.frame(length=x),type="response"),col="red",lwd=4)
preds <- predict(model,newdata=data.frame(length=x),type="response",se.fit = T)
lines(x,preds$fit + 1.96*preds$se.fit,lty=2,col="red",lwd=3)
lines(x,preds$fit - 1.96*preds$se.fit,lty=2,col="red",lwd=3)

 

 

likelihood 可視化 

觀察上面我們定義的數學形式, θ 由 β0 和 β1 組成,那麼可視化 likelihood 就是一個三位立體圖,兩個變量 分別爲:β0 和 β1, 最大 likelihood 處(最紅的)就是我們的最佳 β0 和 β1

library(plot3D)
fish.likelihood <- function (like_look = c(15, 25, -1, -0.4)){
        ### Create a function to evaluate minus the log-likelihood
        likelihood <- function(beta){
                result <- sum(lchoose(fish$total, fish$escape)) + sum(fish$escape * 
                (beta[1] + beta[2] * fish$length)) - sum(fish$total * 
                log(1 + exp(beta[1] + beta[2] * fish$length)))
                return(result)
        }
        ### Plot the likelihood surface

	## Create sequences of length 25 for beta0 and beta1 values to be used for plotting
        beta0grid <- seq(like_look[1], like_look[2], len = 25)
        beta1grid <- seq(like_look[3], like_look[4], len = 25)
	## Create a grid from those sequences (grid size is 25x25=625)
        grid <- expand.grid(beta0grid, beta1grid)
	## Create empty vector to store the value of the log-likelihood at each grid point 
        like <- rep(0, 625)
	## For loop to calculate the likelihood at each gridpoint
        for (i in 1:625){
		like[i] = likelihood(as.numeric(grid[i, ]))
        }
	## Put the likelihood values into a matrix to use with the persp3D command
        like <- matrix(like, 25, 25)
	## Plot the 3D surface
        persp3D(beta0grid, beta1grid, like, theta = 240, phi = 20,
        ticktype = "detailed", xlab = "beta0", ylab = "beta1", 
        zlab = "log likelihood", expand = 2/3, shade = 0.5)	
}
# run the function
fish.likelihood()

基於likelihood 的推論

 

the likelihood ratio 

Akaike Information Criterion (AIC)

這些是用來check model fit的,我放在GLM推論中說

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章