Алгоритмы семейства ВАНГА [1] предназначены для заполнения пробелов в таблицах с разнотипными переменными [2].  Начнем  с описания алгоритмов для таблицы, все  n  признаков  в  которой измерены в одной и той же шкале отношений.  
                                                       
Алгоритм  ВАНГА-0.  
  
    Пусть А -  таблица  с  пропущенным  элементом   а(ij).  Все другие элементы  таблицы  известны.  Для  выбора  компетентной подтаблицы размером в  s  строк  и  q  столбцов  воспользуемся следующей процедурой. Выберем элемент a(lk).  На  пересечениях  i-й и l-й  строк  с  j-м  и  k-м  столбцами  находятся  четыре элемента таблицы: a(lk), a(lj), a(ik)  и  неизвестный  элемент a(ij). Если признаки связаны сильной прямой  зависимостью,  то  отношение двух элементов k-го столбца будет таким же или почти таким, как и отношение двух элементов j-го столбца.  Тогда  из предполагаемого равенства отношений a(lk):a(ik) =  a(lj):a(ij) можно получить вариант a'  оценки  ("подсказки")  заполняемого элемента: a'lk = a(lj)*a(ik):a(lk).   Повторив  эту  процедуру для всех других  элементов  таблицы,  мы  получим  (n-1)*(m-1) вариантов  подсказок:   a'11,  a'12,...,  a'lk,...,  a'(n-1)(m-1).  
    Выделим из них подсказки, полученные с участием  элементов l-й строки, и найдем их дисперсию Dl. Величину Ll  =  1:(Dl+1)  примем в качестве меры компетентности l-й строки. Ll достигает  максимального значения 1, если  дисперсия  Dl  равна  нулю,  и убывает с ростом дисперсии, оставаясь положительной величиной.  Аналогично по дисперсии Dk подсказок с участием всех элементов  k-го  столбца  найдем  его  компетентность  Lk   =   1:(Dk+1).  Сформируем компетентную подтаблицу A', включив в нее  s  самых  компетентных строк и q самых компетентных столбцов.  
    Процесс заполнения пробела алгоритмом  ВАНГА-О  состоит  в  следующем. Присоединяем к таблице A' элементы j-го  столбца  и  i-й  строки.  Перебираем  все  четверки   элементов,   которые  находятся на пересечении двух столбцов - j-го и  k-го  и  двух  строк - i-той и l-той. Неизвестный элемент a(ij),  входящий  в  состав  всех  этих  четверок,  вычисляем  по  описанному  выше  способу и получаем s*q вариантов  подсказок:  a'11,  a'21,..., a's1, a'12, a'22,..., a'lk,..., a'sq. Окончательное решение  о значении    пропущенного    элемента    получаем    в     виде средневзвешенной суммы подсказок:                                     
