sem=[]
#return sems
for i in range(1,1000):
block_size.append(i)
block_mean=[]
no_blocks=0
for l in range(0, len(nums),i):
if len(nums[l:l+i])==i:
block_mean.append(np.mean(nums[l:l+i]))
no_blocks=no_blocks+1
sem.append(np.std(block_mean)/np.sqrt(no_blocks))
Пример вывода (SEM для усреднения блоков и размер блока):

Мой вопрос: если в SEM нет четкого плато в результате усреднения блоков, имеет ли смысл пытаться оценить статистическую ошибку для этих данных? Если да, то какие методы/меры предосторожности мне следует использовать, чтобы получить надежную оценку ошибки (или консервативную границу) на основе одной длинной траектории кадров молекулярной динамики?
Я пробовал использовать другие методы, такие как statsmodel.tsa.stattools.acf, для расчета времени автокорреляции, ошибка, которую я в конечном итоге получаю, составляет 0,0008712, что, на мой взгляд, немного нереально. Есть ли другой способ более точного расчета ошибки для этих данных?
Я использовал следующий код для расчета ошибки с помощью statsmodel.tsa.stattools.acf,
def tau_cal(acf_out,nums):
positive_acf =np.where(acf_out > 0.0000)[0]
result = [acf_out[x] for x in positive_acf]
tau = 1 + 2 * np.sum(result[1:-1])
Neff = len(nums)/tau
error = (statistics.stdev(nums))/np.sqrt(Neff)
return error
time = statsmodel.tsa.stattools.acf(nums)
error = tau_cal(acf_out,nums)
Подробнее здесь: https://stackoverflow.com/questions/797 ... orrelation