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

使用R中马氏距离计算多元离群值时绘图报错咨询

解析R中mvoutlier包uni.plot报错及警告信息

你在使用mvoutlier包的uni.plot函数结合马氏距离检测多元离群值时,遇到了绘图失败的报错和协方差计算的警告,咱们逐个拆解这些信息的含义:

一、covMcd的警告信息详解

这个警告来自mvoutlier内部调用的covMcd函数(用于计算稳健协方差矩阵,是马氏距离计算的核心步骤),分为两部分:

  • 第一部分警告:The 112-th order statistic of the absolute deviation of variable 8 is zero.
    你处理后的数据集第8列(对应原Glass数据集的第9列,因为你排除了第10列的Type变量),它的绝对偏差排序后第112个值是0。直白点说,这列数据里有大量数值完全相同的观测,导致数据的离散程度极低,甚至出现了绝对偏差为0的情况,这会干扰稳健协方差的计算稳定性。
  • 第二部分警告:There are 176 observations... lying on the hyperplane...
    这进一步说明,有176个观测在第8列的取值完全一致(或者说相对于稳健均值的偏差为0),相当于这176个点都落在了一个超平面上(这里就是第8列等于某个固定值的平面)。这种情况会让协方差矩阵接近奇异矩阵(因为该变量的方差几乎为0),而马氏距离的计算需要协方差矩阵的逆矩阵,这就为后续计算埋下了隐患。

二、plot.window报错的根源

报错Error in plot.window(...) : 'ylim' needs finite values直接导致图像无法生成,本质原因就是上面的警告:
因为协方差矩阵计算异常,uni.plot在推导绘图所需的y轴范围时,得到了非有限值(比如NA、无穷大),系统无法设置有效的y轴边界,自然没法生成图像。

三、可行的解决思路

针对这个问题,你可以试试这些方法:

  • 检查并处理问题变量:先查看原Glass数据集第9列的情况,用table(Glass[,9])统计频数,var(Glass[,9])查看方差。如果这个变量对你的离群值检测没有帮助,可以直接删除它,再重新执行后续步骤。
  • 调整稳健协方差参数:covMcd函数的alpha参数控制了用于计算稳健协方差的样本比例,你可以尝试调整这个值(比如设为0.75),让算法聚焦于核心样本,避开那些导致奇异的点。
  • 换用手动计算+可视化:如果uni.plot暂时用不了,可以手动计算稳健马氏距离,再用基础绘图工具查看:
    # 计算稳健协方差(调整alpha参数)
    mcd_result <- covMcd(mydata.numeric.scaled, alpha = 0.75)
    # 计算稳健马氏距离
    mahal_dist <- mahalanobis(mydata.numeric.scaled, 
                              center = mcd_result$center, 
                              cov = mcd_result$cov)
    # 绘制马氏距离直方图,直观查看离群值
    hist(mahal_dist, breaks = 20, main = "稳健马氏距离分布", xlab = "马氏距离")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:42:58