您的位置:首页 > 其它

同步直播(5):数据的正态分布

2016-08-06 17:43 197 查看
同步直播空间度量以及统计的内容翻译。文章内容未做仔细修订,语句不通顺和错别字部分,会在以后不断的校正,此仅为beta版。



英文版权属于Esri。中文、解说、配图版权:虾神

————————我是分割线————————

第二章:理解数据分布(1)

识别要素的趋势、模式和关系,是空间度量及统计来对数据的分布进行分析来实现的。了解数据的分布,将帮助你有效的进行分析以及得出正确的结论。甚至在你进行数据分析前,就应该了解数据的分布情况——如果数据中存在极值,那么可能需要从分析中把这些极值抛出来。

一种被称之为直方图的条形图可用于显示要素中具有的特定值的数量——即频率分布。对于连续值(区间或者比率数据),每个要素都可能具有唯一值,所以经常选用范围值来进行分类 。



从直方图还可以生成一条频率曲线,从而消除了直方图中利用范围值进行显示时候出现的断崖效果,这样沿着X轴会变成一条连续的曲线。您可以使用各种工具来创建直方图或者曲线,很多GIS软件工具也能够提供这些功能。



人口普查数据中的房租中位数频率分布

某些特定的频率分布在各种数据中会经常出现。数学家们早已发现了这并且通过数学语言描述其的理想模式。所以以下的两种形式也经常被用于空间统计中。

一是正态分布。正态分布常发生于大批属性值都处于相似区间的情形下面。虽然也有一些较高或者较低的值出现,比如多年降雨量的数据统计。大部分年份的降雨量都是接近平均值的,但也会有一些降雨特别丰富的丰水年和几个非常干燥的枯水年。对于正态分布来说,频率曲线呈现经典的对称钟形曲线,其中绝大部分的值聚集在曲线的中心位置,而且尽可能多的左右对称。如果对一定时间段内的值进行统计,那么会发现大多数的值都接近平均值。



呈现正态分布的频率曲线

另一种就是泊松分布,是以法国数学家Simeon Poiss命名的,主要是描述19世纪30年代后期,在一定空间和时间范围内发生超大震级地震的极端事件的概率分布情况。如果某件事情是随机发生的,那么就很多时间段内,只有很少或者更本没有事件发生,并且有可能在很短的时间段内突然爆发很多事件。在这种情况下,平均值往往小于1,即某件事情在这个时间段内不会发生的概率会很高。而如果平均值大于1的话,(也就是说某一事件段爆发大量事件),数据分布情况就会变得很不同——短时间内爆发大量事件的概率会高于不发生事件的概率。



平均值为0.5的一个泊松分布的例子。Y轴表示就是某一事件发生的概率。

频率的分布是通过测量数据的特性来进行描述的。



在正态分布的情况下,平均数和中位数是相等的。

但是大部分的地理相关的分布,都不是正态的。在下面的例子中,分布曲线向高值部分倾斜,并且出现了明显的长尾效应。高值分布,会导致平均数要高于中位数。



人口普查中65岁以上的人口分布情况

分布的另外一个特点就是值与值之间的差异程度,称之为方差。方差越大,值与值之间的差异越大,表示围绕平均数周边的值越分散。



人口普查数据中的5岁以下的儿童(上图与表)以及30至49岁的成年人(下图)的数量分布情况。可以看出,5岁以下儿童,大部分区域的情况与平均值相近,而30至49岁的中年人的分布确基本上偏离了平均值。说明中年人的数目在不同区域分布很不均匀。



用每一个值来计算与平均数的差异,然后把这些差异总和起来,就是整份数据的差异程度,因为可能有些值小于平均值,为了保证总和不会偏差,所以将差值进行平方,以确保所有的差值都是正数。



方差是如何计算的呢?如以下公式所示,用每一个值减去平均值得出的差,计算这个差平方,然后累加起来,除以要素的个数即可。计算差的平方主要是为了处理值小于平均数时候出现的负数问题。

但是以上计算出来的均值差是计算了平方的结果,会导致数据的单位发生了变化,如果要回归原来的单位(如长度单位里面的英尺、米;或者是货币,如美元等任何有意义的度量单位),就需要对这个数据进行计算,这个计算的结果称之为标准差。



标准差其实就是方差的平方根。

在正态分布中,一定比例的值以及一定数量的标准差,都会出现在平均值附近(正或者负)。(此验证见本文附录)

如果以从平均值中加上以及减去一个标准差(为值域范围),那么这个区域将包含68%左右的值。
如果加上以及减去两个标准差,那么将包含95%左右的值。
如果加上以及减去三个标准差,那么将包含超过99%的值。



而就算在分布中,平均数与中位数是相等的,如果不能匹配预期中的值围绕中平均值散布的话,依然未必就是正态分布的。这样的分布曲线可能会比正态分布更为平坦或者更为陡峭。



两个虚线所表示的频率曲线都不符合正态分布。

关于正态分布中,多个标准差范围的数据验证,R语言实现如下:

#从频率曲线中获取最相似的值的下标
test.approximate <-function(fx,v){

  min = 9999

  flag = 1

  for( i in 1:length(fx)){

    ap = (fx[i] - v) * (fx[i] - v)

    if (min > ap){

      min = ap

      flag = i

    }

  }

  return(flag)

}

#生成1000个正态分布随机数
x = rnorm(1000)

d = density(x, bw=.5)

#计算平均数与标准差
m = mean(x)

s = sd(x)

my = d$y[test.approximate(d$x,m)]

#计算正负一个标准差范围的结果
t1 = m -s

b1 = m + s

x1 = x[x > t1 & x < b1]

t1y = d$y[test.approximate(d$x,t1)]

b1y = d$y[test.approximate(d$x,b1)]

#计算正负两个标准差范围的结果
t2 = m -s - s

b2 = m + s + s

x2 = x[x > t2 & x < b2]

t2y = d$y[test.approximate(d$x,t2)]

b2y = d$y[test.approximate(d$x,b2)]

#计算正负三个标准差范围的结果
t3 = m -s - s -s

b3 = m + s + s + s

x3 = x[x > t3 & x < b3]

length(x1)

length(x2)

length(x3)

plot(d, col="red", lwd=2)

segments(m,0, x1 = m, y1 =my ,col = "black",lty=1,lwd=2)

segments(t1,0, x1 = t1, y1 = t1y,col = "blue",lty=2,lwd=2)

segments(b1,0, x1 = b1, y1 = b1y,col = "blue",lty=2,lwd=2)

segments(t2,0, x1 = t2, y1 = t2y,col = "blue",lty=3,lwd=2)

segments(b2,0, x1 = b2, y1 = b2y,col = "blue",lty=3,lwd=2)

segments(t3,0, x1 = t3, y1 = t2y/2,col = "blue",lty=4,lwd=2)

segments(b3,0, x1 = b3, y1 = b2y/2,col = "blue",lty=4,lwd=2)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: