如何解决在 r 中处理 scale()-d 数据集
提前为这个非常愚蠢的问题道歉,但在缩放数据集后,我对列总和的行为方式感到有些困惑。有人能快速回答我吗?
data("USArrests")
df <- USArrests
df <- scale(df)
sum(df[,1])
# -3.833739e-15
sum(df[1:50,1])
# -3.833739e-15
sum(df[1:49,1])
# 0.2268391
sum(df[50,1])
# -0.2268391
sum(df[2:50,1])
# -1.242564
sum(df[1,1])
# 1.242564
与 mean() 类似,其中对整列进行平均会给我一个疯狂的值,但删除一行不会。今天早上我感觉非常愚蠢,需要帮助才能解决这个问题。
解决方法
了解 scale()
对您的数据做了什么很重要。我从 https://stackoverflow.com/a/20256272/11167644 中提取了一个例子来解释:
set.seed(1)
x <- runif(6)
x
#> [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819 0.8983897
(x - mean(x)) / sd(x)
#> [1] -0.8717643 -0.5287394 0.1170895 1.1960620 -1.0771210 1.1644732
scale(x)[1:6]
#> [1] -0.8717643 -0.5287394 0.1170895 1.1960620 -1.0771210 1.1644732
您的数据正在缩放并以零为中心 - 我们可以通过查看未缩放和缩放数据集的 summary()
来进一步验证这一点:
data("USArrests")
df <- USArrests
summary(df)
#> Murder Assault UrbanPop Rape
#> Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
#> 1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
#> Median : 7.250 Median :159.0 Median :66.00 Median :20.10
#> Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
#> 3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
#> Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
summary(scale(df))
#> Murder Assault UrbanPop Rape
#> Min. :-1.6044 Min. :-1.5090 Min. :-2.31714 Min. :-1.4874
#> 1st Qu.:-0.8525 1st Qu.:-0.7411 1st Qu.:-0.76271 1st Qu.:-0.6574
#> Median :-0.1235 Median :-0.1411 Median : 0.03178 Median :-0.1209
#> Mean : 0.0000 Mean : 0.0000 Mean : 0.00000 Mean : 0.0000
#> 3rd Qu.: 0.7949 3rd Qu.: 0.9388 3rd Qu.: 0.84354 3rd Qu.: 0.5277
#> Max. : 2.2069 Max. : 1.9948 Max. : 1.75892 Max. : 2.6444
再次注意零的平均值 - 这解释了为什么数据总和为零。
最后,我们可以通过一些直方图直观地查看缩放数据与未缩放数据的情况:
library(tidyverse)
df %>%
select(Murder) %>%
mutate(Scaled_Murder = scale(Murder)) %>%
pivot_longer(everything()) %>%
ggplot(aes(value,fill = name)) +
geom_histogram(alpha = 0.75,position = "identity",bins = 20)
由 reprex package (v0.3.0) 于 2021 年 3 月 2 日创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。