如何修复R中glm变量中奇异点

2wnc66cl  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个问题,我的一个(虚拟)变量添加到我的泊松模型。主要的问题是,当我运行我的模型时,只有这个虚拟变量作为解释变量(它由六个虚拟变量组成),没有截距,它工作得很好。但是当我试图将它添加到具有更多解释变量的现有模型之上时,由于共线性误差,它不会计算最终变量。这让我很困惑,因为当模型中只有假人时,它正常工作。
我已经尝试过改变解释变量的顺序,但是一旦我将“位置”添加到任何设置中,它就不再计算最终变量了。
由于最后一个变量与我的结果相关,即使它与另一个变量直接共线,我也不知道该怎么做
提前感谢您的帮助!
只有变量位置的模型(R自动将其变为虚拟模型):

  1. model = glm(formula = taeni_number ~ 0 + location,
  2. data=data, family=quasipoisson(link="log"))

首先使用其他解释变量的模型:

  1. model = glm(formula = taeni_number ~ 0 + grass + gravel + multi + location,
  2. data=data, family=quasipoisson(link="log"))

使用的数据集为:

  1. structure(list(grass = c(0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  2. 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  3. 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  4. 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  5. 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  6. 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  7. 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  8. 0L, 1L, 0L), gravel = c(1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  9. 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  10. 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  11. 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  12. 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  13. 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  14. 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  15. 0L, 0L), multi = c(0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  16. 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  17. 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  18. 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  19. 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L,
  20. 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L,
  21. 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L,
  22. 1L), taeni_number = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 2L, 0L, 0L,
  23. 2L, 0L, 1L, 3L, 0L, 0L, 0L, 1L, 8L, 34L, 5L, 11L, 19L, 7L, 0L,
  24. 1L, 2L, 0L, 1L, 0L, 14L, 19L, 10L, 15L, 8L, 3L, 0L, 1L, 0L, 0L,
  25. 0L, 0L, 0L, 3L, 1L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 9L,
  26. 5L, 8L, 8L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 6L, 15L, 2L, 2L, 9L,
  27. 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
  28. 0L, 0L, 0L, 2L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L,
  29. 6L, 1L, 1L, 4L, 1L), location = structure(c(1L, 1L, 1L, 1L, 1L,
  30. 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L,
  31. 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 1L,
  32. 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
  33. 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L,
  34. 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
  35. 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L,
  36. 5L, 6L, 6L, 6L, 6L, 6L, 6L), levels = c("0", "1", "2", "3", "4",
  37. "5"), class = "factor")), class = "data.frame", row.names = c(NA,
  38. -108L))
ui7jx7zq

ui7jx7zq1#

问题是grassgravelmulti也是完全共线的。在任何一行中,这些值中只有一个值为1。由于已经去掉了截距,因此可以估计grassgravelmulti的所有系数,但是由于位置虚拟对象也是完全共线的,因此其中一个被丢弃。如果更改变量的顺序,将位置放在第一位,您将看到共线变量的最后一个系数(例如,在本例中为multi)被删除。

  1. glm(formula = taeni_number ~ 0 + location + gravel + grass + multi ,
  2. + data=d, family=quasipoisson(link="log"))
  3. # Call: glm(formula = taeni_number ~ 0 + location + gravel + grass +
  4. # multi, family = quasipoisson(link = "log"), data = d)
  5. #
  6. # Coefficients:
  7. # location0 location1 location2 location3 location4 location5 gravel grass multi
  8. # -2.4634 -1.0771 -1.9526 1.2583 -1.0771 1.2255 0.5193 1.1605 NA
  9. #
  10. # Degrees of Freedom: 108 Total (i.e. Null); 100 Residual
  11. # Null Deviance: 850.9
  12. # Residual Deviance: 236.5 AIC: NA

相关问题