数据分析:数据预处理--标准化方法优劣了解(二)

前言

上一篇数据分析:数据预处理--标准化初解释(一)是在R中初步实现计算各类标准化的方法,没进一步分析为何要标准的原因,这一次我们借用两个标准化方法极值标准化和Zscore标准化重新解析标准化的原因。

在构建模型过程中,通常使用多变量作为自变量去预测结果,多变量很多时候是具有多个不同的单位和量纲的。如果使用原始值去构建模型或做预测,这会导致每个变量对结果的贡献度不一致,因此常需要对自变量做 transform和standardization。

比如变量A的范围是0-1,000,000;变量B的范围是0-100,在没标准化前,它们对结果的贡献度是不同的。

常用标准化方法

  • 极值标准化: NormalizedValue_{x} = \frac{x-min_{x}}{max_{x}-min_{x}}
library(dplyr)
data(iris)
min_max_norm <- function(x){

  (x -min(x, na.rm = TRUE))/(max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
}

iris_norm <- lapply(iris[, 1:4], min_max_norm) %>% data.frame() %>% 
  mutate(Species=iris$Species)
head(iris_norm) 

Notes: 每个变量的范围在[0, 1]之间。极值标准化的缺点是会将数据拉向均值,对离群点不敏感,相反Zscore则考虑到极值的影响(通过除以标准差实现该效果)。

  • Z-score标准化:NormalizedValue_{x} = \frac{x - \mu}{\sigma}

scale函数可用于zscore标准化。

# single variable
iris$Sepal.Width <- (iris$Sepal.Width - mean(iris$Sepal.Width, na.rm = TRUE)) / sd(iris$Sepal.Width, na.rm = TRUE)

# multiple variable
iris_standardize <- as.data.frame(scale(iris[1:4]))

library(dplyr)
iris_new <- iris %>% mutate_each_(list(~scale(.) %>% as.vector),
                                  vars = c("Sepal.Width","Sepal.Length"))
head(iris_new)

Log Transformation

很多时候数据是偏斜分布的(左右两个分布是偏态分布,中间是正态分布)。通常使用log2转换使得其分布符合正态分布。

log(dat$variable)

最近看到一篇文献对数据做了log2transform+median normalization。


质谱数据(蛋白质组+代谢组)的intensity数值是整型且数目巨大,先使用log2transform一可以降低量纲影响二可以使得数据分布服从正态分布。


后面再做median normalization是排除log2transform后数据对预测结果仍然贡献不一致。

median_norm <- function(x){

  value <- as.numeric(x)
  x_scale <- (value - stats::median(value, na.rm = TRUE))/stats::IQR(value, na.rm = TRUE)
  
  return(x_scale)  
}

问题来了,缺失值该如何处理呢?

systemic information

sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: CentOS Linux 8 (Core)

Matrix products: default
BLAS/LAPACK: /disk/share/anaconda3/lib/libopenblasp-r0.3.10.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] PTXQC_1.0.12 tibble_3.1.5 dplyr_1.0.7 

loaded via a namespace (and not attached):
 [1] tinytex_0.32       tidyselect_1.1.1   xfun_0.24          bslib_0.2.5.1      reshape2_1.4.4     purrr_0.3.4       
 [7] colorspace_2.0-2   vctrs_0.3.8        generics_0.1.0     viridisLite_0.4.0  htmltools_0.5.1.1  yaml_2.2.1        
[13] utf8_1.2.1         rlang_0.4.11       jquerylib_0.1.4    pillar_1.6.4       glue_1.4.2         DBI_1.1.1         
[19] gdtools_0.2.2      RColorBrewer_1.1-2 lifecycle_1.0.0    plyr_1.8.6         stringr_1.4.0      munsell_0.5.0     
[25] gtable_0.3.0       rvest_0.3.6        kableExtra_1.3.4   evaluate_0.14      knitr_1.33         UpSetR_1.4.0      
[31] fansi_0.5.0        Rcpp_1.0.7         scales_1.1.1       webshot_0.5.2      jsonlite_1.7.2     systemfonts_0.3.2 
[37] gridExtra_2.3      ggplot2_3.3.5      digest_0.6.27      stringi_1.4.6      ade4_1.7-18        cowplot_1.1.0     
[43] grid_4.0.2         tools_4.0.2        magrittr_2.0.1     sass_0.4.0         ggdendro_0.1.22    R6P_0.2.2         
[49] seqinr_4.2-4       crayon_1.4.1       tidyr_1.1.4        pkgconfig_2.0.3    ellipsis_0.3.2     MASS_7.3-54       
[55] data.table_1.14.0  xml2_1.3.2         assertthat_0.2.1   rmarkdown_2.9      svglite_1.2.3.2    httr_1.4.2        
[61] rstudioapi_0.13    R6_2.5.0           compiler_4.0.2  

Reference

  1. Normalizing Data with R

  2. How to Normalize Data in R

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容