R—用scale()函數進行變數標準化處理

R—用scale()函數進行變數標準化處理

6 人贊了文章

隨便舉個例子,比如鋼鐵直男小明要給他女朋友買禮物,他從某寶上搜集了10種禮物的價格、性價比和好評數信息,試圖從中分析出最佳選擇。

首先目前有三個維度的數據來衡量禮物,要進行對比的話,得把這三組數據組合成一個單一變數;其次是這三組數據完全不是同一量級,所以組合之前必須對其進行標準化處理。

標準化處理如上,用scale函數對price_num,useful_rate和popular_num進行處理,其原理是計算每組的平均值和標準差,各組平均值見attr(,」scaled:center」),標準差見attr(,」scaled:scale」);再將組內各個數值與其平均值的差,與其標準差的比值,作為該數值在組內的相對數值。

舉例如價格,303在組內的相對數值是0.0717732,122在組內的相對數值是-1.5937331等等,這樣就解決了各組量級不同無法直接對比的問題。

這個方法也可以用於各組的計量單位不同的情況,比如小明的擇偶標準有身高(米)、三圍(厘米)、體重(公斤)和飯量(碗)四個對比條件,且有多名單身美女的相關數據供小明分析選擇,那麼也可以利用上述方法。

繼續返回說scale函數,其實上述scale的標準寫法是z1<-scale(present[,2:4],center

= TRUE,scale=TRUE),只不過center平均值和scale標準差都是默認為true,即計算的時候默認包含這兩個參數。

那麼false的情況呢,首先看沒用標準差,只用平均值的,即不考慮各組數據的離散程度。

顯然沒辦法參考,再看只用標準差,不用平均值。這個情況比較複雜。

首先各位看官老爺會發現標準差變了,關於這個,在解釋之前我先吐槽一個事實,就是我在網上就沒有找到過相對正確的答案,要麼就是隨便解釋一下,還是漏洞一堆的那種,要麼就一帶而過,最可怕的是這類文章還真不少(此處拋開正規教材不談)。

這個原因是這樣的,首先標準差的計算公式是

此公式中,μ就是平均值,那現在我們不考慮平均值了,意味著μ=0,那麼此時計算的數值更接近於均方差的概念,只不過不是/N,而是/N-1

那麼這樣得出的最終結果大家可以看到,由於不考慮數據與均值之間的差值,只從均方差上反向考慮離散性,那麼整體結果會過於收斂,不是很利於我們拉開各個數據之間的距離。

解釋到此為止,繼續往下進行,由於這三個條件均是數越高越好,於是直接把每一個禮物的三個z值相加,找最大的就好了,或者用三者均值,也能表達同樣的意思。

不過如果小明的標準是價格越低越好、其他兩者越高越好,那也可以用Z_final=Z性價比+Z好評數—Z價格,總之這個倒是可以靈活應用。

以上。


推薦閱讀:

已知入職日期計算工齡:Excel函數不求人(21)(每日一技巧)
INDEX 函數 - Excel - Microsoft Office
VLOOKUP函數配合數組公式進階應用
簡單,但是一旦學會就很牛逼的Excel函數

TAG:R編程語言 | 函數 | 標準化 |