我有两组不同的随机分布的实验数据。我需要通过对它的每个值应用一些函数来使其中一个分布与另一个分布尽可能相似。函数示例: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')
我知道在所有可能的方式中,这是最丑陋和最慢的一种。不幸的是,我根本没有编程背景,这是我第一次卑微的努力。鉴于得到的分布的平均值是一个 khown 常数,适当的 p1-p2 对的数量非常有限,但我在这里使用了简单的蛮力。我认为,应该有某种方法可以将 p2 表示为 p1 的函数,但我完全不知道该怎么做。也许你可以给我一些想法?
对不起,我的英语不好...