重新生成您的示例:
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.glm
和plot.profile
正在做什么,请参阅?profile.glm
和?plot.profile
。但是,为了深入研究对象,检查和的代码也profile
可能很有用......基本上,这些告诉你的是返回偏差和最小偏差之间差异的有符号平方根,按比例缩放色散参数。这样做的原因是,完美二次轮廓的轮廓将显示为一条直线(与肉眼检测直线的偏差比检测抛物线的偏差要容易得多)。MASS:::profile.glm
MASS:::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
它还包含属性summary
,original.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")))
![在此处输入图像描述](https://i.stack.imgur.com/aobVt.png)
或者使用ggplot2:
library(ggplot2)
ggplot(pp3,aes(value,deviance))+geom_line()+geom_point()+
facet_wrap(~par,scale="free_x")
![在此处输入图像描述](https://i.stack.imgur.com/tD4cU.png)