在R的tidyverse环境中使用lm函数及性别变量回归报错问题
解决方案
一、修正因子类型问题(核心报错根源)
你的gender变量被识别为因子(factor),而线性回归lm()要求因变量为数值型,因子无法完成残差平方、分位数计算等算术操作,因此触发报错。先调整变量类型:
# 查看gender变量类型 class(my_data_set$gender) # 若为因子,转换为数值型(先转字符避免因子水平顺序混乱) my_data_set$gender <- as.numeric(as.character(my_data_set$gender))
二、正确提取男性子集
你之前的subset()语法错误:要用==做比较判断,而非=(赋值符号);且gender编码为1代表男性,直接用数值匹配即可,无需male字符串:
# 用tidyverse的filter(符合你当前环境,推荐) male_total <- my_data_set %>% filter(gender == 1) # 或用base R的subset male_total <- subset(my_data_set, gender == 1)
三、运行男性群体的回归分析
根据你的需求,确保回归模型的因变量为数值型。示例如下:
# 示例:在男性子集中,以dem_disgusted为自变量,分析其对某结果变量(如投票意愿vote)的影响 male_reg <- lm(vote ~ dem_disgusted, data = male_total) summary(male_reg)
如果你的目标是分析性别与dem_disgusted的关联(全样本中男性vs女性),由于gender是二分类变量,更适合用逻辑回归替代线性回归:
gender_reg <- glm(gender ~ dem_disgusted, data = my_data_set, family = binomial(link = "logit")) summary(gender_reg)
四、验证子集提取正确性
运行以下代码确认男性子集的gender值均为1:
table(male_total$gender)
内容的提问来源于stack exchange,提问作者Irene
相关产品推荐
相关产品推荐

