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

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

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

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

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

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

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

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

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

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

Синтаксис:

MutualInfo({SetExpression}] [DISTINCT] [TOTAL] target, driver , datatype [, breakdownbyvalue [, samplesize ]])

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

Аргументы:

Аргументы

| Аргумент | Описание |
| --- | --- |
| target, driver | Выражения или поля, содержащие два образца множеств, для которых необходимо измерить взаимную информацию. |
| 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 стоит перед аргументами функции, вычисление выполняется по всем возможным значениям, указанным в текущих выборках, а не только в тех, которые относятся к значению текущего измерения, т. е. измерения диаграммы игнорируются. После префикса TOTAL может быть указан список, включающий одно или несколько имен полей в угловых скобках &lt;fld&gt;. Эти имена полей должны быть поднабором переменных измерений диаграммы.<br><br>[Определение объема агрегирования](https://help.qlik.com/ru-RU/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/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 '|');`