#python #standard-deviation #propagation #uncertainty #covariance-matrix
#python #стандартное отклонение #распространение #неопределенность #ковариационная матрица
Вопрос:
Я считаю, что мою проблему довольно легко понять, но я хотел бы сделать ее предельно ясной, отсюда и длина этого сообщения.
Моя первоначальная ситуация, которую я суммирую ниже, аналогична той, которая описана в этом сообщении (https://stats.stackexchange.com/questions/50830/can-i-convert-a-covariance-matrix-into-uncertainties-for-variables) , но касается конкретно того, как неопределенности пакета python справляются с такими случаями.
Вот ситуация:
-
У меня есть массив точек данных, соответствующих номинальному значению некоторых измерений (под номинальным значением я подразумеваю голое значение без учета какой-либо неопределенности).
-
Каждая точка данных имеет свою неопределенность, которая также предоставляется мне. Более того, разные точки данных не являются независимыми, а коррелируют из-за некоторой систематики в измерениях. Таким образом, мне предоставляется целая ковариационная матрица с ненулевыми недиагональными элементами.
Что я хотел бы сделать, так это выполнить вычисления с моими данными таким образом, чтобы неопределенности распространялись соответствующим образом. В конечном итоге я хочу отобразить значения в виде номинального значения / — неопределенности в консоли. Пакет python «неопределенности» кажется правильным способом продолжения, но я не уверен в значении числа неопределенности, которое он предоставляет мне для моих начальных точек данных.
Чего я ожидал бы, так это того, что неопределенность моих исходных точек данных соответствует «наивному» стандартному отклонению, то есть квадратному корню из диагональных элементов моей ковариационной матрицы. Это игнорирует корреляции в данных, но отображение коррелированных результатов в виде номинальное значение / — неопределенность в любом случае может не показывать корреляции, и это не должно быть проблемой, если последние правильно учитываются для дальнейших вычислений.
Однако в пакете отображается другое число, являющееся неопределенностью, и я не знаю, откуда оно взялось. Документация по пакету очень мало помогает. Мне интересно, могу ли я злоупотреблять пакетом.
Кто-нибудь может помочь мне понять ситуацию? Большое спасибо!!
Вот минимальный воспроизводимый пример :
import uncertainties
import numpy as np
# To settle ideas, here are two different covariance matrices with same diagonals
# -> I expect them to lead to the same std deviations below, but this is not the case:
Cov_matrix1 = np.array([[0.00, 0.0, 0.0], [0.0, 1, 0], [0.0, 0, 4]], np.float64)
Cov_matrix2 = np.array([[0.00, 0.5, 3], [0.5, 1, 0.2], [3, 0.2, 4]], np.float64)
# here are some initial nominal values:
data_nominal = np.array([1, 2, 3], np.float64)
print(" The nominal values of data, whithout covariance matrix is ", data_nominal)
# I impose correlations in my data, using the above covariance matrices
correlated_data1 = np.asarray(uncertainties.correlated_values(data_nominal, Cov_matrix1))
correlated_data2 = np.asarray(uncertainties.correlated_values(data_nominal, Cov_matrix2))
# I print my data in the console, and see that data points have different uncertainties in both cases,
# even though the two covariance matrices have the same diagonals ... What is happening ?
print("n First covariance matrix is ")
print(Cov_matrix1)
print("n Data values are ", correlated_data1)
print("n 2nd covariance matrix is ")
print(Cov_matrix2)
print("n Data values are now ", correlated_data2)
Ответ №1:
Я думаю, что проблема в том, что одна из ковариационных матриц является «незаконной» в том смысле, что
Cov_matrix2 = np.array([[0.00, 0.5, 3], [0.5, 1, 0.2], [3, 0.2, 4]], np.float64)
не является положительным полуопределенным, оно имеет одно отрицательное собственное значение. Таким образом, работа с ним не может быть математически жизнеспособной, чего пакет не замечает. Действительно, пакет использует эту недопустимую матрицу без предупреждения или сообщения об ошибке, и, конечно, полученный результат нельзя считать значимым, отсюда и неожиданное поведение.