# MutualInfo — функция диаграммы

MutualInfo рассчитывает взаимную информацию (mutual information, MI) между двумя полями или агрегированными значениями в Aggr().

MutualInfo возвращает агрегированную взаимную информацию для двух наборов данных. Это позволяет провести анализ ключевых факторов между полем и потенциальным фактором. Взаимная информация (MI) измеряет отношение между наборами данных. Она агрегирована для пар значений (x,y), повторяемых в измерениях диаграммы. Взаимная информация измеряется в диапазоне от 0 до 1 и может быть представлена в виде значения процентиля. MutualInfo определяется выборками или выражением множества.

MutualInfo позволяет выполнять различные виды анализа MI:

* Попарный MI: рассчитывается MI между полем фактора и целевым полем.

* Разбивка фактора по значению: MI рассчитывается между индивидуальными значениями в поле фактора и целевом поле.

* Выбор функции: используйте MutualInfo на сетчатой диаграмме для создания матрицы, где все поля сравниваются друг с другом на основе MI.

MutualInfo не обязательно указывает на причинно-следственную связь между полями, обменивающимися взаимной информацией. Два поля могут иметь взаимную информацию, но не могут быть равноценными факторами друг для друга. Например, при сравнении продаж мороженого и температуры наружного воздуха MutualInfo покажет взаимную информацию между ними. Он не покажет, является ли температура наружного воздуха фактором, определяющим продажи мороженого (что вполне вероятно), или продажи мороженого определяют температуру наружного воздуха (что маловероятно).

При расчете взаимной информации связи затрагивают соотношение между значениями из полей различных таблиц и частоту этих значений.

Возвращаемые значения для одних и тех же полей или выборок могут незначительно отличаться. Причина этого в том, что каждый вызов MutualInfo использует случайным образом выбранный образец и свойственную случайность алгоритма MutualInfo.

MutualInfo может быть применена к функции Aggr().

Синтаксис:

MutualInfo({SetExpression}] [DISTINCT] [TOTAL] field1, field2 , datatype [, breakdownbyvalue [, samplesize ]])

Возвращаемые типы данных: числовое значение

Аргументы:

Аргументы

