用户在R中为glm指定的链接函数。如何?(未找到任何文档,需要使用哪些参数等)
这个问题过去在这个网站上已经有了一些解决方案,但是提供的答案对我并没有完全的帮助。以下是我的问题的细节,这些问题实际上与这里已经讨论的有所不同: 在努力工作之后,我仍然无法理解如何在R for用户在R中为glm指定的链接函数。如何?(未找到任何文档,需要使用哪些参数等),r,glm,R,Glm,这个问题过去在这个网站上已经有了一些解决方案,但是提供的答案对我并没有完全的帮助。以下是我的问题的细节,这些问题实际上与这里已经讨论的有所不同: 在努力工作之后,我仍然无法理解如何在R forglm中定义自己的用户指定链接函数。关于这一点,我有几个问题 首先,我知道我必须编写自己的函数(可能是修改一个已经存在的函数),并且-在其中-我需要定义以下元素: linkfun:链接功能 linkinv:链接功能的逆函数,作为“eta”的函数 mu.eta:invlink相对于eta的一阶导数 vali
glm
中定义自己的用户指定链接函数。关于这一点,我有几个问题
首先,我知道我必须编写自己的函数(可能是修改一个已经存在的函数),并且-在其中-我需要定义以下元素:
:链接功能linkfun
:链接功能的逆函数,作为“eta”的函数linkinv
:invlink相对于eta的一阶导数mu.eta
:如果eta的值在正确的时间间隔内,则必须返回TRUEvalideta
make.link(“sqrt”)
。然后我们确实发现linkfun是sqrt(mu)
,linkinv是eta^2
,mu.eta是2*eta
。到目前为止,一切顺利。但是,如果您查看make.link(“log”)
,mu.eta不仅仅是它应该的exp(eta)
,而是pmax(exp(eta),.Machine$double.eps)
(即,所有eta向量的一阶导数的最大值)。为什么?我仍然无法理解这一点log((Y+0.5)/(N-Y+0.5))
,而不是使用标准的logit函数log(p/(1-p))
我的另一个问题是:我不确定是否能回答您所有的问题,但我尝试一下:
linkfun
,它需要mu
和y
?据我所知,链接函数应仅为tkaemu
,因为GLM(与LM相反)模拟了expecedd值mu
(又称链接函数)的函数,而不是expecedd值本身。因此,应该只有mu
作为参数矢量化有关pmax
返回并行最大值,我们希望确保报告的值不小于Machine$double.eps
。因此linkfun不会返回所有exp(eta)
的最大值(即max(exp(eta),.Machine$double.eps)
)。现在想象一下,eta
现在是所有eta
的向量,您要计算这些向量,然后linkinv
,使用pmax(.)
确保仅在这些情况下返回exp(eta)
它确实大于。Machine$double.eps
。因此,您还返回一个极大值的向量。(尝试使用pmax(1:6,4)
您将获得[1]4 5 6
)
beta[j]
(即dL/dbeta[j]
)的导数取决于:
是来自各自分布的色散参数的(已知)函数(例如,对于正态分布,a(phi[i])
)a(phi)=phi=σ^2
对于指数族的分布(GLM是为其设计的),可以推导出V(mu[i])
可以写成var(Y)
,表明方差确实是均值的函数a(phi)*V(mu)
最后是链接函数的导数。因此,为了求解分数函数(从而获得g'(mu[i])
beta[j]的估计值),您需要链接函数的导数
- 林昆酒店
- 相反
- 导数
- 用于验证eta的函数
y
作为一个参数,但是,我不确定glm
是否可以处理它,因为在其拟合机制中,它会在某个点调用linkfun
,并查看预定义的linkfun,所有这些都只需要一个参数如果你扭曲了glm
的代码,那么这将是相当多的工作要做(所有事情都没有经过测试,只是作为思想的食粮,没有任何保证它会工作):
- 提供你的linkfun/linkinvers等类似于
函数(mu,y)[你想在这里拥有什么]
- 创建一份
(glm.fit
say)glm.fit2
- 将调用
,linkfun(mu)
等更改为linkinv(eta)
,linkfun(mu,y)
等linkinv(eta,y)
- 当您致电
时,请提供glm
告知method=“glm.fit2”
glm<
function(mu) [a function which uses mu and y - as y is known within the context where this function is called]