【问题标题】:Logistic Regression with GLM使用 GLM 进行逻辑回归
【发布时间】:2018-08-11 04:00:05
【问题描述】:

我试图将我的一些 R 代码带给 Julia,但 GLM 包有问题。数据集按年龄分组,每组中有 m_i 个个体,其中 N_i 个患病。我想根据年龄来估计生病的概率——一个典型的逻辑回归问题。我的代码看起来像:

fit <- glm(cbind(N, m - N) ~ age, family = binomial, data = heart)

我在 Julia 中尝试了以下函数调用,但它不起作用:

glm(@formula((N, m-N) ~ age), df, Binomial(), LogitLink())

有什么想法吗?数据集可以在这里找到:http://stat.ethz.ch/Teaching/Datasets/heart.dat

谢谢。

【问题讨论】:

    标签: regression julia glm


    【解决方案1】:

    您必须构造一个二元变量sick,它对应于每个年龄组中患病和未患病的观察次数。我通过为每个年龄组创建一个单独的DataFrame 然后在它们上运行vcat 来实现这一点。

    假设您在heart 数据框中读取数据,这是完成这项工作的代码(我将heart_flat 的创建压缩为一行,但您可以提取其中的理解以查看在走):

    heart_flat = vcat([DataFrame(age=row[:age],
                                 sick=[ones(Int, row[:N]);
                                       zeros(Int, row[:m]-row[:N])])
                       for row in eachrow(heart)]...)
    
    glm(@formula(sick ~ age), heart_flat, Binomial(), LogitLink())
    

    它产生与 R 中相同的估计值。

    【讨论】:

    • 非常适合我。但是,“但是您可以提取内部的理解以查看在旅途中创建的内容”是什么意思。我必须把它们放在哪里?
    • 如果您在 REPL 中运行 [DataFrame(age=row[:age], sick=[ones(Int, row[:N]); zeros(Int, row[:m]-row[:N])]) for row in eachrow(heart)],您可以看到应用了 vcat 的个人 DataFrames
    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2014-06-20
    • 2015-04-26
    • 2015-12-19
    • 2015-02-21
    • 1970-01-01
    • 2012-02-25
    • 2017-03-10
    相关资源
    最近更新 更多