我正在尝试使用这个分类变量作为我的因变量构建一个多项logit回归模型。
在我的数据中,这两个二元变量表示一个人是否住在大都市(RESMETRO),以及一个人是否在大都市(JOBMETRO)工作。
当组合两个二进制变量时,有四种可能的位置结果。
我正在努力把这四种可能的组合变成一个变量:
(RESMETRO == TRUE & JOBMETRO == TRUE)
(RESMETRO == TRUE & JOBMETRO == FALSE)
(RESMETRO == FALSE & JOBMETRO == TRUE)
(RESMETRO == FALSE & JOBMETRO == FALSE)
我已经尝试创建一个新的变量,但我只能创建另一个二进制变量。
你是说这样吗?我模拟了您的数据,同时包括一个预测变量,并使用case_when
根据您的两个二进制文件制作ifelse语句,这在一列中创建了四个结果。
#### Simulate Data ####
resmetro <- rbinom(n=100,
size=1,
prob=.5)
jobmetro <- rbinom(n=100,
size=1,
prob=.5)
predictor <- rnorm(n=100,
mean=50,
sd=10)
tib <- tibble(resmetro,
jobmetro,
predictor)
您可以使用case_when
来创建新变量。
#### Use Case When ####
tib_2 <- tib %>%
mutate(metro_type = case_when(
(resmetro == 0) & (jobmetro == 0) ~ "No Metro",
(resmetro == 0) & (jobmetro == 1) ~ "Only Job",
(resmetro == 1) & (jobmetro == 0) ~ "Only Res",
(resmetro == 1) & (jobmetro == 1) ~ "Full Metro"
))
它看起来像这样:
# A tibble: 100 × 4
resmetro jobmetro predictor metro_type
<int> <int> <dbl> <chr>
1 1 1 58.3 Full Metro
2 0 0 54.2 No Metro
3 0 1 39.9 Only Job
4 1 1 54.1 Full Metro
5 0 0 31.5 No Metro
6 1 0 43.3 Only Res
7 0 0 30.1 No Metro
8 1 1 53.3 Full Metro
9 1 0 46.4 Only Res
10 0 1 51.3 Only Job
# … with 90 more rows
然后只适合模型:
fit <- nnet::multinom(metro_type ~ predictor, tib_2)
summary(fit)
所示:
Call:
nnet::multinom(formula = metro_type ~ predictor, data = tib_2)
Coefficients:
(Intercept) predictor
No Metro 0.05991963 0.004357301
Only Job -0.97875054 0.021891747
Only Res 0.39298053 -0.006230505
Std. Errors:
(Intercept) predictor
No Metro 1.416491 0.02797334
Only Job 1.493587 0.02901240
Only Res 1.467119 0.02925577
Residual Deviance: 275.1406
AIC: 287.1406