2017-09-09 16 views
0

パンダを使用していくつかのデータに正しい標準誤差値を得るのにいくつか問題があります。問題を再現する方法は次のとおりです。パンダ標準誤差計算の問題

import pandas as pd 

# get the data 
data = {'subject_number':[1,7,8,9,10,13], 
     'condition_number':[1,2,1,1,1,2], 
     'pre-score':[26.4495, 58.9345, 73.345, 41.081, 36.016, 8.4415], 
     'post-score':[49.71, 52.178, 44.0825, 52.711, 13.506, 39.7675]} 

dataset = pd.DataFrame(data) 

# get means 
means = dataset.groupby('condition_number').mean() 
means.drop('subject_number', axis=1) 

# get stdevs 
stdevs = dataset.groupby('condition_number').std() 
stdevs.drop('subject_number', axis=1) 

# get standard errors 
sems = dataset.groupby('condition_number').sem() 
sems.drop('subject_number', axis=1) 

これは問題なく機能しますが、これをExcelでテストしたところ、矛盾が見つかりました。手段と標準開発者は問題ありませんが、semは修正されたsample(std/sqrt(n-1))の値ではなく、uncorrected(std/sqrtここではExcelの出力は次のようになります。

enter image description here

私は問題は条件ごとに等しくないNに何かかもしれないと思いますか?データセットに見られるように、条件1のnは4であり、条件2のn = 2である。 [申し訳ありませんが、辞書の割り当ては、パンダの列の順序で混乱...]

誰かがここで何が起こっているか説明するのを助けることができますか?

+0

おかげで、とあなたの機能を変更する必要があります。標準的なエラーを計算するのはかなり一般的な作業なので、このソリューションに到達するためには、このような特定のコードを用意する必要があるのは奇妙です。これを達成するためのパンダの機能がないことに驚いた。 – fffrost

+0

私はあなたが標準誤差計算を間違って解釈していると思います。平均の標準誤差は、すべての標本平均の標準偏差です。通常は、母集団標準偏差をnで割って計算します。母集団標準偏差にアクセスできないので、標本標準偏差を使用します。 *サンプルの標準偏差*を使用しません。 – ayhan

+0

@ayhanサンプル手段に基づいてSEを計算するのではなく、データそのものに基づいて計算しています。私は参考のために手段テーブルを作成しました。 SE計算は、画像の範囲A1:D7のメインテーブルのデータに基づいて行われます。しかし、あなたのコメントを読んだ後、私は間違いをしたことがわかります!それは単にサンプルのstdev/sqrt(n)でなければなりません。 stdev/sqrt(n-1)のサンプルではありません。 これを行うのはかなり役に立たないので、質問を削除する必要がありますか?申し訳ありませんが、私は比較的新しいです! – fffrost

答えて

1

あなたは仕事をするようだ

In [846]: (dataset.groupby('condition_number') 
        .agg(lambda x: x.std()/x.count().add(-1).pow(0.5))) 
Out[846]: 
        post-score pre-score subject_number 
condition_number 
1     10.405407 11.743628  2.357023 
2     8.775549 35.703943  4.242641 
関連する問題