コンピューター シミュレーションの本から、この 2 つの方程式を得ました。
1 つ目は、 correlogramを計算することです。2 つ目は、correlogram を使用して分散を推定する方法です。
観測値はしばしば関連しているため、観測値の分散を推定する一般的な方法は、コンピューター シミュレーションでは正しくないことがよくあります。
私の質問は、プログラムから計算した値が非常に大きいため、正しくない可能性があるということです。
k が大きくなると r[k] が 0 に近づくため、2 番目の式はかなり大きな値になると思いますが、式が間違っているのではないでしょうか?
あなたが尋ねたように、これがプログラム全体です(Pythonで書かれています):
@property
def autocorrelation(self):
n = self.packet_sent
mean = self.mean
waiting_times = self.waiting_times
R = [ sum([(x - mean) ** 2 for x in waiting_times[:-1]]) / n ]
#print R
for k in range(1, n / 4 + 1):
R.append(0)
for i in range(0, n - k):
R[k] += (waiting_times[i] - mean) * (waiting_times[i + k] - mean)
R[k] /= n
auto_cor = [r / R[0] for r in R]
return auto_cor
@property
def standard_deviation_wrong(self):
'''This must be a wrong method'''
s_x = self.standard_deviation_simple
auto_cor = self.autocorrelation
s = 0
n = self.packet_sent
for k, r in enumerate(auto_cor[1:]):
s += 1 - (k + 1.0) * r / n
#print "%f %f %f" % (k, r, s)
s *= 2
s += 1
s = ((s_x ** 2) * s) ** 0.5
return s