将国家固定效应引入 glm() 并设置 "reference country"
Introduce country fixed effects to glm() and set "reference country"
我需要在 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"))
如果是这样,我如何将特定国家/地区设置为参考类别?我知道我需要放弃一个国家,因为如果我不这样做,我就会有完美的共线性。通常这将是我的参考国家。但是,如果其他国家 "go NA" 也仅仅是因为它们在数据中只出现了几次,因此从分析中消失了(列表删除)怎么办?如果我决定放弃,country_a
仍然是我的参考类别吗?
或者我是否必须首先使用 Country
变量(左列)并且必须以某种方式告诉 glm()
这是一个无序的因素?如果是这样,我该怎么做?
数据如下:
> 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
系数 table 中的缺失因子水平是基线水平 - 在本例中 Country1
。
由于 R 对分类变量的默认(处理)对比使用第一个因子水平作为 baseline/intercept,选择基线水平的最简单方法是使用 relevel()
函数进行指定调平第一层(并将所有其他层向下移动一个位置)。按照@spacedman 的回答,即时进行:
glm(y~relevel(factor(country),"7"), data=d)
或:
d$CountryCode = relevel(factor(paste0("Country",d$country)), "Country7")
我需要在 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"))
如果是这样,我如何将特定国家/地区设置为参考类别?我知道我需要放弃一个国家,因为如果我不这样做,我就会有完美的共线性。通常这将是我的参考国家。但是,如果其他国家 "go NA" 也仅仅是因为它们在数据中只出现了几次,因此从分析中消失了(列表删除)怎么办?如果我决定放弃,country_a
仍然是我的参考类别吗?
或者我是否必须首先使用 Country
变量(左列)并且必须以某种方式告诉 glm()
这是一个无序的因素?如果是这样,我该怎么做?
数据如下:
> 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
系数 table 中的缺失因子水平是基线水平 - 在本例中 Country1
。
由于 R 对分类变量的默认(处理)对比使用第一个因子水平作为 baseline/intercept,选择基线水平的最简单方法是使用 relevel()
函数进行指定调平第一层(并将所有其他层向下移动一个位置)。按照@spacedman 的回答,即时进行:
glm(y~relevel(factor(country),"7"), data=d)
或:
d$CountryCode = relevel(factor(paste0("Country",d$country)), "Country7")