【问题标题】:handling a scale()-d dataset in r在 r 中处理 scale()-d 数据集
【发布时间】:2021-03-03 03:40:44
【问题描述】:

提前为这个令人难以置信的愚蠢问题道歉,但是在缩放数据集之后,我对列总和的行为方式有点困惑。有人能快速回答我吗?

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() 也会发生类似的情况,其中对整列进行平均会给我一个疯狂的值,但删除一行不会。今天早上我感觉非常愚蠢,需要帮助来解决这个问题。

【问题讨论】:

    标签: r statistics scale data-manipulation


    【解决方案1】:

    了解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-03-02 创建

    【讨论】:

    • 这确实解释了它,感谢您抽出宝贵的时间!
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多