数据探查

采集到原始数据后,常常用图表或统计量探查数据的特征,并对有问题或不满足统计要求的数据进行预处理。[大谦Excel,dqexcel点com]

描述性统计

在采集到大量的样本数据以后,常常需要用一些统计量来描述数据的集中程度和离散程度,并通过这些指标对数据的总体特征进行归纳。常见描述性统计量如表5-1所示,假设样本数据为。注意,”VBA函数”一列为计算对应统计量的工作表函数,表中只给出函数名称,完整的写法为:app.api.WorksheetFunction.FunctionName,其中FunctionName为函数名,如Min, Max, Average等。

表5-1 常见描述性统计量

分类 统计量 说 明 工作表函数
集中趋势 计算平均值 Average
集中趋势 中值 50%分位数 Median
集中趋势 几何平均值 GeoMean
集中趋势 调和平均值 HarMean
集中趋势 截尾均值 对样本数据进行排序以后,去掉两端的部分极值,然后对剩下的数据求算术平均值 TrimMean
集中趋势 分位数 对于升序排列的数据,处于N%处的数 Percentile
离中趋势 极差 最大值减去最小值
离中趋势 内四分极差 75%分位数减去25%分位数
离中趋势 方差 ,其中 Var
离中趋势 标准差 StDev

图5-1中用一组数据绘制散点图,并在图中标注各种统计量对应的位置。实际应用中,算术平均值容易受异常值的影响,中值和截尾均值则更加稳健。

Document Image

图5-1 一元数据的描述性统计

频数分析和直方图

对一元数据进行频数分析时,首先将数据从小到大进行排列。根据最小值和最大值得到极差,然后将极差等间隔分割成指定个数的区间,比如10个区间。这样的区间常称为分箱。每个分箱数据的下边界和上边界是可以计算出来的。然后将各原始数据根据大小投放到对应的分箱中,并最终得到每个分箱中的数据。4.1节介绍了利用频数分析结果绘制直方图的方法。

绘制一元数据的直方图可以探查该数据的分布形状,根据直方图的形态可以将分布形状分为陡峭、矮胖、左偏、右偏以及正态等几种情况。

常用统计量峰度和偏度描述和判断数据的分布形状。当峰度>3时,称分布是高尖的,具有过度的峰度,如图5-2中右上角图所示;当峰度<3时,称分布是矮胖的,具有不足的峰度,如图5-2中左上角图所示;当偏度>0时,称分布右偏,或者正偏,如图5-2中左下角图所示;当偏度<0时,称分布左偏,或者负偏,如图5-2中右下角图所示。

Document Image Document Image

Document Image Document Image

图5-2 不同峰度和偏度的直方图

图5-3用下面的代码生成。完整代码见:Samples->ch08 统计图表->02 数据分布形状->py.py。

code.vba
Sub Test()
  Dim rng(1 To 4) As Range
  Dim intI As Integer
  Set rng(1) = Range("A2:A201")
  Set rng(2) = Range("B2:B201")
  Set rng(3) = Range("C2:C201")
  Set rng(4) = Range("D2:D201")

  For intI = 1 To 4
    DrawHist rng(intI), 200
  Next
End Sub

核密度估计

根据5.1.2小节的介绍,直方图是直接用紧密排列的柱形表现样本数据的分布特征。核密度估计则不同,它是使用非参数的方法,用有限的样本数据对总体进行估计,得到描述总体特征的概率密度函数。

下面的代码用5.1.3小节的数据绘制核密度估计曲线图。完整代码见:Samples->ch08 统计图表->03 核密度估计->py.py。

code.vba
Sub CreateCharts()
  Dim intI As Integer
  Dim intJ As Integer
  Dim rng(1 To 4) As Range
  Set rng(1) = Range("A2:A201")
  Set rng(2) = Range("B2:B201")
  Set rng(3) = Range("C2:C201")
  Set rng(4) = Range("D2:D201")

  Dim shp As Shape
  Dim cht As Chart
  Dim dblMinX(1 To 4) As Double
  Dim dblMaxX(1 To 4) As Double
  Dim dblMaxY(1 To 4) As Double
  dblMinX(1) = -30
  dblMaxX(1) = 30
  dblMinX(2) = 0
  dblMaxX(2) = 1
  dblMinX(3) = -3
  dblMaxX(3) = 4
  dblMinX(4) = -6
  dblMaxX(4) = 4
  dblMaxY(1) = 0.4
  dblMaxY(2) = 1.1
  dblMaxY(3) = 0.5
  dblMaxY(4) = 0.5
  For intI = 1 To 4
    Set shp = ActiveSheet.Shapes.AddChart2()
    Set cht = shp.Chart
    cht.ChartType = xlXYScatter
    Dim ax1 As Axis
    Set ax1 = cht.Axes(1)
    Dim ax2 As Axis
    Set ax2 = cht.Axes(2)
    ax1.MinimumScale = dblMinX(intI)
    ax1.MaximumScale = dblMaxX(intI)
    ax2.MinimumScale = 0
    ax2.MaximumScale = dblMaxY(intI)
    'cht.Legend.Delete

    SetStyle cht
    For intJ = cht.SeriesCollection.Count To 1 Step -1
      cht.SeriesCollection(intJ).Delete
    Next
    cht.SeriesCollection.NewSeries
    ax1.CrossesAt = ax1.MinimumScale
    ax2.CrossesAt = ax2.MinimumScale

    DrawKDE rng(intI), cht, 0, 0, 0, 255, dblMinX(intI), dblMaxX(intI)
  Next
End Sub

运行代码生成图5-3。核密度估计图的更多绘制方法请参见4.2节。

Document Image Document Image

Document Image Document Image

图5-3 不同分布形状数据的核密度估计曲线图