首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在glm函数中使用二项式时,lazyeval找不到`C_logit_link`

在glm函数中使用二项式时,lazyeval找不到`C_logit_link`
EN

Stack Overflow用户
提问于 2017-03-12 01:00:55
回答 1查看 152关注 0票数 0

我真的很抓狂。我真的不明白这是怎么回事。这是一个MWE,但是实际的代码和目的要比这个复杂得多。所以代码是:

代码语言:javascript
复制
library(dplyr)
ds <- mutate(iris, Species = as.numeric(Species == 'setosa'))

ds %>%
    do_(
        .dots = lazyeval::interp(
            "broom::tidy(stats::glm(form, data = ., family = distr))",
            form = Species ~ Sepal.Length,
            distr = binomial()
        )
    )

它返回:Error in family$linkfun(mustart) : object 'C_logit_link' not found ...但是这段代码运行得很好:

代码语言:javascript
复制
ds %>%
    do_(
        .dots = lazyeval::interp(
            "broom::tidy(stats::glm(form, data = ., family = distr))",
            form = Sepal.Width ~ Sepal.Length,
            distr = gaussian()
        )
    )

两者之间的唯一区别是使用的族分布(高斯分布与二项式分布)和使用的变量。

那么问题是:为什么懒人找不到C_logit_link

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-12 01:40:53

当您调用interp(x, *)时,它会计算要插入到x中的参数。在binomial()的情况下,结果是一个表示GLM中的二项式分布的结构。

代码语言:javascript
复制
interp(~x, x=binomial())

#~list(family = "binomial", link = "logit", linkfun = function (mu) 
#.Call(C_logit_link, mu), linkinv = function (eta) 
#.Call(C_logit_linkinv, eta), variance = function (mu) 
#mu * (1 - mu), dev.resids = function (y, mu, wt) 
#.Call(C_binomial_dev_resids, y, mu, wt), aic = function (y, n, 
#    mu, wt, dev) 
#{
#    m <- if (any(n > 1)) 
#    . . .

隐藏在该结构中的是一个函数,它通过对象C_logit_link调用已编译的C代码。这是stats包中未导出的对象。通常情况下,一切都很正常,因为该函数的环境是stats命名空间,所以它能够找到C_logit_link

这里的问题是,您正在插值的对象是一个字符串,这意味着插入到其中的所有内容也会被强制转换为字符串。这会丢失查找C_logit_link所需的环境信息。

解决方案是插入一个公式:

代码语言:javascript
复制
library(dplyr)
ds <- mutate(iris, Species = as.numeric(Species == 'setosa'))

ds %>%
    do_(
        .dots = lazyeval::interp(
            ~broom::tidy(stats::glm(form, data = ., family = distr)),  # formula
            form = Species ~ Sepal.Length,
            distr = binomial()
        )
    )

#          term  estimate std.error statistic      p.value
#1  (Intercept) 27.828521 4.8275611  5.764509 8.189574e-09
#2 Sepal.Length -5.175698 0.8933984 -5.793270 6.902910e-09
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42738038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档