R 中的 NearZeroVar 是什么?

What does NearZeroVar in R?

我有相当大的数据集,我想在其中排除方差相当低的列,这就是为什么我想使用短语 NearZeroVar。但是,我确实很难理解 freqCut 和 uniqueCut 的作用以及它们如何相互影响。我已经阅读了 R 中的解释,但这并不能真正帮助我解决这个问题。 如果有人能向我解释一下,我将不胜感激!

我假设您是在谈论 mixOmics 中存在的函数,它指的是 caret 包中的类似函数。

该函数背后的想法是识别大部分不变(具有 "near zero variance")的预测变量(在矩阵的列中),例如几乎只有 0 值,只有很少一部分非零值;那些作为预测指标是无趣的。

他们的无趣预测变量示例是 1000 个值,其中 999 个是 0,1 个是 1。 为了定义您所说的 "near zero variance",作者使用了两个过滤器:

1) 最常见值(本例中为 0)与第二常见值 (1) 的频率之比 (freqRatio)

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

上例中,频率比为999,唯一值百分比为0.0001,均满足函数中使用的默认值。

您可以想象数据中几乎没有离散值,例如500 个 0 和 500 个 1。您可能希望将其保留为信息预测变量,并且 percentUnique 会非常低(将满足此过滤条件),但 freqRatio 太低而无法标记该预测变量。 在光谱的另一端,您可能有 500 个 0 和 500 个不同的非零值,它们可能具有有用的预测属性,并且它们的特征是高 freqRatio,但高 percentUnique(也没有标记)。

这两个参数让您可以灵活地划定您认为仍然有用的预测指标。

根据您的数据,您还可以使用 matrixStats::colVars(或 matrixStats::rowVars,具体取决于您的数据结构)来获取各个预测变量的方差分布,然后定义截止值基于此。当您绘制方差的密度分布时,您可能会看到一个很好的分割点,例如在双峰分布中,或者只选择要用作截止值的方差百分位数。

如果一个变量的变化或变化很小,它就像一个常量,对预测没有用。这将具有接近于零的方差,因此函数的名称。

这两个参数不会相互影响,它们用于处理导致方差接近零的变量的常见情况。该列需要不符合两个条件才能被排除。

举个例子:

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

如果我们使用默认值,对于最常见的第二个值和唯一值要求 95/5,您可以看到只有第一列被删除:

nearZeroVar(mat)
[1] 1

让我们看看第 2 列,最常见到第二多的是 8/1,它有 2 个唯一值,因此 2/9 = 0.22。所以要过滤掉这个,你需要更改两个设置:

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

最后,您最有可能不应该过滤掉的是第 3 列或第 4 列,因此当我们设置一些废话时,我们将过滤掉该列:

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