用户在R中为glm指定的链接函数。如何?(未找到任何文档,需要使用哪些参数等)

用户在R中为glm指定的链接函数。如何?(未找到任何文档,需要使用哪些参数等),r,glm,R,Glm,这个问题过去在这个网站上已经有了一些解决方案,但是提供的答案对我并没有完全的帮助。以下是我的问题的细节,这些问题实际上与这里已经讨论的有所不同: 在努力工作之后,我仍然无法理解如何在R forglm中定义自己的用户指定链接函数。关于这一点,我有几个问题 首先,我知道我必须编写自己的函数(可能是修改一个已经存在的函数),并且-在其中-我需要定义以下元素: linkfun:链接功能 linkinv:链接功能的逆函数,作为“eta”的函数 mu.eta:invlink相对于eta的一阶导数 vali

这个问题过去在这个网站上已经有了一些解决方案,但是提供的答案对我并没有完全的帮助。以下是我的问题的细节,这些问题实际上与这里已经讨论的有所不同:

在努力工作之后,我仍然无法理解如何在R for
glm
中定义自己的用户指定链接函数。关于这一点,我有几个问题

首先,我知道我必须编写自己的函数(可能是修改一个已经存在的函数),并且-在其中-我需要定义以下元素:

  • linkfun
    :链接功能
  • linkinv
    :链接功能的逆函数,作为“eta”的函数
  • mu.eta
    :invlink相对于eta的一阶导数
  • valideta
    :如果eta的值在正确的时间间隔内,则必须返回TRUE
并在列表元素中返回所有这些内容

到目前为止,一切顺利

以下是我的第一组问题:

  • 链接函数有时定义为“y”的函数,有时定义为“mu”的函数。在这方面必须做些什么

  • 让我们举个例子,键入
    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向量的一阶导数的最大值)。为什么?我仍然无法理解这一点

  • 出于好奇,为什么算法需要invlink对eta的一阶导数?我对此并不完全清楚

    在我的具体案例中,我需要一个二项数据的准逻辑回归。我需要稍微修改链接函数(如果p被定义为Y/N):
    log((Y+0.5)/(N-Y+0.5))
    ,而不是使用标准的logit函数
    log(p/(1-p))

    我的另一个问题是:

  • 我仍然无法建造这个。。有人能给我一些提示吗

  • 我在哪里可以找到所有这些的详细解释?我看过好的《钱伯斯和黑斯蒂的旧书》(1992年),但解释是不够的。网上有没有详细的课程


  • 我不确定是否能回答您所有的问题,但我尝试一下:

  • 您能否指定一个
    linkfun
    ,它需要
    mu
    y
    ?据我所知,链接函数应仅为tkae
    mu
    ,因为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

  • 你需要一阶导数来计算得分函数的估计量,即:dL/dbeta[j]=sum(y[i]-mu[i])/(a(phi[i]*V(mu[i])x[ij]/g(mu[i])=0。这是似然函数w.r.t对
    beta[j]
    (即
    dL/dbeta[j]
    )的导数取决于:

    • a(phi[i])
      是来自各自分布的色散参数的(已知)函数(例如,对于正态分布,
      a(phi)=phi=σ^2
    • V(mu[i])
      对于指数族的分布(GLM是为其设计的),可以推导出
      var(Y)
      可以写成
      a(phi)*V(mu)
      ,表明方差确实是均值的函数
    • g'(mu[i])
      最后是链接函数的导数。因此,为了求解分数函数(从而获得
      beta[j]的估计值),您需要链接函数的导数
  • 因此,在您的情况下,您需要定义:

    • 林昆酒店
    • 相反
    • 导数
    • 用于验证eta的函数
    我知道你的问题是链接函数也需要将
    y
    作为一个参数,但是,我不确定
    glm
    是否可以处理它,因为在其拟合机制中,它会在某个点调用
    linkfun
    ,并查看预定义的linkfun,所有这些都只需要一个参数如果你扭曲了
    glm
    的代码,那么这将是相当多的工作要做(所有事情都没有经过测试,只是作为思想的食粮,没有任何保证它会工作):

    • 提供你的linkfun/linkinvers等类似于
      函数(mu,y)[你想在这里拥有什么]
    • 创建一份
      glm.fit
      glm.fit2
      say)
    • 将调用
      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]