Оценка энтропии копулы и передачной энтропии
Неспараметрические методы для оценки энтропии копулы, передачной энтропии и статистики для теста многомерной нормальности и двухвыборочного теста реализованы. Также реализован метод обнаружения точки изменения на основе этого двухвыборочного теста.
Метод для оценки энтропии копулы состоит из двух простых шагов: оценка эмпирической копулы с помощью рангового статистического показателя и оценка энтропии копулы с использованием метода КСГ. Энтропия копулы — это математический концепт для измерения и проверки мультивариантной статистической независимости, который был доказан эквивалентным взаимной информации. В отличие от коэффициента корреляции Пирсона, энтропия копулы определена для случаев нелинейной зависимости, высших порядков и мультивариантных данных, что делает её универсально применимой. Оценка энтропии копулы может применяться в различных случаях, включая, но не ограничиваясь выбором переменных и открытием причинно-следственной связи (путём оценки передачной энтропии). Дополнительную информацию см. в работе Ма и Сун (2011) <doi:10.1016/S1007-0214(11)70008-6>.
Также стоит отметить, что энтропия копулы позволяет эффективно анализировать сложные системы, где линейные модели оказываются недостаточно мощными.Неспараметрический метод для оценки передачной энтропии также состоит из двух шагов: оценка трёх энтропий копулы и вычисление передачной энтропии на основе оценённых энтропий копулы. Предоставлена функция для тестирования условной независимости. Дополнительную информацию см. в работе Ма (2019) <arXiv:1910.04375>.
Предоставленная функция для тестирования условной независимости позволяет проверить наличие зависимости между случайными величинами при наличии третьей случайной величины.Статистика на основе энтропии копулы для теста многомерной нормальности и двухвыборочного теста реализована. Также реализован метод обнаружения точки изменения на основе этого двухвыборочного теста. Дополнительную информацию см. в работах Ма (2022) <arXiv:2206.05956>, Ма (2023) <arXiv:2307.07247>, и Ма (2024) <arXiv:2403.07892>.
copent
— оценка энтропии копулы;construct_empirical_copula
— первый шаг функции copent
, который оценивает эмпирическую копулу для данных с помощью ранговых статистик;entknn
— второй шаг функции copent
, который оценивает энтропию копулы из эмпирической копулы методом kNN;ci
— тест условной независимости на основе энтропии копулы;transent
— оценка передачной энтропии через энтропию копулы;mvnt
— оценка статистики на основе энтропии копулы для теста многомерной нормальности;tst
— оценка статистики на основе энтропии копулы для двухвыборочного теста;cpd
— выявление одиночной точки изменения;mcpd
— выявление множественных точек изменения;x
: данные N * d, N образцов, d размерностей;k
: k-ый ближайший сосед, параметр для оценки энтропии kNN. значение по умолчанию = 3;dtype
: тип расстояния, может быть 'euclidean' или 'chebychev' (для максимального расстояния);lag
: временной лаг. значение по умолчанию = 1;s0
, s1
: два образца с одинаковой размерностью;n
: количество повторений оценки.* thd: пороговое значение для статистики двухвыборочного тестаpip install copent
Пакет также можно установить из GitHub:
pip install git+https://github.com/majianthu/pycopent.git
from numpy.random import multivariate_normal as mnorm
import copent
rho = 0.6
mean1 = [0, 0]
cov1 = [[1, rho], [rho, 1]]
x = mnorm(mean1, cov1, 200) # двумерное нормальное распределение
ce1 = copent.copent(x) # оцененная энтропия копулы
from copent import transent
from pandas import read_csv
import numpy as np
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/00381/PRSA_data_2010.1.1-2014.12.31.csv"
prsa2010 = read_csv(url)
# индекс: 5(PM2.5), 6(Точка росы), 7(Температура), 8(Давление), 10(Кумулятивная скорость ветра)
data = prsa2010.iloc[2200:2700, [5, 8]].values
te = np.zeros(24)
for lag in range(1, 25):
te[lag - 1] = transent(data[:, 0], data[:, 1], lag)
str = f"Передачная энтропия от давления до PM2.5 при временной задержке {lag} часов: {te[lag - 1]}"
print(str)
from numpy.random import multivariate_normal as mnorm
from copent import mvnt
mean1 = [0, 0]
cov1 = [[1, 0.65], [0.65, 1]]
data = mnorm(mean1, cov1, 500)
stat1 = mvnt(data)
from copent import tst
from numpy import zeros
from numpy.random import multivariate_normal as mnorm
m0 = [0, 0]
rho1 = 0.5
v0 = [[1, rho1], [rho1, 1]]
s0 = mnorm(m0, v0, 400) # двумерное нормальное распределение
stat1 = zeros(9)
for i in range(0, 9):
m1 = [i, i]
s1 = mnorm(m1, v0, 500)
stat1[i] = tst(s0, s1)
print(stat1[i])
from copent import mcpd
import numpy as np
from numpy.random import multivariate_normal as mnorm
```n1 = 50
x1 = np.random.normal(0, 1, n1)
x2 = np.random.normal(5, 1, n1)
x3 = np.random.normal(10, 1, n1)
x4 = np.random.normal(1, 1, n1)
x = np.concatenate((x1, x2, x3, x4))
pos, maxstat = mcpd(x, thd=0.2)
print(pos)
```python
x1 = mnorm([0, 0], [[1, 0], [0, 1]], n1)
x2 = mnorm([10, 10], [[1, 0], [0, 1]], n1)
x3 = mnorm([5, 5], [[1, 0], [0, 1]], n1)
x4 = mnorm([1, 1], [[1, 0], [0, 1]], n1)
x = np.concatenate((x1, x2, x3, x4))
pos, maxstat = mcpd(x, thd=0.2)
print(pos)
```#### Ссылки
1. Jian Ma и Zengqi Sun. Взаимная информация как энтропия копулы. Tsinghua Science & Technology, 2011, 16(1): 51-54. См. также архивный предпечатный вариант [arXiv:0808.0845](https://arxiv.org/abs/0808.0845), 2008.
2. Jian Ma. Оценка передачной энтропии с помощью энтропии копулы. Архивный предпечатный вариант [arXiv:1910.04375](https://arxiv.org/abs/1910.04375), 2019.
3. Jian Ma. Многомерный тест нормальности с использованием энтропии копулы. Архивный предпечатный вариант [arXiv:2206.05956](https://arxiv.org/abs/2206.05956), 2022.
4. Jian Ma. Двухвыборочный тест с использованием энтропии копулы. Архивный предпечатный вариант [arXiv:2307.07247](https://arxiv.org/abs/2307.07247), 2023.
5. Jian Ma. Обнаружение точки изменения с использованием двухвыборочного теста на основе энтропии копулы. Архивный предпечатный вариант [arXiv:2403.07892](https://arxiv.org/abs/2403.07892), 2024.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )