众所周知,quantile
函数是逆累积分布函数。
那么对于现有的分布(向量),如何与cumulative distribution function
和quantile
函数的结果完全匹配?
这是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
参考
答案 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 九 分位数的不同算法,因此需要明确说明您的假设。