# MutualInfo - 图表函数

MutualInfo 计算 Aggr() 中两个字段之间或聚合值之间的互信息（MI）。

MutualInfo 返回两个数据集的聚合互信息。这允许在字段和潜在驱动因素之间进行关键驱动因素分析。互信息是数据集之间关系的一种度量，并为在图表维度上迭代的 (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' 用于 discrete:discrete<br><br>2 或 'cc' 用于 continuous:continuous<br><br>3 或 'cd' 用于 continuous:discrete<br><br>4 或 'dc' 用于 discrete:continuous<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/zh-CN/cloud-services/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 的筛选器窗格，并在其中做出选择，则在选择 Female 时，您将看到结果 0.99805677；在选择 Male 时，您将看到结果 0.99847373。这是因为此选择项排除了不属于 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)