将国家/地区固定效果引入glm()并设置“参考国家/地区”

时间:2018-10-26 20:32:39

标签: r glm

我需要在R中原本简单的glm()中引入固定效果(在这种情况下为国家假人)。

我的数据中的国家固定效应变量如下:

country   country_a   country_b   country_c   y   x   ...
1         1           0           0
1         1           0           0
2         0           1           1
2         0           1           1

这是技术上实现的正确方法吗?见下文... glm(y ~ x + country_a + country_b + country_c, family=binomial(link="logit"))

如果是这样,我如何将特定国家/地区设置为参考类别?我知道我需要放弃一个国家,因为如果没有的话,我将拥有完美的共线性。通常,这将是我的参考国。但是,如果其他国家也仅仅由于它们仅在数据中出现几次并因此从分析中消失(逐项删除),而也“不适用”怎么办?如果我决定放弃,country_a仍会是我的参考类别吗?

还是我必须首先使用Country变量(左列),并且必须以某种方式告诉glm()这是一个无序的因素?如果是这样,我该怎么办?

2 个答案:

答案 0 :(得分:3)

数据如下:

> d
  country         y         x
1       1 0.9610213 0.2586365
2       1 0.8561303 0.5972043
3       2 0.5463802 0.6412527
4       2 0.4703876 0.1126319

您可以在glm调用中转换为因数:

> glm(y~factor(country),data=d)

Call:  glm(formula = y ~ factor(country), data = d)

Coefficients:
     (Intercept)  factor(country)2  
          0.9086           -0.4002  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      0.1685 
Residual Deviance: 0.008388     AIC: -7.317

或创建一个新列,使其明确显示其非数字值:

> d$CountryCode = paste0("Country",d$country)
> d
  country         y         x CountryCode
1       1 0.9610213 0.2586365    Country1
2       1 0.8561303 0.5972043    Country1
3       2 0.5463802 0.6412527    Country2
4       2 0.4703876 0.1126319    Country2
> glm(y~CountryCode,data=d)

Call:  glm(formula = y ~ CountryCode, data = d)

Coefficients:
        (Intercept)  CountryCodeCountry2  
             0.9086              -0.4002  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      0.1685 
Residual Deviance: 0.008388     AIC: -7.317

系数表中缺少的因子水平是基线水平-在这种情况下为Country1

答案 1 :(得分:1)

由于R对分类变量的默认(处理)对比使用第一因子水平作为基线/截距,因此选择基线水平的最简单方法是使用relevel()函数将指定水平设为第一水平(然后将所有其他按钮向下移动一个位置)。遵循@spacedman的回答,即时进行:

glm(y~relevel(factor(country),"7"), data=d)

或:

d$CountryCode = relevel(factor(paste0("Country",d$country)), "Country7")