ランダムに分散された実験データの2つの異なるセットがあります。それぞれの値に何らかの関数を適用して、分布の1つを別の分布にできるだけ類似させる必要があります。関数の例:F(x)= x *(1+(x + p1)* p2、ここでp1とp2は任意のパラメーターです。可能かどうか、可能であれば、p1のどの値を使用するかを確認します。そしてp2、私は簡単なpythonスクリプトを書きました:
#!/usr/bin/python
from scipy.stats import ks_2samp
from frange import frange
control = [float(i.rstrip().replace(',', '.')) for i in open('control.txt').readlines()]
test = [float(i.rstrip().replace(',', '.')) for i in open('1460.txt').readlines()]
def mean(x):
res = sum(x)/len(x)
return res
def testargs(p1, p2):
model = [i*(1+(i+p1)*p2) for i in control]
if round(mean(model), 4) == round(mean(test), 4):
return True
else:
return False
results = {}
for p1 in frange(0, 0.02, 0.001):
for p2 in frange(5, 20, 0.01):
if testargs(p1, p2):
ks = ks_2samp([i*(1+(i+p1)*p2) for i in control], test)[1]
results[ks] = (p1, p2)
result = sorted(results.keys(), reverse=True)[0]
print('Result: ', result, '\n', 'p1, p2: ', results[result], '\n')
私は、考えられるすべての方法の中で、これが最も醜くて最も遅い方法であることを理解しています。残念ながら、私にはプログラミングのバックグラウンドがまったくなく、これが私の最初の謙虚な努力です。結果の分布の平均値が既知の定数であることを考えると、適切なp1-p2ペアの数は非常に限られていますが、ここでは単純なブルートフォースを使用します。p2をp1の関数として表現する方法があるはずだと思いますが、どうすればいいのか全くわかりません。多分あなたは私にいくつかの考えを投げることができますか?
私の悪い英語でごめんなさい...