我有一个包含高度的数据框。数据不能低于零。这就是为什么我不能使用标准差的原因,因为该数据不是正态分布。我不能在这里使用68-95-99.7规则,因为在我的情况下它失败了。这是我的数据框,均值和SD。
0.77132064
0.02075195
0.63364823
0.74880388
0.49850701
0.22479665
0.19806286
0.76053071
0.16911084
0.08833981
Mean: 0.41138725956196015
Std: 0.2860541519582141
如果我得到2 std,您会看到数字变为负数。
-2 x std calculation = 0.41138725956196015 - 0.2860541519582141 x 2 = -0,160721044354468
我曾经尝试使用percentile
,但说实话,我对此并不满意。我如何将切比雪夫不等式应用于这个问题?这是我到目前为止所做的:
np.polynomial.Chebyshev(df['Heights'])
但是这返回的数字不是我可以测量的SD级别。还是您认为切比雪夫是我的最佳选择?
期望的解决方案:
I am expecting to get a range like 75% next height will be between 0.40 - 0.43 etc.
EDIT1:添加了直方图
更清楚地说,我已经添加了真实数据的直方图
EDIT2:真实数据中的某些值
Mean: 0.007041500928135767
Percentile 50: 0.0052000000000000934
Percentile 90: 0.015500000000000047
Std: 0.0063790857035425025
Var: 4.06873389299246e-05
非常感谢
答案 0 :(得分:3)
您似乎在混淆来自同一位数学家Chebyshev的两个想法。这些想法不相同。
Chebysev's inequality陈述了一个事实,它适用于许多概率分布。对于两个标准偏差,它指出四分之三的数据项将位于平均值的两个标准偏差之内。如您所述,对于正态分布,大约19/20的项将位于该区间中,但是切比雪夫不等式是一个绝对界线,几乎所有分布都可以满足。您的数据值永远不会为负的事实并不会改变不平等的事实。只会使值在区间中的实际比例更大,因此(在某种意义上)不等式更加真实。
Chebyshev polynomials不涉及统计信息,而只是一系列(或两个系列)多项式,通常用于计算计算机功能的近似值。这就是np.polynomial.Chebyshev
所涉及的,因此对您似乎根本没有用。
因此,自己计算切比雪夫不等式。由于它非常简单(这是Python 3代码),因此不需要特殊功能:
def Chebyshev_inequality(num_std_deviations):
return 1 - 1 / num_std_deviations**2
您可以更改它以处理k <= 1
但想法很明显的情况。
在您的特定情况下:不等式表示至少3/4或75%的数据项位于均值的2个标准差之内,即大于0.41138725956196015 - 2 * 0.2860541519582141
而小于{ {1}}(注意不同的符号),简化为间隔
0.41138725956196015 + 2 * 0.2860541519582141
在您的数据中,数据值的100%处于该间隔内,因此切比雪夫不等式是正确的(当然)。
现在,如果您的目标是预测或估计某个百分位数,则切比雪夫的不等式对您没有太大帮助。它是一个绝对的下限,因此它对一个百分位数给出了一个限制。例如,通过上面的操作,我们知道第12.5个百分位数等于或高于[-0.16072104435446805, 0.9834955634783884]
,第87.5个百分位数等于或低于-0.16072104435446805
。这些事实是真实的,但可能不是您想要的。如果您希望 estimate 接近实际百分位数,则不是可行的方法。 68-95-99.7规则是一个估计值-实际位置可能更高或更低,但是如果分布正常,则估计值不会太遥远。切比雪夫的不等式不做这种估计。
如果要估计第12.5和87.5个百分位数(显示总人口的75%将落在何处),则应计算样本的百分位数并使用这些值。如果您不了解有关您所拥有的发行类型的更多详细信息,那么我找不到更好的方法。正态分布如此受欢迎是有原因的!
答案 1 :(得分:1)
听起来像您想要中间75%的数据的边界。
数据的中间75%位于12.5%和87.5%之间,因此您可以使用quantile
函数来获取以下位置的值:
`import pandas as pd
df = pd.read_table('file.dat', sep='\s+')
selection = df[(df.hr >= 19) & (df.hr <= 24)]
file = open('newfile.dat', 'w+')
file.write(str(selection))`
答案 2 :(得分:0)
根据What does it mean when the standard deviation is higher than the mean? What does that tell you about the data? - Quora,SD是“传播”的度量,而平均值是“位置”的度量。如您所见,这些或多或少是独立的。现在,如果所有样本均为阳性,则SD不能大于平均值because of the way it's calculated,但2或3个SD可以很好。
因此,基本上,SD大致等于均值意味着您的数据无处不在。
现在,一个严格为正的随机变量确实cannot be normally distributed。但是粗略估算一下,看到您仍然是钟形,我们可以假装它仍然是,并且仍将SD用作价差的粗略度量(尽管由于2和3 SD可能会变成负数,所以它们在这里没有任何物理意义为了维护我们的利益而无法使用)
例如要获得草生长的粗略预测,您仍然可以采用均值并对其应用任何生长模型-这将获得新的预期均值。然后将其应用于 mean±SD 将给出新SD的想法。
这当然很粗糙。但是要变得更好,您将不得不somehow check处理您要处理的分布,并使用其峰值和扩展特性而不是均值和标准差。在任何情况下,您的预测都不会比您的增长模型更好-对它的研究只是结论性的判断,例如https://onlinelibrary.wiley.com/doi/pdf/10.1111/j.1365-3040.2005.01490.x(那里不是一个公式)。