我想找到标准偏差:
Minimum = 5
Mean = 24
Maximum = 84
Overall score = 90
我只想通过使用标准差来找出我的成绩
谢谢,
我想找到标准偏差:
Minimum = 5
Mean = 24
Maximum = 84
Overall score = 90
我只想通过使用标准差来找出我的成绩
谢谢,
通常不能仅从最小值、最大值和平均值计算标准偏差。这可以通过两组具有相同最小值、最大值和平均值但标准差不同的分数来证明:
另外,如果最高分是 84,那么“总分”为 90 意味着什么?
实际上,我对M Rad提到的类型进行了快速而粗略的计算。它涉及假设分布是高斯分布或“正态分布”。这不适用于您的情况,但可能会帮助其他提出相同问题的人。(你可以说你的分布不正常,因为从平均值到最大值和平均值到最小值的距离并不近)。即使它是正常的,你也需要一些你没有提到的东西:样本数量(在你的案例中进行的测试数量)。
那些确实拥有正常人群的读者可以使用下表通过将测量的最小值和计算的平均值之差除以样本量的预期值来粗略估计。平均而言,它将偏离给定数量的标准偏差。(我不知道它是否有偏见 - 更改下面的代码并计算错误而无需abs
猜测。)
Num Samples Expected distance Expected error
10 1.55 0.25
20 1.88 0.20
30 2.05 0.18
40 2.16 0.17
50 2.26 0.15
60 2.33 0.15
70 2.38 0.14
80 2.43 0.14
90 2.47 0.13
100 2.52 0.13
该实验表明,将范围除以 4 以获得标准偏差的“经验法则”通常是不正确的——即使对于正常人群也是如此。在我的实验中,它仅适用于 20 到 40 之间的样本大小(然后松散)。这条规则可能是 OP 正在考虑的。
您可以修改以下python代码以生成不同值 (change max_sample_size
) 或更准确 (change num_simulations
) 的表,或者摆脱对 10 倍数的限制(将参数更改为xrange
循环中的for
for idx
)
#!/usr/bin/python
import random
# Return the distance of the minimum of samples from its mean
#
# Samples must have at least one entry
def min_dist_from_estd_mean(samples):
total = 0
sample_min = samples[0]
for sample in samples:
total += sample
sample_min = min(sample, sample_min)
estd_mean = total / len(samples)
return estd_mean - sample_min # Pos bec min cannot be greater than mean
num_simulations = 4095
max_sample_size = 100
# Calculate expected distances
sum_of_dists=[0]*(max_sample_size+1) # +1 so can index by sample size
for iternum in xrange(num_simulations):
samples=[random.normalvariate(0,1)]
while len(samples) <= max_sample_size:
sum_of_dists[len(samples)] += min_dist_from_estd_mean(samples)
samples.append(random.normalvariate(0,1))
expected_dist = [total/num_simulations for total in sum_of_dists]
# Calculate average error using that distance
sum_of_errors=[0]*len(sum_of_dists)
for iternum in xrange(num_simulations):
samples=[random.normalvariate(0,1)]
while len(samples) <= max_sample_size:
ave_dist = expected_dist[len(samples)]
if ave_dist > 0:
sum_of_errors[len(samples)] += \
abs(1 - (min_dist_from_estd_mean(samples)/ave_dist))
samples.append(random.normalvariate(0,1))
expected_error = [total/num_simulations for total in sum_of_errors]
cols=" {0:>15}{1:>20}{2:>20}"
print(cols.format("Num Samples","Expected distance","Expected error"))
cols=" {0:>15}{1:>20.2f}{2:>20.2f}"
for idx in xrange(10,len(expected_dist),10):
print(cols.format(idx, expected_dist[idx], expected_error[idx]))
Yo 可以通过计算 GME= $\sqrt{ Min*Max }$ 使用 Min 和 Max 获得几何平均值的估计值,有时称为极值或 GME 的几何平均值。然后可以使用算术平均值 (AM) 和 GME 计算 SD:
SD= $$\frac{AM}{GME} * \sqrt{(AM)^2-(GME)^2 }$$
这种方法适用于对数正态分布,或者只要 GME、GM 或 Median 小于 AM。
原则上,您可以根据平均值/最小值/最大值和样本中的元素数量估算标准偏差。如果您假设正态性,则样本的最小值和最大值是随机变量,其统计信息来自均值/标准差/样本数。因此,考虑到后者,人们可以计算(在通过数学或运行一堆蒙特卡罗脚本之后)前者的置信区间(就像 80% 的概率 stddev 在 20 到 40 之间或类似的东西)。
也就是说,除非在极端情况下,否则可能不值得这样做。