我需要在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()
这是一个无序的因素?如果是这样,我该怎么办?
答案 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")