a''(ij) = { Sa'(lk)*L(lk)} / SL(lk)  для l = 1--s и k = 1--q.  
Здесь весовой коэффициент подсказки от элемента (lk) равен его компетентности, определяемой так: L(lk)  =  Li*Lk.      Степень доверия P к полученному решению можно  оценить через величину дисперсии D всех s*q подсказок: P = 1:(D+1).  
                                                
Алгоритм ВАНГА-И.   
  
    Если данные в таблице  А  замерены в шкале интервалов,  то минимальным "подсказывающим" элементом  в  алгоритме   ВАНГА-И  будет подматрица, состоящая из  шести  элементов,  стоящих  на пересечениях двух столбцов  (j и k)  и трех строк  (i-,l-, и  t-й). Инвариантом шкалы интервалов  является отношение разностей двух любых пар элементов одного и того же столбца. Основываясь на этом и  на  гипотезе о  прямой  связи между  j-тым и k-тым столбцами, можно записать:  
{a(ij)-a(lj)}:{a(lj)-a(tj)} = {a(ik)-a(lk)}:{a(lk)-a(tk)}.  
Отсюда получаем вариант подсказки пропущенного элемента:  
a'klt = a(lj) + {[a(lj)-a(tj)]*[a(ik)-a(lk)]:[a(lk)-a(tk)]}.  
Повторив эти операции с участием всех парных сочетаний из (m-1) строк и всех (n-1) столбцов, получим G подсказок.  Выделим подсказки, полученные  с  участием  элементов  l-й строки (их будет (m-2)*(n-1) штук), определим их дисперсию  Dl и  по  ней  -  компетентность  l-той  строки  Ll  =  1/(Dl+1).  
Основываясь на таких оценках, выберем s  наиболее  компетентных строк.  
    Аналогичным способом  найдем  и  q  наиболее  компетентных столбцов, сформировав в итоге компетентную подматрицу s на q. Компетентность каждого элемента этой подматрицы 
L(lk) = Ll*Lk. Описанным выше методом  найдем  подсказки  от  элементов  этой подматрицы  и   получим   окончательный   вариант   заполнения  пропущенного элемента, усреднив подсказки с их с весами L(lk).  О доверии к этому результату можно  судить  по  величине  P  =  1:(D+1), где D -  дисперсия  всех  подсказок  от  компетентной подматрицы.  
  
Алгоритм ВАНГА-П.  
  
    Если все признаки в таблице A измерены в шкале порядка, то пробелы в ней заполняются алгоритмом ВАНГА-П. Преобразуем  все столбцы, приведя их значения к шкале  нормированных  рангов [2]. Инвариантным к преобразованиям шкалы порядка являются суждения такого  рода:  если  a(lk)>a(ik),  то  и  a(lj)>a(ij).  Отсюда получается один из трех возможных вариантов "подсказки": 
 a'ij > a(lj),  если a(ik) > a(lk), 
a'ij = a(lj),  если a(ik) = a(lk) и 
a'ij < a(lj),  если a(ik) < a(lk). 
    Использование всех элементов столбцов j  и  k  даст  (m-1) вариантов  подсказок,  которые  могут  не  совпадать  или   даже противоречить друг другу. Оценивать общий результат  будем  по следующему правилу. Поставим в соответствие m ранговым номерам m накопителей 1, 2,..., v,..., m. Если подсказка говорит,  что неизвестный  элемент  равен  v,  то  добавим  единицу  в   v-й накопитель. Если подсказка говорит, что искомый ранг больше  v,  
то в каждый накопитель с номером, большим v, добавим величину, равную 1:(m-v). Если же подсказка a'ij < v, то в ячейки от  1-й до (v-1)-й добавим величину равную 1:(v-1). В итоге  в  каждой ячейке  накопится  величина,  отражающая  "число  голосов"  за принадлежность предсказываемого  значения  к  тому  или  иному рангу.  После  нормировки  суммы  всех  "голосов"  к   единице неопределенность подсказок можно оценить по энтропии  
           m  
H =  -S pv*log pv ,    где pv - доля голосов за ранг v.  
         v=1  
Компетентность k-го столбца примем равной Lk =  1 : (H+1).  При "единодушном" голосовании за один и тот же ранг  положительная величина Lk достигает максимального значения, равного 1.  
    Если в процессе  работы  со  всеми  столбцами  накапливать  подсказки, получавшиеся при участии элементов  l-й  строки,  то  описанным выше путем можно получить оценку  ее  компетентности Ll.  Пользуясь  этими  оценками  можно  выбрать   компетентную подтаблицу A', содержащую s строк и q столбцов. Компетентность каждого  элемента  a(lk)   этой   подтаблицы   примем   равной L(lk)=Li*Lk.  
    Повторим  определение  подсказок  с  участием   всех   s*q элементов  из  A'.  Теперь  для  получения  общего  результата в  накопители  будем  добавлять  соответствующие  доли  не  от единицы, а от величины L(lk). Распределение набранных  рангами голосов позволяет найти  окончательное  решение:  пропущенному значению присваивается ранг,  набравший  наибольшее  количество голосов.  Энтропия   полученного   распределения   голосов   Н  позволит нам оценить степень доверия P к этому результату: P = 1: (H+1).  
                                                 
Алгоритм ВАНГА-Н.  
  
    Рассмотрим таблицу A, признаки в которой измерены в  шкале наименований. Имя  пропущенного  элемента   а(ij)  может  быть одним из  d  имен (1, 2,..., j,..., d), содержащихся в j-том столбце,  либо  новым (d+1)-м  именем  x.  Просмотрим  все подсказывающие  четверки  элементов, стоящих на пересечении строк i и l и столбцов  j  и k. Подсказку будем искать, исходя из следующего предположения:  если i-й  и  l-й элементы  k-го столбца названы одним и тем же именем, то и в  j-м столбце элементы  i-й и l-й  строк  должны иметь одинаковые имена, т.е. если .
и наоборот, если   
    Найдем подсказки от  всех  (m-1)*(n-1)  таких  четверок  и выберем  подсказки,  полученные  с  участием  элементов   k-го столбца. Подсчитаем среди них число подсказок, голосовавших за каждое из d имен (w+) и против каждого из них  (w-).  Вычтем  голоса "против" из голосов "за": w =  (w+)-(w-).  Добавив  к полученным   результатам    величину    wmin,    получим    d неотрицательных  чисел  w'.   Умножим   их   на   нормирующий коэффициент g, такой, что  Sw'*g = 1  при  f  =  1--d.  Теперь можно найти  энтропию  полученных  значений  Hk  и  через  нее компетентность k-го столбца: Lk =1 : (Hk+1).  
    Собрав подсказки, полученные с участием всех элементов l-й строки, мы аналогичным способом найдем ее  компетентность  Ll. Таким путем выбирается компетентная подтаблица из s строк и q, имеющих  наибольшие  компетентности.  Компетентность   каждого элемента (lk) этой подтаблицы равна L(lk) = Ll*Lk.  
     От каждого элемента подтаблицы получается своя подсказка, которая учитывается в счетчике голосов "за" и "против" с весом соответсвующей компетентности. Если величины wf для всех  имен окажутся  отрицательными, то  делается  вывод   о   том,   что пропущенное имя не входит в состав  d  имеющихся  имен.  Среди имен, имеющих положительную  величину  wf,  выбирается  имя  с wfmax и это имя вставляется в пустую клеточку  таблицы.  Мерой доверия к принятому решению может служить  величина,  найденная через энтропию распределения голосов, как это описано выше.  
     Если в  исходной  таблице  более,  чем  один  пропуск,  то предсказывать можно каждый пропущенный элемент  независимо  от других   ("параллельная"   стратегия)   или    поочередно    с использованием   всех   элементов,   как   исходных,   так   и предсказанных   на   предыдущих   шагах    ("последовательная" стратегия). При последовательной стратегии  нужно  начинать  с предсказания   того   элемента,   для   которого    получаемая степень доверия максимальна.  

Литература:

1. Загоруйко Н.Г.,  Елкина  В.Н.,  Лбов  Г.С.  Алгоритмы обнаружения  эмпирических  закономерностей.   -   Новосибирск: Наука, 1985. - 110 с.  
2.  Супес  П.,  Зинес   Дж.   Основы   теории   измерений / /Психологические измерения.- М.: Мир, 1967.- С. 9-100.