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
我有相当大的数据集,我想在其中排除方差相当低的列,这就是为什么我想使用短语 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