如何在R中用两个二元变量创建四取值分类变量用于多分类logit回归
合并二元变量为四分类变量的解决方案
下面针对不同统计分析工具,提供将RESMETRO和JOBMETRO两个二元变量组合为四分类变量的具体实现方法,生成的变量可直接用于多分类logit回归模型:
R语言实现
方法1:自动生成分类(快速便捷)
利用interaction函数直接组合两个变量,自动生成包含四种组合的分类变量:
# 生成组合分类变量 df$LOCATION <- interaction(df$RESMETRO, df$JOBMETRO, sep = "_") # 转换为因子类型(多分类回归要求因变量为因子) df$LOCATION <- as.factor(df$LOCATION)
方法2:手动定义类别名称(更直观)
通过case_when自定义每个组合对应的类别标签:
library(dplyr) df$LOCATION <- case_when( df$RESMETRO == TRUE & df$JOBMETRO == TRUE ~ "居住且工作在大都市区", df$RESMETRO == TRUE & df$JOBMETRO == FALSE ~ "居住在大都市区,工作在非大都市区", df$RESMETRO == FALSE & df$JOBMETRO == TRUE ~ "居住在非大都市区,工作在大都市区", df$RESMETRO == FALSE & df$JOBMETRO == FALSE ~ "居住且工作在非大都市区" ) # 转换为因子类型 df$LOCATION <- as.factor(df$LOCATION)
Stata实现
方法1:自动分组生成变量
使用egen group命令快速生成分类变量,再添加标签:
* 生成四分类变量 egen LOCATION = group(RESMETRO JOBMETRO) * 定义类别标签 label define loc_label 1 "居住且工作在大都市区" 2 "居住在大都市区,工作在非大都市区" 3 "居住在非大都市区,工作在大都市区" 4 "居住且工作在非大都市区" * 为变量绑定标签 label values LOCATION loc_label
方法2:手动赋值分类
通过条件判断逐个赋值:
* 初始化变量 gen LOCATION = . * 按组合赋值 replace LOCATION = 1 if RESMETRO == 1 & JOBMETRO == 1 replace LOCATION = 2 if RESMETRO == 1 & JOBMETRO == 0 replace LOCATION = 3 if RESMETRO == 0 & JOBMETRO == 1 replace LOCATION = 4 if RESMETRO == 0 & JOBMETRO == 0 * 添加类别标签 label define loc_label 1 "居住且工作在大都市区" 2 "居住在大都市区,工作在非大都市区" 3 "居住在非大都市区,工作在大都市区" 4 "居住且工作在非大都市区" label values LOCATION loc_label
Python(Pandas)实现
使用np.select根据条件生成自定义标签的分类变量:
import pandas as pd import numpy as np # 定义四种组合的条件 conditions = [ (df['RESMETRO'] == True) & (df['JOBMETRO'] == True), (df['RESMETRO'] == True) & (df['JOBMETRO'] == False), (df['RESMETRO'] == False) & (df['JOBMETRO'] == True), (df['RESMETRO'] == False) & (df['JOBMETRO'] == False) ] # 对应每个条件的类别标签 choices = [ "居住且工作在大都市区", "居住在大都市区,工作在非大都市区", "居住在非大都市区,工作在大都市区", "居住且工作在非大都市区" ] # 生成分类变量 df['LOCATION'] = np.select(conditions, choices) # 转换为分类类型 df['LOCATION'] = df['LOCATION'].astype('category')
内容的提问来源于stack exchange,提问作者Ricardo Gomez
相关产品推荐
相关产品推荐

