R中的NearZeroVar是什么?

问题描述 投票:0回答:1

我有一个相当庞大的数据集,我想排除方差相当低的列,这就是为什么我想使用NearZeroVar这个词组。然而,我确实有些不明白freqCut和uniqueCut的作用,以及它们是如何相互影响的。我已经阅读了R中的解释,但这并不能真正帮助我解决这个问题。如果有谁能给我解释一下,我将非常感激。

r statistics caret variance
1个回答
1
投票

如果一个变量的变化或变异非常小,它就像一个常数,对预测没有用。这就会有接近零的变异,因此函数的名字就叫 "近零Var"。

这两个参数并不互相影响,它们是为了照顾到常见的情况,从而产生接近零方差的变量。列子需要这两个标准都不合格才能被排除。

我们用一个例子来说明。

mat = cbind(1,rep(c(1,2),c(8,1)),rep(1:3,3),1:9)
mat
      [,1] [,2] [,3] [,4]
 [1,]    1    1    1    1
 [2,]    1    1    2    2
 [3,]    1    1    3    3
 [4,]    1    1    1    4
 [5,]    1    1    2    5
 [6,]    1    1    3    6
 [7,]    1    1    1    7
 [8,]    1    1    2    8
 [9,]    1    2    3    9

如果我们使用默认值,也就是955最常见到第二和唯一的值, 你可以看到只有第一列被排除。

nearZeroVar(mat)
[1] 1

让我们看看第2列,最常见到第2位的是81,它有2个唯一值,所以是29=0. 22. 所以要想把这个过滤掉 ,你需要改变这两个设置。

nearZeroVar(mat,freqCut=7/1,uniqueCut=30)
[1] 1 2

最后,你最不应该过滤掉的是第3列或第4列,所以第3列我们将过滤掉的时候,我们设置了一些乱七八糟的东西。

nearZeroVar(mat,freqCut=0.1,uniqueCut=50)
[1] 1 2 3

1
投票

我想你说的是在这个函数中出现了 mixOmics这指的是《公约》中的一个类似功能。caret 包。

该函数背后的想法是识别预测因子(在矩阵的列中),这些预测因子大部分是不变的(具有 "接近零方差"),例如,几乎只有0的值,只有低比例的非零值;这些预测因子将是无趣的。

为了定义你所说的 "接近零方差",作者使用了两个滤波器。

1)最常见的值(0,在这个例子中)与第二个最常见的值(1)的频率之比(freqRatio)

2)唯一数据点占数据点总数的百分比(percentUnique)

在上面的例子中,频率比是999,唯一值百分比是0.0001,都符合函数中的默认值。

你可以想象一下数据,你的离散值很少,比如500个0和500个1。您可能希望将其作为一个信息预测因子,并将其保留在 percentUnique 将会非常低(将满足这个过滤标准),但如果你是一个人,你就会发现,在你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你会发现,你的生活中,你的生活中,你会发现,你的生活中,你的生活中,你会发现,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中,你的生活中。freqRatio 会太低,无法标记该预测器。在光谱的另一端,你可以有500个0和500个不同的非零值,它们可能具有有用的预测特性,而且它们的特点是具有较高的 freqRatio但高 percentUnique 也没有标记)。

这两个参数让你可以灵活地划定你认为仍然有用的预测器的界限。

根据您的数据,您也可以使用 matrixStats::colVars (或 matrixStats::rowVars取决于您的数据结构),以获得单个预测因子的方差分布,然后基于此定义一个切点。当你绘制方差的密度分布时,你可能会看到一个很好的切点,例如在双峰分布中,或者只是选择一个你想使用的方差百分位作为切点。

© www.soinside.com 2019 - 2024. All rights reserved.