【问题标题】:Warning in GLM analysisGLM 分析中的警告
【发布时间】:2020-08-08 15:17:04
【问题描述】:

我正在使用标准化和转换后的数据集运行 GLM 分析,但遇到如下警告消息。

glm.fit:拟合概率为 0 或 1 glm.fit:算法没有收敛 glm.fit: 拟合概率为 0 或 1

然后,我创建了一个模拟数据框,并以与实际数据集相同的方式运行它,并且没有任何警告。 下面是我的代码和模拟数据集 任何帮助,将不胜感激! 谢谢!

library(tidyverse)
library(broom)
data <- data.frame(B = c("m","m","m","m","m", "m", "f","f","f","f","f"),
                   G= c("s","s","s","u","u", "u", "k","k","k","r","r"),
                   g1 = c(35, 2, 3, 4, 5, 6, 7, 10, 12, 41, 76), 
                   g2 = c(20, 2, 7, 2, 8, 5, 5, 3, 7, 2, 12), 
                   g3 = c(5, 0, 4, 5, 2, 4, 8, 9, 20, 1, 11,
                   g4 = c(1,3,4,5,7,3,1,5,7,3,10),
                   g5=  c(20,23, 27, 35, 12, 10, 17, 24, 21, 15, 16)))
data %>% 
  pivot_longer(-c(1:3)) %>% 
  group_split(name) %>% 
  set_names(nm = map(., ~ first(.x$name))) %>% 
  map(~ tidy(glm(factor(data$B) ~ value,family="binomial", data = .))) %>% 
  map(~ filter(., p.value > 0.05)) %>% 
  bind_rows(.id = "var")```


【问题讨论】:

    标签: r


    【解决方案1】:

    您很可能在完全或准完全分离方面存在问题:对于您的预测变量的某些组合,您只观察到失败的成功。对于小样本中的逻辑回归或参数空间较大的情况,这是很常见的现象。

    为了获得所有参数的估计值,有几种实现会在可能性上增加一个小惩罚。查看Firth逻辑回归。在 R 中,可以由 logistf 包中的 logistf() 函数处理。

    替换

    glm(factor(data$B) ~ value,family="binomial", data = .)
    

    在您的代码中使用

    logistf(factor(data$B) ~ value, data = .)
    

    你应该已经启动并运行了。 (记得先加载包)。

    应该注意的是,分离本身并不一定是一个问题。仅当您需要参数估计时。

    如果您将BG 制成表格,您实际上可以看到分离问题:

    xtabs(~ B + G, data=data)
    

    这会产生

       G
    B   k r s u
      f 9 6 0 0
      m 0 0 9 9
    

    所以你可以看到,如果你知道G,那么你就知道B的结果。

    【讨论】:

    • 我使用了你的代码“logistf(factor(data$B) ~ value, data = .)”,但它给了我一个错误“错误:logistf 类的对象没有整洁的方法”。所以,你觉得函数“logistf”和“tidy”有冲突吗?
    • 是的。 tidy() 可能没有与 logistf() 一起使用的包装器。您应该仍然能够使用summary() 获得必要的输出。也许值得 ping tidy() 的创建者并向他们提及?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多