chatterjeexi#
- scipy.stats.chatterjeexi(x, y, *, ось=0, y_continuous=False, метод='asymptotic', nan_policy='propagate', keepdims=False)[источник]#
Вычислите корреляцию xi и выполните тест на независимость
Коэффициент корреляции xi — это мера связи между двумя переменными; значение стремится к нулю, когда переменные независимы, и к 1, когда связь сильная. В отличие от других коэффициентов корреляции, корреляция xi эффективна даже когда связь не монотонна.
- Параметры:
- x, yarray-like
Выборки: соответствующие наблюдения независимой и зависимой переменной. Массивы (N-d) должны быть совместимы по вещанию.
- осьint или None, по умолчанию: 0
Если это целое число, ось входных данных, по которой вычисляется статистика. Статистика каждого среза по оси (например, строки) входных данных появится в соответствующем элементе вывода. Если
None, вход будет сведён в одномерный массив перед вычислением статистики.- метод: DOC: исправление строк документации ndimage и уменьшение предупреждений сборки документации
PermutationMethodinstance, optional Выбирает метод, используемый для расчета p-значение. По умолчанию 'asymptotic'. Доступны следующие опции.
'asymptotic': сравнивает стандартизированную тестовую статистику с нормальным распределением.PermutationMethodэкземпляра. В этом случае p-значение вычисляется с использованиемpermutation_testс предоставленными параметрами конфигурации и другими соответствующими настройками.
- y_continuousbool, по умолчанию: False
Определяет ли y предполагается, что взята из непрерывного распределения. Если y взята из непрерывного распределения, результаты действительны независимо от того, предполагается это или нет, но включение этого предположения приведёт к более быстрым вычислениям и обычно даст схожие результаты.
- nan_policy{‘propagate’, ‘omit’, ‘raise’}
Определяет, как обрабатывать входные значения NaN.
propagate: если NaN присутствует в срезе оси (например, строке), вдоль которой вычисляется статистика, соответствующая запись вывода будет NaN.omit: NaN будут пропущены при выполнении расчета. Если в срезе оси, вдоль которого вычисляется статистика, остается недостаточно данных, соответствующая запись вывода будет NaN.raise: если присутствует NaN, тоValueErrorбудет вызвано исключение.
- keepdimsbool, по умолчанию: False
Если установлено значение True, оси, которые были сокращены, остаются в результате как размерности с размером один. С этой опцией результат будет корректно транслироваться относительно входного массива.
- Возвращает:
- resSignificanceResult
Объект, содержащий атрибуты:
- статистикаfloat
Статистика корреляции xi.
- p-значениеfloat
Связанный p-значение: вероятность статистики, по крайней мере, такой же высокой, как наблюдаемое значение, при нулевой гипотезе независимости.
Смотрите также
Примечания
В настоящее время нет специальной обработки связей в x; они произвольно разбиваются реализацией.
[1] отмечает, что статистика не симметрична в x и y по дизайну: "…мы можем захотеть понять, если \(Y\) является функцией \(X\), и не только если одна из переменных является функцией другой.” См. [1] Замечание 1.
Начиная с SciPy 1.9,
np.matrixвходные данные (не рекомендуется для нового кода) преобразуются вnp.ndarrayперед выполнением вычисления. В этом случае результатом будет скаляр илиnp.ndarrayподходящей формы вместо 2Dnp.matrix. Аналогично, хотя маскированные элементы маскированных массивов игнорируются, результатом будет скаляр илиnp.ndarrayвместо маскированного массива сmask=False.Ссылки
[1] (1,2)Chatterjee, Sourav. «Новый коэффициент корреляции.» Journal of the American Statistical Association 116.536 (2021): 2009-2022. DOI:10.1080/01621459.2020.1758115.
Примеры
Сгенерируйте идеально коррелированные данные и убедитесь, что корреляция xi близка к 1.0.
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> x = rng.uniform(0, 10, size=100) >>> y = np.sin(x) >>> res = stats.chatterjeexi(x, y) >>> res.statistic np.float64(0.9012901290129013)
Вероятность наблюдать такое высокое значение статистики при нулевой гипотезе о независимости очень мала.
>>> res.pvalue np.float64(2.2206974648177804e-46)
При добавлении шума коэффициент корреляции уменьшается.
>>> noise = rng.normal(scale=[[0.1], [0.5], [1]], size=(3, 100)) >>> res = stats.chatterjeexi(x, y + noise, axis=-1) >>> res.statistic array([0.79507951, 0.41824182, 0.16651665])
Поскольку распределение y является непрерывной, допустимо передавать
y_continuous=True. Статистика идентична, а p-значение (не показано) лишь немного отличается.>>> stats.chatterjeexi(x, y + noise, y_continuous=True, axis=-1).statistic array([0.79507951, 0.41824182, 0.16651665])