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函數