| Аргумент | Описание |
| --- | --- |
| field1, field2 | Выражения или поля, содержащие два образца множеств, для которых необходимо измерить взаимную информацию. |
| datatype | Типы данных, содержащиеся в целевом поле и в поле фактора:<br><br>1 или 'dd' для комбинации «дискретный:дискретный»<br><br>2 или 'cc' для комбинации «непрерывный:непрерывный»<br><br>3 или 'cd' для комбинации «непрерывный:дискретный»<br><br>4 или 'dc' для комбинации «дискретный:непрерывный»<br><br>Типы данных не чувствительны к регистру. |
| breakdownbyvalue | Статическое значение, соответствующее значению в поле фактора. Если указано, рассчитывается доля MI в этом значении. Можно использовать ValueList() или ValueLoop(). Если добавляется Null(), рассчитывается общее значение MI для всех значений в факторе.<br><br>Разбивка по значениям требует, чтобы фактор содержал дискретные данные. |
| samplesize | Количество значений для выборки из целевых полей и полей фактора. Выборка выполняется случайным образом. MutualInfo требует минимального объема выборки 80. По умолчанию MutualInfo делает выборку только до 10 000 пар данных, поэтому MutualInfo может быть ресурсоемким. Можно указать больше пар данных в объеме выборки. В случае тайм-аута MutualInfo уменьшите объем выборки. |
| SetExpression | По умолчанию функция агрегирования агрегирует множество возможных записей, определенных выборкой. Альтернативный набор записей может быть определен выражением анализа множества. |
| DISTINCT | Если слово DISTINCT указывается до аргументов функции, все дубликаты, возникшие в результате оценки аргументов функции, будут проигнорированы. |
| TOTAL | Если слово TOTAL стоит перед аргументами функции, вычисление выполняется по всем возможным значениям, указанным в текущих выборках, а не только в тех, которые относятся к значению текущего измерения, т. е. измерения диаграммы игнорируются.<br><br>При использовании выражения TOTAL [&lt;fld {.fld}&gt;], где префикс TOTAL предшествует списку из одного или нескольких имен полей, выступающих в качестве подмножества переменных измерения диаграммы, создается подмножество всех возможных значений.<br><br>[Определение объема агрегирования](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

Ограничения:

Текстовые значения, значения NULL и отсутствующие значения в какой-либо или обеих частях пары значений приводят к игнорированию всей пары значений.

Примеры и результаты:

Добавьте образец скрипта в свое приложение и запустите. Чтобы увидеть результаты, добавьте поля, перечисленные в столбце результатов, в лист приложения.

Примеры функции

| Пример | Результат |
| --- | --- |
| `mutualinfo(Age, Salary, 1)` | Для таблицы, включающей измерение `Employee name` и меру `mutualinfo(Age, Salary, 1)`, результат будет 0,99820986. Результат отображается только для итоговой ячейки. |
| `mutualinfo(TOTAL Age, Salary, 1, null(), 81)` | При создании фильтра с измерением Gender и выборками из него полученный результат составит 0,99805677, если выбран элемент Female, и 0,99847373, если выбран элемент Male. Это обусловлено тем, что выборка исключает все результаты, которые не принадлежат другому значению элемента Gender. |
| `mutualinfo(TOTAL Age, Gender, 1, ValueLoop(25,35))` | 0.68196996. Выбор любого значения из Gender изменит это значение на 0. |
| `mutualinfo({1} TOTAL Age, Salary, 1, null())` | 0.99820986. Независимо от выборок. Выражение множества {1} игнорирует все выборки и измерения. |

Данные, используемые в примерах:

`Salary:` `LOAD  * inline [` `"Employee name"|Age|Gender|Salary` `Aiden Charles|20|Male|25000` `Ann Lindquist|69|Female|58000` `Anna Johansen|37|Female|36000` `Anna Karlsson|42|Female|23000` `Antonio Garcia|20|Male|61000` `Benjamin Smith|42|Male|27000` `Bill Yang|49|Male|50000` `Binh Protzmann|69|Male|21000` `Bob Park|51|Male|54000` `Brenda Davies|25|Male|32000` `Celine Gagnon|48|Female|38000` `Cezar Sandu|50|Male|46000` `Charles Ingvar Jönsson|27|Male|58000` `Charlotte Edberg|45|Female|56000` `Cindy Lynn|69|Female|28000` `Clark Wayne|63|Male|31000` `Daroush Ferrara|31|Male|29000` `David Cooper|37|Male|64000` `David Leg|58|Male|57000` `Eunice Goldblum|31|Female|32000` `Freddy Halvorsen|25|Male|26000` `Gauri Indu|36|Female|46000` `George van Zaant|59|Male|47000` `Glenn Brown|58|Male|40000` `Harry Jones|38|Male|40000` `Helen Brolin|52|Female|66000` `Hiroshi Ito|24|Male|42000` `Ian Underwood|40|Male|45000` `Ingrid Hendrix|63|Female|27000` `Ira Baumel|39|Female|39000` `Jackie Kingsley|23|Female|28000` `Jennica Williams|36|Female|48000` `Jerry Tessel|31|Male|57000` `Jim Bond|50|Male|58000` `Joan Callins|60|Female|65000` `Joan Cleaves|25|Female|61000` `Joe Cheng|61|Male|41000` `John Doe|36|Male|59000` `John Lemon|43|Male|21000` `Karen Helmkey|54|Female|25000` `Karl Berger|38|Male|68000` `Karl Straubaum|30|Male|40000` `Kaya Alpan|32|Female|60000` `Kenneth Finley|21|Male|25000` `Leif Shine|63|Male|70000` `Lennart Skoglund|63|Male|24000` `Leona Korhonen|46|Female|50000` `Lina André|50|Female|65000` `Louis Presley|29|Male|36000` `Luke Langston|50|Male|63000` `Marcus Salvatori|31|Male|46000` `Marie Simon|57|Female|23000` `Mario Rossi|39|Male|62000` `Markus Danzig|26|Male|48000` `Michael Carlen|21|Male|45000` `Michelle Tyson|44|Female|69000` `Mike Ashkenaz|45|Male|68000` `Miro Ito|40|Male|39000` `Nina Mihn|62|Female|57000` `Olivia Nguyen|35|Female|51000` `Olivier Simenon|44|Male|31000` `Östen Ärlig|68|Male|57000` `Pamala Garcia|69|Female|29000` `Paolo Romano|34|Male|45000` `Pat Taylor|67|Female|69000` `Paul Dupont|34|Male|38000` `Peter Smith|56|Male|53000` `Pierre Clouseau|21|Male|37000` `Preben Jørgensen|35|Male|38000` `Rey Jones|65|Female|20000` `Ricardo Gucci|55|Male|65000` `Richard Ranieri|30|Male|64000` `Rob Carsson|46|Male|54000` `Rolf Wesenlund|25|Male|51000` `Ronaldo Costa|64|Male|39000` `Sabrina Richards|57|Female|40000` `Sato Hiromu|35|Male|21000` `Sehoon Daw|57|Male|24000` `Stefan Lind|67|Male|35000` `Steve Cioazzi|58|Male|23000` `Sunil Gupta|45|Male|40000` `Sven Svensson|45|Male|55000` `Tom Lindwall|46|Male|24000` `Tomas Nilsson|27|Male|22000` `Trinity Rizzo|52|Female|48000` `Vanessa Lambert|54|Female|27000` `] (delimiter is '|');`

СОПУТСТВУЮЩИЕ УЧЕБНЫЕ МАТЕРИАЛЫ:

* [Оценка отношений с использованием функции «Взаимная информация»](https://help.qlik.com/lnk/How_evaluate_relationships_using_Mutual_information)

## Подробнее

* [Оценка отношений с использованием функции «Взаимная информация»](https://help.qlik.com/lnk/How_evaluate_relationships_using_Mutual_information)