R 中的 lm() 中未排除 NA 值

NA value not excluded in lm() in R

我有一个包含性别(女性=1,男性=0),种族(白人=1,非白人=0)等列的数据框。 Sex 和 Race 都有一些缺失值(都是因子变量)。下面是性别变量分布的截图。

但是,当我 运行 线性回归时,没有丢失任何值。 下面是回归输出。如您所见,出于某种原因,0 和 1 都出现在 Sex 和 race 中。这是否意味着 R 以“NA”为基线?我怎样才能修复代码,使 lm() 只接受完整的案例?

您可以使用 complete.cases:

删除所有带有 NA 的行
all_nodes_group_merged.adj = all_nodes_group_merged[complete.cases(all_nodes_group_merged), ]

顺便说一下,我建议将因子变量包装为数字:

lm(formula = Life_Satisfaction_6bp ~ as.numeric(Sex) + as.numeric(race_white) + item_count, data = all_nodes_group_merged.adj)

回归中的因子变量以特殊方式工作,请参阅:

编辑

你也可以把它转换成数字,试试看是否有意义:

all_nodes_group_merged.adj$Sex_num = as.numeric(levels(all_nodes_group_merged.adj$Sex))[all_nodes_group_merged.adj$Sex]
all_nodes_group_merged.adj$race_white_num = as.numeric(levels(all_nodes_group_merged.adj$race_white))[all_nodes_group_merged.adj$race_white]

lm(formula = Life_Satisfaction_6bp ~ Sex_num + race_white_num + item_count, data = all_nodes_group_merged.adj)

我猜您的“不可用”数据被编码为 空字符串 ("") 而不是 NA 值。 R 仅自动删除 NA 个值。你可以试试

mydata$Sex[mydata$Sex == ""] <- NA

mydata$Sex <- factor(mydata$Sex, levels = c(0,1))

再试一次...