我已经阅读了相似的帖子,但我的问题没有通过给出的答案解决。我想做一个简单的线性回归,看看咬合发生率是否与区,区(疫苗或对照)和年份有关。正如您在输出中看到的那样,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
答案 0 :(得分:6)
当您使用因子(在本例中为DISTRICT)拟合模型并且没有截距时,方法是为每个因子创建一个虚拟二进制变量。所以在内部,&#34;是二进制0/1的值;在DISTRICT RORYA&#34;中是这种情况。现在,每个案例的zone
变量都是c
,因此您在DISTRICT==RORYA
和zone
之间达成了完美的一致。变量完全共线,因此警告:
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
因此,在任何分析中,您都会遇到包含zone
和DISTRICT
变量的问题。你不能拥有zone
和任何区域的系数,因为根本没有足够的信息来区分任何区域及其区域。