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))
再试一次...
我有一个包含性别(女性=1,男性=0),种族(白人=1,非白人=0)等列的数据框。 Sex 和 Race 都有一些缺失值(都是因子变量)。下面是性别变量分布的截图。
但是,当我 运行 线性回归时,没有丢失任何值。 下面是回归输出。如您所见,出于某种原因,0 和 1 都出现在 Sex 和 race 中。这是否意味着 R 以“NA”为基线?我怎样才能修复代码,使 lm() 只接受完整的案例?
您可以使用 complete.cases
:
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))
再试一次...