Видимо, у вас какое-то свое расстояние Варда, не совпадающее с тем, которое придумал сам Вард.
Расстояние Варда у меня точно такое-же, как в программах Mathematica и Statistica. Просто если в качестве расстояний между элементами взять квадраты расстояний между ними, то действительно, расстояние Варда сведется к разнице между суммой квадратов отклонений элементов от центра объединенного кластера и суммой квадратов отклонений элементов двух объединяемых кластеров от центров этих кластеров. Это не совсем дисперсии, как Вы пытались написать ранее. Но дело не в этом. Просто метод Варда может применяться не только для квадратов расстояний, но и для любых способов расчета расстояний между элементами кластеризуемой совокупности, включая корреляционное расстояние и расстояние косинуса. Тогда первоначальный смысл дисперсионного анализа теряется, но смысл расстояния между кластерами все равно остается. Т.е. трактовка расстояния Варда как разница дисперсий не более чем частный случай метода Варда.
В таком случае мне не удастся оказать вам помощь.
А уже и не надо - вот искомые коэффициенты
Если есть желание проверить, вот код для Математики:
генерируем матрицу расстояний и кластеризуем штатными средствами
Код:
Needs["HierarchicalClustering`"]
n = 9;
d = Round[Abs[1 - Correlation[RandomReal[{0, 1}, {n + 1, n}]]]*200];
cl = DirectAgglomerate[d, Linkage -> "Ward"];
DendrogramPlot[cl, LeafLabels -> (# &)]
cl[[3]]
считаем то-же расстояние по приведенной выше формуле
Код:
cs = ClusterSplit[cl, 2];
{A, B} = {ClusterFlatten[cs[[1]]], ClusterFlatten[cs[[2]]]};
na = Length[A];
nb = Length[B];
SSa = Sum[d[[i, j]], {i, A}, {j, A}];
SSb = Sum[d[[i, j]], {i, B}, {j, B}];
SSab = Sum[d[[i, j]], {i, A}, {j, B}];
(1/(na + nb) - 1/na) SSa + 2 SSab/(na + nb) + (1/(na + nb) - 1/nb) SSb
Заметьте: на входе только расстояния, и не важно, что берется в качестве этих расстояний. Собственно, программы так и считают - сначала матрицу расстояний, а потом по этой матрице объединяют - на этапе агломерации сами элементы уже не присутствуют.