3

我正在尝试使用lmandglm函数在 R 中进行回归。

我的因变量是基于给定时间段内事件与非事件的比例的 logit 转换数据。所以我的因变量是连续的,而我的自变量是因子变量或虚拟变量。

我有两个可以取值的自变量

  • 第 i 年到第 m 年,我的 YEAR 变量
  • 第 j 个月到第 n 个月,我的 MONTH 变量

问题是,每当我将模型作为摘要运行时,4 月的结果(月份索引 1)和 1998 年(年份的索引 1)不在结果中......如果我将 4 月份更改为“foo_bar”,8 月份将是失踪...

请帮忙!这让我很沮丧,我根本不知道如何寻找问题的解决方案。

4

1 回答 1

11

如果 R 为因子中的每个级别创建一个虚拟变量,则生成的变量集将是线性相关的(假设还有一个截距项)。因此,选择一个因子水平作为基线,并且没有为其生成虚拟变量。

为了说明这一点,让我们考虑一个玩具示例:

> data <- data.frame(y=c(2, 3, 5, 7, 11, 25), f=as.factor(c('a', 'a', 'b', 'b', 'c', 'c')))
> summary(lm(y ~ f, data))

Call:
lm(formula = y ~ f, data = data)

Residuals:
   1    2    3    4    5    6 
-0.5  0.5 -1.0  1.0 -7.0  7.0 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)    2.500      4.093   0.611   0.5845  
fb             3.500      5.788   0.605   0.5880  
fc            15.500      5.788   2.678   0.0752 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 5.788 on 3 degrees of freedom
Multiple R-squared: 0.7245, Adjusted R-squared: 0.5409 
F-statistic: 3.945 on 2 and 3 DF,  p-value: 0.1446 

如您所见,共有三个系数(与因子中的水平数相同)。这里,a已经被选为基线,所以(Intercept)指的是数据的子fabc(fbfc)的系数是基线截距与其他两个因子水平的截距之间的差异。因此,截距为b( 6) 2.500+3.500,截距为c( 19) 2.500+15.500

如果您不喜欢自动选择,您可以选择另一个水平作为基线:如何强制 R 在回归中使用指定的因子水平作为参考?

于 2013-03-05T19:04:32.863 回答