为何设置R语言scale函数的center=FALSE会改变均值?
为什么
mean(scale(x, center=FALSE))得到0.9678482? 这是因为scale()函数在center=FALSE的默认缩放逻辑不是除以样本标准差,而是除以数据的均方根(Root Mean Square, RMS):
- 当
center=FALSE且scale=TRUE(默认值)时,scale(x)会把每个元素除以数据的均方根,公式为:x / sqrt(mean(x^2)) - 因此
mean(scale(x, center=FALSE))就等于mean(x) / sqrt(mean(x^2))
用代码验证一下:
set.seed(1) x <- rnorm(30, 10, 2) # 计算x的均方根 rms_x <- sqrt(mean(x^2)) # 计算mean(x)除以均方根 mean(x) / rms_x # [1] 0.9678482
这个结果和mean(scale(x, center=FALSE))的输出完全一致。
如果想让缩放基于样本标准差,需要手动指定scale参数为样本标准差:
mean(scale(x, center=FALSE, scale=sd(x))) # 结果约为 5.097,等于 mean(x)/sd(x)
内容的提问来源于stack exchange,提问作者Vallo Varik
相关产品推荐
相关产品推荐

