對於成功的數據分析而言,把握數據總體的性質是相當重要的,使用統計量來檢查數據特徵,主要是檢查數據的集中程度、離散程度和分佈形狀,經過這些統計量能夠識別數據集總體上的一些重要性質,對後續的數據分析,有很大的參考做用。app
用於描述數據的基本統計量主要分爲三類,分別是中心趨勢統計量、散佈程度統計量和分佈形狀統計量。函數
1,中心趨勢統計量spa
中心趨勢統計量是指表示位置的統計量,直觀地說,給定一個屬性,它的值大部分落在何處?code
(1)均值blog
均值(mean)又稱算數平均數,描述數據去指導額平均位置,數學表達式:均值 = ∑x / n;排序
有時,一組數據中的每一個值能夠和一個權重Wi相關聯,權重反映的的是依附值的重要性或出現的頻率,這種均值稱做加權均值 = ∑xw / n;文檔
儘管均值是描述數據集中心趨勢的最有用的統計量,可是,它並不是老是度量數據中心的最佳方法,這是由於,均值對極端值(離羣點)很敏感。爲了抵消少數極端值的影響,咱們可使用截尾均值,截尾均值是指丟棄極端值後的均值。get
(2)中位數數據分析
對於傾斜(非對稱)的數據,可以更好地描述數據中心的統計量是中位數(median),中位數是有序數據值的中間值,中位數可避免極端數據,表明這數據整體的中等狀況。例如:從小到大排序,總數是奇數,取中間的數,總數是偶數,取中間兩個數的平均數。數學
(3)衆數
衆數(mode)是變量中出現頻率最大的值,一般用於對定性數據肯定衆數,例如:用戶狀態(正常,欠費停機,申請停機,拆機、消號),該變量的衆數是「正常」,這種狀況是正常的。
2,表示數據離散程度的統計量
度量數據離散程度的統計量主要是標準差和四分位極差。
(1)標準差(或方差)
標準差用於度量數據分佈的離散程度,低標準差意味着數據觀測趨向於靠近均值,高標準差表示數據散步在一個大的值域中。
(2)四分位極差
極差(range),也稱做值域,是一組數據中的最大值和最小值的差, range = Max - Min。
百分位數(quantile)是把數據值按照從小到大的順序排列,把數據分紅100份。中位數是數據的中間位置上的數據,第一個四分位數記做Q1,是指第25個百分位上的數據,第三個四分位數記做(Q3),是指第75個百分位上的數據。
四分位極差(IQR)= Q3 - Q1 ,IQR是指第一個四分位和第三個四分位之間的距離,它給出被數據的中間一半所覆蓋的範圍,是表示數據離散程度的一個簡單度量。
3,表示分佈形狀的統計量
分佈形狀使用偏度係數和峯度係數來度量,
偏度是用於衡量數據分佈對稱性的統計量:經過對偏度係數的測量,咱們可以斷定數據分佈的不對稱程度以及方向。
峯度是用於衡量數據分佈陡峭或平滑的統計量,經過對峯度係數的測量,咱們可以斷定數據分佈相對於正態分佈而言是更陡峭仍是平緩。
(1)偏度係數
偏度係數反映數據分佈偏移中心位置的程度,記爲SK,則有 SK= (均值一中位數)/標準差。偏度係數是描述分佈偏離對稱性程度的一個特徵數。
正態分佈的偏度爲0,偏度<0稱分佈具備負偏離(左偏態),此時數據位於均值左邊的位於右邊的多,有個尾巴拖到左邊,說明左邊有極端值,偏度>0稱分佈具備正偏離(右偏態)。偏度接近如於0 ,可認爲分佈對稱。例如:知道分佈有可能在偏度上偏離正態分佈,則可用偏度來檢驗分佈的正態性。偏度的絕對值數值越大表示其分佈形態的偏斜程度越大。
(2)峯度係數
峯度係數(Kurtosis)用來度量數據在中心彙集程度,記爲K,描述整體中全部取值分佈形態陡緩程度的統計量(與正態分佈比較,,就是正態分佈的峯頂)。
例如:正態分佈的峯度係數值是3,K>3的峯度係數說明觀察量更集中,有比正態分佈更短的尾部;K<3的峯度係數說明觀測量不那麼集中,有比正態分佈更長的尾部。
峯度係數公式是:
示例,本文使用vcd包中的Arthritis數據集來演示如何進行統計量分析:
head(Arthritis) ID Treatment Sex Age Improved 57 Treated Male 27 Some 46 Treated Male 29 None 77 Treated Male 30 None 17 Treated Male 32 Marked 36 Treated Male 46 Marked 23 Treated Male 58 Marked
其中變量Improved和Sex是因子類型,ID和Age是數值類型。
集中趨勢經過均值、中位數和衆數來度量。
1,均值
均值是全部數據的平均值,使用mean()函數來計算向量的均值:
age.mean <- mean(Arthritis$Age)
有時,爲了反映在均值中不一樣成分所佔的權重,爲數據中的每一個元素Xi 賦予一個權重Wi,這樣就獲得了加權平均值,使用weighted.mean(x,w)來計算加權平均值。
weighted.mean(x,w)
x爲數據向量,w爲權重向量,x中每個元素都對應w中的一個權重值。
根據Sex來設置權重(weight),男性的Age的權重爲95%,女性的Age的權重爲105%,那麼獲得的加權平均值是:
age.wt <- ifelse(Arthritis$Sex=="Male",0.95,1.05)
age.wt.mean <- weighted.mean(Arthritis$Age,age.wt)
若是數據中存在極端值或者數據是偏態分佈的,那麼均值就不能很好地度量數據的集中趨勢,爲了消除少數極端值的影響,可使用截斷均值或者中位數來度量數據的集中趨勢。截斷均值是指去掉極端值以後的平均值。
2,中位數
中位數是把一組觀察值從小到大按順序排列,位於中間的那個數據。使用median(x)計算中位數。
age.median <- median(Arthritis$Age)
3,衆數
衆數是指數據集中出現最頻繁的值,衆數經常使用於定性數據。R沒有標準的內置函數來計算衆數,所以,咱們將建立一個用戶自定義函數來計算數據集的衆數。
該函數以向量做爲輸入,以衆數值做爲輸出。
getmode <- function(v) {
uniqv <- unique(v) uniqv[which.max(tabulate(match(v, uniqv)))] }
衡量離中趨勢的四個度量值:
查看Arthritis數據集的離中趨勢:
get_stat <- function(v){
v.mean <- mean(v) v.median <- median(v) v.range <- max(v)-min(v) v.sd <- sd(v) v.cv <- v.sd/v.mean v.iqr <- quantile(v,0.75) - quantile(v,0.25) d.stat <- data.frame(mean=v.mean,median=v.median,range=v.range,sd=v.sd,cv=v.cv,iqr=v.iqr, row.names = NULL) } mystat <- get_stat(Arthritis$Age)
基礎安裝包中沒有提供計算偏度和峯度的函數,用戶能夠自行添加:
mystats <- function(x, na.omit=FALSE){ if (na.omit) x <- x[!is.na(x)] m <- mean(x) n <- length(x) s <- sd(x) skew <- sum((x-m)^3/s^3)/n kurt <- sum((x-m)^4/s^4)/n - 3 return(c(n=n, mean=m, stdev=s, skew=skew, kurtosis=kurt)) } myvars <- c("mpg", "hp", "wt") sapply(mtcars[myvars], mystats)
爲你們推薦一篇文章:關於偏度與峯度的一些探索,引用該文中的峯度影響實驗的結論:
尾部或離羣點對峯度影響爲正向,且影響程度最大。而高几率區對峯度影響也爲正向,可是比較少;而山腰位置,中等機率區域則影響爲負向。
參考文檔: