为什么在对R中的数据进行标准化时,仍然会得到大于1的数字?

use*_*363 -4 r

我想标准化R中的数据(平均零和标准差1.0),我使用scale()函数.我的所有数字都大于零.但是当我将它们标准化时,我仍然有数字; 100,......更奇怪的是,当我绘制密度时,我的密度也为负值!!

这是我的数据的子集:

Tr[1:10,]
 [1] 1.287161e+01 1.300534e+00 1.140467e+00 7.958636e-01 4.886365e-01

data<-scale(Tr)
Run Code Online (Sandbox Code Playgroud)

有人会帮我解决这个问题吗?

jlh*_*ard 5

评论太久了:

我不明白为什么你会感到惊讶.您使用它的方式,scale(...)减去每个值的均值,并将结果除以标准差.因此,任何小于平均值的值都将缩放为负数,并且任何超过平均值100个标准差的值将缩放到> 100(或<-100).你可能有一些与mean/sd相比非常大的异常值.

set.seed(1)
X <- rpois(1000,5)
Z <- scale(X)
par(mfrow=c(1,2))
hist(X)
hist(Z)
Run Code Online (Sandbox Code Playgroud)

  • 这样做:`X < - c(rep(1,100000000),10000000000000000000000000); Z < - ((X - mean(X))/ sd(X)); 最大值(Z)` (2认同)