如何使用2个二进制变量在R中创建一个分类变量,该变量取4个可能值中的1个(2个二进制变量的组合)? &



我正在尝试使用这个分类变量作为我的因变量构建一个多项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

相关内容

  • 没有找到相关文章

最新更新