• 分布形态的度量-偏度系数与峰度系数的探讨


    分布形态的度量-偏度系数与峰度系数的探讨

    集中趋势和离散程度是数据分布的两个重要特征,但要全面了解数据分布的特点,还应掌握数据分布的形态。
    描述数据分布形态的度量有偏度系数和峰度系数,
    其中偏度系数描述数据的对称性,峰度系数描述与正态分布的偏离程度。

    1.偏度系数

    偏度系数是刻划数据的对称性指标。关于均值对称的数据其偏度系数为0,右侧更分散的数据偏度系数为正,左侧更分散的数据偏度系数为负。
    下图给出了偏度系数为正、零和负的情况。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 偏度(Skewnes)也称为偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。在R软件中的计算公式如下:
      S k e w n e s s = M 3 σ 3 = 1 n ∑ i = 1 n ( x i − x ˉ ) 3 σ 3 Skewness=\frac{M_3}{\sigma^{3}}=\frac{\frac{1}{n}\sum^{n}_{i=1}(x_i-\bar{x})^3}{\sigma^{3}} Skewness=σ3M3=σ3n1i=1n(xixˉ)3

    偏度的作用:

    • 对于正态分布,其偏度为0,两侧尾部长度对称。此时:众数=中位数=平均数。
    • 若分布的偏度小于0,则说明该分布具有负偏离,即左偏态,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长。分布左偏时:众数>中位数>平均数。
    • 若分布的偏度大于0,即右偏态,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长。分布右偏时:平均数>中位数>众数。
    # 例1:为研究新生儿出生时的体重,在某妇产医院随机地选取了100个新生儿,其重量如表(数据存放在birth.csv文件中)。计算新生儿体重数据的偏度系数.
    birth<-read.table('data/birth.csv',header=TRUE,sep=',')
    head(birth,n=5)
    
    • 1
    • 2
    • 3
    A data.frame: 5 × 1
    x
    11740
    23540
    32760
    43240
    53960
    自己编写计算偏度系数的函数:
    skew<-function(x){
        n<-length(x)
        ((1/n)*sum((x-mean(x))^3))/(sd(x)^3)
    }
    
    • 1
    • 2
    • 3
    • 4
    skew(birth$x)    #偏度<0,说明数据是左侧更分散,属于左偏分布
    
    • 1

    -0.636551244523803

    使用e1071包里的偏度计算函数:

    library(e1071)
    e1071::skewness(birth$x)    #计算偏度系数
    
    • 1
    • 2
    Warning message:
    "程辑包'e1071'是用R版本4.1.3 来建造的"
    
    • 1
    • 2

    -0.636551244523803

    使用timeDate包里的偏度计算函数:

    timeDate::skewness(birth$x)    #计算偏度系数
    
    • 1

    -0.636551244523803

    绘制直方图:

    hist(birth$x)
    
    • 1

    在这里插入图片描述

    使用ggplot2包绘制直方图和密度曲线:

    library(ggplot2)
    
    #获取直方图相关参数
    length_hist_results <- hist(birth$x,plot = FALSE)
    #绘制直方图
    ggplot(data = birth, mapping = aes(x)) +
        geom_histogram(
        aes(y = ..density..),
        breaks = length_hist_results$breaks,
        color = "darkgray",
        fill = "white"
        ) +
        #绘制概率密度曲线
        geom_density(colour = "blue")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    Warning message:
    "程辑包'ggplot2'是用R版本4.1.3 来建造的"
    
    • 1
    • 2

    在这里插入图片描述

    2.峰度系数

    峰度系数反映分布峰的尖峭程度的重要指标.当峰度系数大于0时,两侧极端数据较多;当峰度系数小于0时,两侧极端数据较少。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    峰度(kurtosis),又称峰态系数,是表征概率密度分布曲线在平均值处峰值高低的指标。直观地说,这个指标反映地是峰部的尖度。该指标的计算是相对于正态分布而言的(正态分布的峰度为0),如果峰度大于0,则说明峰的形状比较尖,比正态分布要陡峭。在统计学中,**峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的。**对于具有n个值的样本,在R软件中的计算公式如下:
    K u r t o s i s = M 4 σ 4 − 3 = 1 n ∑ i = 1 n ( x i − x ˉ ) 4 σ 4 − 3 Kurtosis=\frac{M_4}{\sigma^{4}}-3=\frac{\frac{1}{n}\sum^{n}_{i=1}(x_i-\bar{x})^4}{\sigma^{4}}-3 Kurtosis=σ4M43=σ4n1i=1n(xixˉ)43

    # 自己编写的计算峰度系数的函数:
    kurt<-function(x){
        n<-length(x)
        ((1/n)*sum((x-mean(x))^4))/(sd(x)^4)-3
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    例1:为研究新生儿出生时的体重,在某妇产医院随机地选取了100个新生儿,其重量如表(数据存放在birth.csv文件中)。计算新生儿体重数据的峰度系数。
    在这里插入图片描述

    # 例1:为研究新生儿出生时的体重,在某妇产医院随机地选取了100个新生儿,其重量如表(数据存放在birth.csv文件中)。计算新生儿体重数据的峰度系数.
    birth<-read.table('data/birth.csv',header=TRUE,sep=',')
    kurt(birth$x)
    
    • 1
    • 2
    • 3

    1.29416169656776

    使用e1071包里的峰度计算函数:

    e1071::kurtosis(birth$x)  #计算峰度系数
    
    • 1

    1.29416169656776

    使用timeDate包里的峰度计算函数:

    timeDate::kurtosis(birth$x) #计算峰度系数
    
    • 1

    1.29416169656776

    教材例子验证

    #代码3-5 通过psych包的describe()函数计算例3-2数据的描述性统计数
    example3_2 <-read.table("swtj/Example3_2.csv", header=TRUE, sep=",")
    library(psych)
    psych::describe(example3_2)
    
    • 1
    • 2
    • 3
    • 4

    A psych: 2 × 13
    varsnmeansdmediantrimmedmadminmaxrangeskewkurtosisse
    x110 4.976 4.039508 4.165 4.80625 4.07715 0.3 11.01 10.71 0.2946624-1.765365 1.277405
    y210109.00061.948007118.500110.6250076.3539025.0180.00155.00-0.2193784-1.79666519.589680
    ```R e1071::skewness(example3_2$x) #计算偏度系数 ```

    0.294662406293528

    e1071::skewness(example3_2$y)    #计算偏度系数
    
    • 1

    -0.219378443538772

    e1071::kurtosis(example3_2$x)  #计算峰度系数
    
    • 1

    -1.76536531506354

    e1071::kurtosis(example3_2$y)  #计算峰度系数
    
    • 1

    -1.79666514648305

    用自编函数计算,结果与R包函数计算结果完全相同:

    skew(example3_2$x)  #用自编函数计算偏度系数
    
    • 1

    0.294662406293528

    skew(example3_2$y)  #用自编函数计算偏度系数
    
    • 1

    -0.219378443538772

    kurt(example3_2$x)  #用自编函数计算峰度系数
    
    • 1

    -1.76536531506354

    kurt(example3_2$y)  #用自编函数计算峰度系数
    
    • 1

    -1.79666514648305

    参考文献:

    【1】薛毅,陈立萍.[M].R语言在统计中的应用.北京:中国工信出版集团,人民邮电出版社,2017.04.

    【2】杨泽峰.[M].R语言在生物统计中的应用.南京:南京大学出版社,2022.02

  • 相关阅读:
    6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
    Chapter 8 Intermediate Shell Tools II
    双位置继电器JDP-1440/DC110V
    JavaWeb学习之EL表达式
    民安智库(第三方满意度调研公司)如何做物业满意度调查
    EMC RS485接口EMC电路设计方案
    Docker-consul容器服务更新与发现
    14.Redis之JAVASpring客户端
    宝宝洗衣机买什么样的好?诚意推荐四款实力超群的婴儿洗衣机
    【Sentinel】核心API-Entry与Context
  • 原文地址:https://blog.csdn.net/baidu/article/details/127717319