在R和Python中求峯度和偏度

一、 偏度

1.1 計算公式

        k-階中心矩爲:
uk=1ni=1n(xix)k u_k=\frac1n\sum^n_{i=1}{(x_i-\overline{x})^k}
        偏度公式:
g1=n2u3n1(n2)s3 g_1=\frac{n^2u_3}{(n-1)(n-2)s^3}

1.2 自定義函數以及調用

(一)R語言中實現

        編寫skew函數

skew <- function(x)
  {
  n <- length(x) #長度
  meanx <- mean(x) #均值
  s <-sd(x) #均方差
  u <- sum((x-meanx)^3 )/n #3階中心矩
  g1 <- (n^2*u)/((n-1)*(n-2)*s^3) #偏度
  return(g1) #輸出結果
}
 

        調用函數以及測試結果

setwd("E:/R")
#測試偏度函數
source('skew.R')
datastudent <- c(11,2,4,5,8,9,10)
skew(datastudent)

得到的結果爲: -0.366937

(二)Python中實現
        在Python有現成的函數,導入相應的庫之後使用skew函數即可求出偏度。

import pandas as pd
import numpy as np
da = [11,2,4,5,8,9,10]
das = pd.Series(da)
das.skew()

        得到的結果爲:-0.36693703063253225

二、峯度

2.1 計算公式

        峯度公式:
g2=n2(n+1)u4(n1)(n2)(n3)s43(n1)2(n2)(n3) g_2=\frac{n^2(n+1)u_4}{(n-1)(n-2)(n-3)s^4}-3\frac{(n-1)^2}{(n-2)(n-3)}

2.2 自定義函數以及調用

(一)R語言中實現

kurt <- function(y)
{
  s<- sd(y) #均方差
  n<- length(y)  #長度
  uk4 <- sum((y-mean(y))^4)/n #4階中心矩
  g2 <- (n^2*(n+1)*uk4)/((n-1)*(n-2)*(n-3)*s^4)-((3*(n-1)^2)/((n-2)*(n-3))) #峯度
  return(g2) #輸出結果
}

        調用函數以及測試結果

#測試峯度函數
source('kurt.R')
datastudent <- c(11,2,4,5,8,9,10)
kurt(datastudent)

        得到的結果爲:-1.490657

(二)Python中實現

import pandas as pd
import numpy as np
da = [11,2,4,5,8,9,10]
das = pd.Series(da)
das.kurt()

        得到的結果爲:-1.490657439446367

三、參考資料

[1].「量學堂-3」統計矩

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章