You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言线性回归报错求助:NA/NaN/Inf in 'y'及类型转换警告

问题排查与解决

你的错误和警告指向两个核心问题:因类型转换引入NA,以及因除以0或非数值数据导致的NA/Inf值,以下是具体排查步骤和解决方案:

1. 定位MedEarnings的类型问题

警告NAs introduced by coercion说明将字符型数据转换为数值型时产生了NA,而线性回归的因变量MedEarnings是主要排查对象:

  • 运行以下代码检查数据类型和异常内容:
    # 查看MedEarnings的类型
    class(Ex2_2$MedEarnings)
    
    # 如果是字符型,测试转换为数值时哪些值变成NA
    med_earn_num <- as.numeric(Ex2_2$MedEarnings)
    # 输出转换失败的原始值
    unique(Ex2_2[is.na(med_earn_num), "MedEarnings"])
    
    ACS数据中常出现"--"、"NA"或空白字符串表示数据缺失/抑制,这些内容会导致转换失败生成NA,进而触发lm的错误。

解决方法:清理并转换MedEarnings

library(dplyr)
Ex2_2 <- Ex2_2 %>%
  mutate(MedEarnings = case_when(
    # 替换所有非数值标记为NA
    MedEarnings %in% c("--", "NA", "", "N/A") ~ NA_character_,
    TRUE ~ MedEarnings
  ) %>% as.numeric())

2. 检查百分比计算中的除以0问题

你创建的pct_*变量都依赖C01_001E作为分母,如果该变量存在0值,会生成Inf(无穷大),而lm不允许因变量或自变量中存在Inf:

  • 运行以下代码检查分母是否为0:
    # 统计C01_001E为0的行数
    sum(Ex2_2$C01_001E == 0)
    
    # 查看这些行的详细内容
    Ex2_2[Ex2_2$C01_001E == 0, ]
    

解决方法:处理分母为0的行

如果这些行没有分析价值,可以直接删除:

Ex2_2 <- Ex2_2 %>% filter(C01_001E != 0)

3. 全局验证数据完整性

最后运行以下代码,确认所有变量中已无NA/Inf:

# 统计每个变量的NA/Inf数量
sapply(Ex2_2, function(x) sum(is.na(x) | is.infinite(x)))

确保MedEarnings和所有自变量的计数为0后,再重新运行回归代码。


内容的提问来源于stack exchange,提问作者Luna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:05:07