NA在线性回归模型中产生

时间:2014-09-20 07:04:57

标签: r

我已经阅读了相似的帖子,但我的问题没有通过给出的答案解决。我想做一个简单的线性回归,看看咬合发生率是否与区,区(疫苗或对照)和年份有关。正如您在输出中看到的那样,RORYA中的一个区域被赋予NA系数,并且我得到消息"系数:(1由于奇点而未定义)"。 我已经阅读了这一点,它似乎与因素的共线性有关。 给出的一个解决方案是在调用中添加-1,这会删除拦截但不能解决我的问题,因为RORYA区在摘要输出中仍然有NA。

我尝试过的另一个解决方案是改变调用中解释变量的顺序。这确实改变了一些事情...... Rorya区突然有系数,但Zone变量变为NA' d。这两个都不好,因为我想要所有解释变量的系数。

我想知道是否有人可能知道为什么会这样,以及是否有解决这个问题的方法,以便所有变量都有系数?

提前致谢。

一个可重复的例子:

df <- structure(list(DISTRICT = structure(c(1L, 6L, 5L, 3L, 2L, 4L, 
1L, 6L, 5L, 3L, 2L, 4L, 1L, 6L, 5L, 3L, 2L, 4L, 1L, 6L, 5L, 3L, 
2L, 4L), .Label = c("BUNDA", "MASWA", "MUSOMA", "RORYA", "SERENGETI", 
"TARIME"), class = "factor"), zone = structure(c(2L, 2L, 2L, 
1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 
2L, 2L, 1L, 1L, 1L), .Label = c("c", "v"), class = "factor"), 
year = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("2010", 
"2011", "2012", "2013"), class = "factor"), bites = c(7.461327937, 
NA, NA, NA, 35.16164185, 26.39109338, 57.89990479, 1.47191729, 
3.608371422, 51.36718605, NA, 16.21167165, 46.85713945, 15.89670673, 
5.212092054, 259.8137381, 30.80276062, 20.73585909, 10.44585911, 
9.420270656, 7.617673001, 307.4586643, 27.31565565, 30.16124958
), deaths = c(0, NA, NA, NA, 0, 1.508062479, 0.298453117, 
0, 0, 0, NA, 2.262093719, 0.298453117, 0.294383458, 0, 2.233355915, 
0.581184163, 1.131046859, 0.298453117, 0.588766916, 1.202790474, 
2.977807887, 0, 1.885078099)), .Names = c("DISTRICT", "zone", 
"year", "bites", "deaths"), row.names = c(NA, -24L), class = "data.frame")

代码:

summary(df )
names(df)
attach(df)
is.numeric(year)
df$year  <- as.factor(as.character(df$year))
is.factor(df$year)

model1 <- lm(bites ~   zone + DISTRICT-1 +year, data = df)
summary(model1)

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_1.0.0

loaded via a namespace (and not attached):
[1] colorspace_1.2-4 digest_0.6.4     gtable_0.1.2     MASS_7.3-34      munsell_0.4.2   plyr_1.8.1       proto_0.3-10     Rcpp_0.11.2     
[9] reshape2_1.4     scales_0.2.4     stringr_0.6.2    tools_3.1.0     

1 个答案:

答案 0 :(得分:6)

当您使用因子(在本例中为DISTRICT)拟合模型并且没有截距时,方法是为每个因子创建一个虚拟二进制变量。所以在内部,&#34;是二进制0/1的值;在DISTRICT RORYA&#34;中是这种情况。现在,每个案例的zone变量都是c,因此您在DISTRICT==RORYAzone之间达成了完美的一致。变量完全共线,因此警告:

Coefficients: (1 not defined because of singularities)

并且无法定义这两个参数。所以NA出现了。

在您的数据中,所有地区都是其中一个区域:

> table(df$DISTRICT, df$zone)

            c v
  BUNDA     0 4
  MASWA     4 0
  MUSOMA    4 0
  RORYA     4 0
  SERENGETI 0 4
  TARIME    0 4

因此,在任何分析中,您都会遇到包含zoneDISTRICT变量的问题。你不能拥有zone任何区域的系数,因为根本没有足够的信息来区分任何区域及其区域。