R语言线性回归剔除指定行后异常值仍存在问题求助
问题根本原因
- R语言不支持直接对字符型行名使用负号索引,负索引仅适用于数字下标,你原代码中的
NoNACountry[-c("Spain", "Luxembourg"),]无法正确删除对应国家的行,因此异常值仍然存在。 - 若索引后数据框自动降级为向量,会丢失行名、结构信息,也会导致后续拟合逻辑异常。
解决方法
按行名筛选数据时使用逻辑判断,同时加上drop = FALSE参数强制保留数据框结构:
# 筛选排除目标国家,drop=FALSE保证返回数据框、不丢失行名 clean_data <- NoNACountry[!rownames(NoNACountry) %in% c("Spain", "Luxembourg"), , drop = FALSE] # 用清洗后的数据拟合线性回归 fit <- lm(Robbery ~ Unlawful.acts.involving.controlled.drugs.or.precursors, data = clean_data) # 绘制诊断图 par(mfrow=c(2,2)) plot(fit)
参数说明
drop = FALSE放在方括号索引的第三个参数位置(行筛选、列筛选之后),作用是即使筛选后数据只剩单列/单行,也强制返回数据框格式,不会自动转换为向量,避免丢失行名和表结构。
你可以先运行rownames(clean_data)验证Spain、Luxembourg是否已被成功删除,确认筛选正确后再拟合模型即可。
内容的提问来源于stack exchange,提问作者iKcon
相关产品推荐
相关产品推荐

