如何精确匹配累积分布函数和分位数函数的结果?

时间:2015-08-18 06:34:33

标签: r matlab statistics

众所周知,quantile函数是逆累积分布函数。

那么对于现有的分布(向量),如何与cumulative distribution functionquantile函数的结果完全匹配?

这是MATLAB中给出的一个例子。

a = [150   154   151   153   124]
[x_count, x_val] = hist(a, unique(a));
% compute the probability cumulative distribution 
p = cumsum(n)/sum(n);
x_out = quantile(a, p)

在累积分布函数中,累积概率与x值之间的对应关系应为:

x = 124   150   151   153   154
p = 0.2000    0.4000    0.6000    0.8000    1.0000

但是使用 p 分位数来计算 x_out ,结果与 x 不同:

x_out =

  137.0000  150.5000  152.0000  153.5000  154.0000

参考

  1. quantile function
  2. matlab quantile function

1 个答案:

答案 0 :(得分:1)

来自docs

  

对于五个元素的数据向量,例如{6,3,2,10,1},分类元素{1,2,3,6,10}分别对应于0.1,0.3,0.5,0.7, 0.9分位数。

因此,如果您希望获得为 func isUpdateLocation(currentLocation: CLLocationCoordinate2D, userLocation: CLLocationCoordinate2D)-> Bool { let latitude: CLLocationDegrees = currentLocation.latitude - userLocation.latitude let longitude: CLLocationDegrees = currentLocation.longitude - userLocation.longitude let absoluteValueOfLatitude = fabs(latitude)// the fabs I get the error :Consecutive statements on a line must be separated by ';' let absoluteValueOfLongitude = fabs(longitude) if latitude > 0.01 || longitude > 0.01 { return true } return false } 添加的确切数字,并且您的x包含5个元素,那么您的x必须为p。完整的算法在文档中明确定义。

您假设要恢复p = [0.1, 0.3, 0.5, 0.7, 0.9]x应该是p。但那么为什么不[0.2, 0.4, 0.6, 0.8, 1]? Matlab的算法似乎只是采用两种方法的线性平均值。

请注意R defines 分位数的不同算法,因此需要明确说明您的假设。