【问题标题】:GLM errror quasi family RGLM错误准家族R
【发布时间】:2020-03-31 15:40:21
【问题描述】:

我正在尝试在 quasi 家族的帮助下拟合 GLM,以指定均值和方差之间的关系。
问题是我无法为某些特定的方差假设拟合模型。 更具体地说,如果我将其设置为 mu^2 一切都很好,但我将其设置为 mu^3 它会因一个奇怪的错误而中断。
代码在这里

data <- structure(list(origin = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                            1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
                                            3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
                                            5L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 10L
), .Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"
), class = "factor"), dev = structure(c(1L, 3L, 4L, 5L, 6L, 7L, 
                                        8L, 9L, 10L, 2L, 1L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 3L, 
                                        4L, 5L, 6L, 7L, 8L, 9L, 1L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 3L, 4L, 
                                        5L, 6L, 7L, 1L, 3L, 4L, 5L, 6L, 1L, 3L, 4L, 5L, 1L, 3L, 4L, 1L, 
                                        3L, 1L), .Label = c("1", "10", "2", "3", "4", "5", "6", "7", 
                                                            "8", "9"), class = "factor"), amount = c(5012, 3257, 2638, 898, 
                                                                                                     1734, 2642, 1828, 599, 54, 172, 106, 4179, 1111, 5270, 3116, 
                                                                                                     1817, 100, 673, 535, 3410, 5582, 4881, 2268, 2594, 3479, 649, 
                                                                                                     603, 5655, 5900, 4211, 5500, 2159, 2658, 984, 1092, 8473, 6271, 
                                                                                                     6333, 3786, 225, 1513, 4932, 5257, 1233, 2917, 557, 3463, 6926, 
                                                                                                     1368, 1351, 5596, 6165, 3133, 2262, 2063)), class = c("data.frame"), row.names = c(NA, -55L))

glm(amount~., data = data, family=quasi(link = "log", variance = "mu^2"))
glm(amount~., data = data, family=quasi(link = "log", variance = "mu^3"))

如您所见,第一个 glm 运行良好,但第二个失败。
我在这里错过了什么?
非常感谢

【问题讨论】:

  • 如果您实际显示您在问题中遇到的输出/错误会更好。

标签: r glm variance


【解决方案1】:

有时向我们提供错误消息会很有帮助。使用您的代码:

glm(amount~., data = data, family=quasi(link = "log", variance = "mu^3"))

错误信息是:

Error: inner loop 1; cannot correct step size
In addition: Warning message:
step size truncated due to divergence 

通过搜索此错误消息,您通常可以找到其含义的答案。根据这篇文章(https://r.789695.n4.nabble.com/glm-error-cannot-correct-step-size-td990913.html),这是一个模型收敛问题。这可能表明方差结构“mu^3”不适合您的数据。当模型不收敛时,有时在连续预测变量上使用 scale() 会有所帮助(此处不合适,因为您已将 origindev 都指定为因子)。但是,您也可以放弃条款来提供帮助。

glm(amount~origin+dev, data = data, family=quasi(link = "log", variance = "mu^3"))

这与无效的初始模型相同(只是将 . 替换为您唯一的预测变量 origindev)——这意味着该模型无效。但是如果我们放弃origindev,它们会很好地收敛:

glm(amount~origin, data = data, family=quasi(link = "log", variance = "mu^3"))
glm(amount~dev, data = data, family=quasi(link = "log", variance = "mu^3"))

如果您只是在寻找最合适的选择,那么以下两种方法也可以。但是,在选择这些其他选项之前,您需要了解此处的区别:

glm(amount~., data = data, family=quasi(link = "log", variance = "mu"))
glm(amount~., data = data, family=quasi(link = "log", variance = "constant"))

【讨论】:

  • 感谢您的回答。问题是我正在尝试数据中均值和方差之间的不同关系,以了解哪个最合适。这就是为什么我有mu^2mu^3。此外,我不能放弃预测变量,因为我需要基于 origindev 的结果不同。
  • "...了解哪个最合适。" - 是的,我相信模型没有收敛(错误消息)这一事实表明mu^3 不合适。
猜你喜欢
  • 2021-10-24
  • 1970-01-01
  • 2014-11-12
  • 2012-01-19
  • 1970-01-01
  • 2018-03-05
  • 2015-03-15
  • 2019-09-07
相关资源
最近更新 更多