Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 什么';s scale()的值范围?_R_Scale - Fatal编程技术网

R 什么';s scale()的值范围?

R 什么';s scale()的值范围?,r,scale,R,Scale,我试图找出任何尺度的值之间的值的范围 我有一个47*2的数据帧,其值如下: 43109 43026 43857 42904 43753 43714 我在这个函数上运行scale()。我试图找出值的范围的界限。这是固定的,还是随输入而变化 我认为这些值应该在最接近的值之间进行标准化,对吗 对不起,我的问题是noob。scale()的文档让我感到困惑。默认情况下,scale减去平均值,然后除以标准偏差x。因此,没有固定的最小值/最大值。表示(只要数据的分布具有有限的平均值和有限的非零方差,1-

我试图找出任何尺度的值之间的值的范围

我有一个47*2的数据帧,其值如下:

43109 43026 
43857 42904 
43753 43714
我在这个函数上运行scale()。我试图找出值的范围的界限。这是固定的,还是随输入而变化

我认为这些值应该在最接近的值之间进行标准化,对吗


对不起,我的问题是noob。scale()的文档让我感到困惑。

默认情况下,
scale
减去平均值,然后除以标准偏差
x
。因此,没有固定的最小值/最大值。表示(只要数据的分布具有有限的平均值和有限的非零方差,
1-1/k^2
值的比例预计在
k
平均值的标准偏差范围内,因此对于缩放数据,
1-1/k^2
值的绝对值通常小于
k


由于您有大约100个值,除了1个(99%)之外,其他所有值都可能有绝对值您是指默认设置? 这将是:

scale(x, center = TRUE, scale = TRUE)
此处是文档中默认设置的相关信息(为您标记的重要零件,删除的不相关零件):

如果中心为,则通过从相应的列中减去列表示x的(省略NAs)来进行居中,如果中心为假,则不进行居中

scale的值确定如何执行列缩放(居中后)。如果scale为TRUE,则通过将x的(居中)列除以它们的标准偏差来进行缩放

这样你可以看得更清楚

# read in example data for you
aaa <- c(43109,43026, 43857,42904,43753, 43714)

# Get the results for scale
scale(aaa)
这基本上只是第一步

[,1]
[1,] -284.8333
[2,] -367.8333
[3,]  463.1667
[4,] -489.8333
[5,]  359.1667
[6,]  320.1667
attr(,"scaled:center")
[1] 43393.83    

这些是我选择的数据的第一步(居中)的结果(
431094302643857429044375343714
)。您可以看到,
43393.83
是列的平均值。行是各自的值减去列的平均值。例如,对于第一个值
43109-43393.83=-284.8333
,等等,对于其他行,使用默认参数

如果“缩放”为真,则通过将x的(居中)列除以它们的标准偏差(如果“居中”为真)来进行缩放

这意味着如果Y是矩阵中一列的向量,在
scale()
之后,该列将被
(Y-平均值(Y))/sd(Y)
替换。您可以验证这一点:

mat_scaled1 <- scale(mat)

colmeans <- colMeans(mat)
colsds <- matrixStats::colSds(mat)

mat_scaled2 <- matrix(NA_real_, nrow=20, ncol=20)
for(i in seq_len(ncol(mat))){
  mat_scaled2[,i] <- (mat[,i] - colmeans[i])/colsds[i]
}

all.equal(mat_scaled1, mat_scaled2,check.attributes = FALSE)
#> [1] TRUE
mat_scaled1
mat_scaled1 <- scale(mat)

colmeans <- colMeans(mat)
colsds <- matrixStats::colSds(mat)

mat_scaled2 <- matrix(NA_real_, nrow=20, ncol=20)
for(i in seq_len(ncol(mat))){
  mat_scaled2[,i] <- (mat[,i] - colmeans[i])/colsds[i]
}

all.equal(mat_scaled1, mat_scaled2,check.attributes = FALSE)
#> [1] TRUE
mat_scaled_max <- scale(mat, center = FALSE, scale = matrixStats::colMaxs(mat))

max(mat_scaled_max)
#> [1] 1