標準偏差を見つけたい:
Minimum = 5
Mean = 24
Maximum = 84
Overall score = 90
標準偏差を使って自分の成績を知りたいだけです
ありがとう、
標準偏差を見つけたい:
Minimum = 5
Mean = 24
Maximum = 84
Overall score = 90
標準偏差を使って自分の成績を知りたいだけです
ありがとう、
一般に、標準偏差は、最小値、最大値、および平均値だけから計算することはできません。これは、最小値、最大値、平均値が同じで標準偏差が異なる 2 セットのスコアで実証できます。
また、最大値が 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コードを変更して、さまざまな値 (変更max_sample_size
) またはより正確な (変更) のテーブルを生成するnum_simulations
か、10 の倍数への制限を取り除く (パラメーターをforxrange
の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]))
原則として、サンプルの平均/最小/最大および要素数から標準偏差を推定できます。サンプルの最小値と最大値は、正規性を仮定する場合、統計が平均/標準偏差/サンプル数から得られる確率変数です。したがって、後者が与えられた場合、前者の信頼区間を計算できます (数学をスローするか、一連のモンテカルロ スクリプトを実行した後) (stddev が 20 から 40 またはそのようなものである可能性が 80% のように)。
とはいえ、極端な状況を除いて、おそらくやる価値はありません。