2016-08-07 12 views
0

Pythonsパッケージuncertaintiesで私の友人がデータを評価しています。私は彼女の統計コンサルタントです。私は彼女のコードで奇妙な結果を思いつきました。Pythons不確かさの合計が予想外の結果をもたらす

sum(array)およびsqrt(sum(unumpy.std_devs(array)**2))は、異なる結果をもたらし、第2のものは通常、エンジニアリングで通常使用される分散方法である。

ここで、分散アプローチは、このケースでは与えられていない部分導関数(テイラー級のため)に比べて誤差が小さい場合にのみ適していることがわかりますが、uncertaintiesはこれをどう処理しますか?どのようにして不確実性を再現することができますか?

答えて

0

ようなものでつながりますVariableとは対照的に)、したがって、値を格納するだけでなく、値がに依存するすべての変数も格納します。

ここで私の値は完全に独立していません(一見しても明らかではありませんでした)。したがって、sum(array)thisの公式に従って私の共分散行列の非対角要素も考慮しますドイツ語ですが、英語のWikipedias formulaは直感的ではありません)。一方、sqrt(sum(unumpy.std_devs(array)**2))は明らかに対角要素を追加しないだけです。不確定要素が何を再現する

方法は次のとおりです。

from uncertainties import covariance_matrix 

sum=0 
for i in range(0,len(array)): 
    for j in range(0,len(array)): 
     sum+=covariancematrix(array)[i][j] 

print(sqrt(sum)) 

そしてunumpy.std_devs(sum(array))==sqrt(sum)Trueです。

*同じ補間(測定値)から得られたデータの使用による相関、および測定の長さが2回の差として計算された(したがって、測定が連続しているので、時間が相関している)

0

標準誤差を2乗することを忘れて、分散を忘れてしまいました。これは、仕事とsum(array)のエラーと同じでなければなりません:

sqrt(sum(unumpy.std_devs(array)**2)) 

その後

from uncertainties import unumpy 
import random 
import math 

a = [uc.ufloat(random.random(), random.random()) for _ in range(100)] 

sa = unumpy.std_devs(sum(a))  
sb = math.sqrt(sum(unumpy.std_devs(a)**2)) 

print(sa) 
print(sb) 
print(sa == sb) 

これはAffineScalarFunc(ようであることに起因私arrayになり

5.793714811166615 
5.793714811166615 
True 
+0

私の悪い!私はすぐにそれを修正します!しかし、それはタイプミスでした。コードには実際に '** 2'があります。 – Tilman

+0

それで問題はありません。明示的な例を示すために私の編集を参照してください。 – Aguy

+0

私は最終的にスクリーンショットだけでなくコードを取得し、 "エラー"を発見しました。あなたの答えは私がそれを見つけるのを助けるために素晴らしかった、私はそれが(明らかに)事実ではなかった特定の値に起因するかもしれないと思ったので。 – Tilman

関連する問題