2012-08-11 131 views
4

我想弄清楚如何繪製GLM 參數的輪廓可能性曲線,其中95%pLCI在同一圖上。我一直試圖用 的例子如下。我得到的情節並不是我期望的可能性曲線。圖的y軸是tau,我希望該軸 是可能性,以便我有一個最大值在參數 估計值的曲線。我不確定我在哪裏找到這些可能性值?我可能會誤解這背後的理論。謝謝你提供的所有幫助。在R中繪製輪廓似然曲線

最大

clotting <- data.frame(
u = c(5,10,15,20,30,40,60,80,100), 
lot1 = c(118,58,42,35,27,25,21,19,18), 
lot2 = c(69,35,26,21,18,16,13,12,12)) 
glm2<-glm(lot2 ~ log(u), data=clotting, family=Gamma) 
prof<-profile(glm2) 
plot(prof) 
+0

你永遠不存儲的呼叫的結果glm在這裏。 – Dason 2012-08-11 16:12:59

+0

不知道如何不復制,謝謝。 – ADW11 2012-08-11 17:51:05

回答

8

重生的例子:

clotting <- data.frame(
         u = c(5,10,15,20,30,40,60,80,100), 
         lot1 = c(118,58,42,35,27,25,21,19,18), 
         lot2 = c(69,35,26,21,18,16,13,12,12)) 
glm2 <- glm(lot2 ~ log(u), data=clotting, family=Gamma) 

profile.glm函數實際上住在MASS包:

library(MASS) 
prof<-profile(glm2) 

爲了弄清楚什麼profile.glmplot.profile是做,看到?profile.glm?plot.profile。但是,爲了深入研究profile對象,查看MASS:::profile.glmMASS:::plot.profile的代碼也是有用的......基本上,這些告訴你的是profile正在返回的帶符號的平方根之間的偏差和最小偏差,由色散參數縮放。這樣做的原因是,完美二次曲線的曲線將顯示爲一條直線(從直線檢測偏差比通過眼睛檢測拋物線要容易得多)。

另一件可能有用的知道是如何存儲配置文件。基本上,它是一個數據幀列表(每個參數配置一個),除了單個數據幀有點奇怪(包含一個矢量分量和一個矩陣分量)。

> str(prof) 
List of 2 
$ (Intercept):'data.frame': 12 obs. of 3 variables: 
    ..$ tau  : num [1:12] -3.557 -2.836 -2.12 -1.409 -0.702 ... 
    ..$ par.vals: num [1:12, 1:2] -0.0286 -0.0276 -0.0267 -0.0258 -0.0248 ... 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : NULL 
    .. .. ..$ : chr [1:2] "(Intercept)" "log(u)" 
    ..$ dev  : num [1:12] 0.00622 0.00753 0.00883 0.01012 0.0114 ... 
$ log(u)  :'data.frame': 12 obs. of 2 variables: 
    ..$ tau  : num [1:12] -3.516 -2.811 -2.106 -1.403 -0.701 ... 
    ..$ par.vals: num [1:12, 1:2] -0.0195 -0.0204 -0.0213 -0.0222 -0.023 ... 
    .. ..- attr(*, "dimnames")=List of 2 

它還包含屬性summaryoriginal.fit,你可以用它來恢復分散和最小偏差:

disp <- attr(prof,"summary")$dispersion 
mindev <- attr(prof,"original.fit")$deviance 

現在逆變換系數1:

dev1 <- prof[[1]]$tau^2 
dev2 <- dev1*disp+mindev 

劇情簡介:

plot(prof[[1]][,1],dev2,type="b") 

(這是偏差的陰謀。您可以通過0.5相乘得到負對數似然,或-0.5,以獲得數似然...)

編輯:一些通用功能到配置文件轉換成有用的格式爲lattice/ggplot繪圖...

tmpf <- function(x,n) { 
    data.frame(par=n,tau=x$tau, 
       deviance=x$tau^2*disp+mindev, 
       x$par.vals,check.names=FALSE) 
} 
pp <- do.call(rbind,mapply(tmpf,prof,names(prof),SIMPLIFY=FALSE)) 
library(reshape2) 
pp2 <- melt(pp,id.var=1:3) 
pp3 <- subset(pp2,par==variable,select=-variable) 

現在用格繪製它:

library(lattice) 
xyplot(deviance~value|par,type="b",data=pp3, 
     scales=list(x=list(relation="free"))) 

enter image description here

或者與GGPLOT2:

library(ggplot2) 
ggplot(pp3,aes(value,deviance))+geom_line()+geom_point()+ 
    facet_wrap(~par,scale="free_x") 

enter image description here

+0

真的很有幫助,正是我在找的東西。非常感謝,本。 – ADW11 2012-08-11 18:47:28