Введите фиксированные для страны эффекты для glm () и установите «исходную страну» - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно ввести фиксированные эффекты (в данном случае: страновые манекены) в простой простой glm() в R.

Страновые переменные эффектов в моих данных выглядят так:

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 голосов
/ 27 октября 2018

Поскольку контрасты по умолчанию (обработка) R для категориальных переменных используют первый уровень фактора в качестве базовой линии / пересечения, самый простой способ выбрать базовый уровень - это использовать функцию relevel(), чтобы сделать указанный уровень первым уровнем (ипереместить все остальные вниз на одну позицию).После ответа @ spacedman, сделать это на лету:

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

или:

d$CountryCode = relevel(factor(paste0("Country",d$country)), "Country7")
0 голосов
/ 27 октября 2018

С такими данными, как:

> 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.

...