使用nearZeroVar或在R中的列上应用唯一长度之间的区别

时间:2013-04-30 05:54:33

标签: r

我有一个矩阵数的观测数,矩阵数和我想删除所有零列,然后我尝试使用nearZeroVar(数据集)。

removeColumns <-nearZeroVar(datset) # remove zeros
testT <- datset[, -removeColumns]

但是还有另一种方式

removeZeros <- apply(dataset, 2, function(x) length(unique(x)) == 1)

dataset<- datset[, !removeZeros];

它在小向量中给出了相同的结果,

    mdat <- matrix(c(1,2,3,0,4,5, 0,0,0,0, 0,0,3,0,0,0,0,0,0,0,1,2,3,0), nrow = 6, ncol = 4, byrow = TRUE)
"
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    0
[2,]    4    5    0    0
[3,]    0    0    0    0
[4,]    3    0    0    0
[5,]    0    0    0    0
[6,]    1    2    3    0
"
cols_mdat <-nearZeroVar(mdat)
"4"

mdat_remove <-mdat[,-cols_mdat]


"[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    0
[3,]    0    0    0
[4,]    3    0    0
[5,]    0    0    0
[6,]    1    2    3
"

mdatzv <- apply(mdat, 2, function(x) length(unique(x)) == 1);
mdat_nzv <- mdat[, !mdatzv];
"
 [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    0
[3,]    0    0    0
[4,]    3    0    0
[5,]    0    0    0
[6,]    1    2    3
"

但是在我的数据集中,有785个特征和大约4200个观测值,它会返回不同数量的特征。

请您告诉我这两种方式有什么区别?

1 个答案:

答案 0 :(得分:1)

第二个示例只是删除该列中有一个唯一值的列。考虑一下:

mdat <- matrix(c(100,100,100,100,100,100, 0,0,0,0, 0,0,3,0,0,0,0,0,0,0,1,2,3,0), nrow = 6, ncol = 4, byrow = FALSE)
mdat
#    [,1] [,2] [,3] [,4]
#[1,]  100    0    3    0
#[2,]  100    0    0    0
#[3,]  100    0    0    1
#[4,]  100    0    0    2
#[5,]  100    0    0    3
#[6,]  100    0    0    0


mdat[ , !apply(mdat, 2, function(x) length(unique(x)) == 1) ]
#    [,1] [,2]
#[1,]    3    0
#[2,]    0    0
#[3,]    0    1
#[4,]    0    2
#[5,]    0    3
#[6,]    0    0

如果值接近于零并不重要,如果列中只有一个唯一值,则逻辑比较==将返回TRUE!运算符意味着我们排除

另一方面,

nearZeroVar会删除具有唯一值的列,但也会删除相对于观察总数的唯一值非常少的列,以及最常见值与下一个最常见值的比率为大(即高度过度分散)。现在考虑相同的数据,但是如果我们将最常见的值与下一个最常见的值设置得足够低,并且将样本总数中的唯一值百分比的截止值设置得足够高,那么这些列也将被选中:

nearZeroVar( mdat , freqCut = 4 , uniqueCut = 40 ) 
#[1] 1 2 3

第1栏和第1栏3被选中,因为它们包含1个值。第二列被选中,因为大多数列值(0)与下一个最常见(3)的比率为5:1,大于4的截止值,以及数字的百分比列中的唯一值(2个值,03)超过观察总数(6行)2/6*100为33%,其为&lt;我们为唯一剪切指定的40%