Показать семейный класс в TukeyHSD - PullRequest
0 голосов
/ 26 июня 2018

Я привык проводить специальные тесты Tukey в minitab. Когда я это делаю, я обычно получаю семейную группировку зависимых / предикторных переменных.

Minitab Output - Tukey Pairwise

В R с использованием TukeyHSD() группировка семейства не отображается (или не рассчитывается?). Он только отображает отношения между каждой из зависимых / предикторных переменных. Можно ли отобразить семейные группы как в minitab?

Использование набора данных diamonds:

av <- aov(price ~ cut, data = diamonds)
tk <- TukeyHSD(av, ordered = T, which = "cut")
plot(tk)

Выход:

Fit: aov(formula = price ~ cut, data = diamonds)

$cut
                    diff        lwr       upr     p adj
Good-Ideal         471.32248  300.28228  642.3627 0.0000000
Very Good-Ideal    524.21792  401.33117  647.1047 0.0000000
Fair-Ideal         901.21579  621.86019 1180.5714 0.0000000
Premium-Ideal     1126.71573 1008.80880 1244.6227 0.0000000
Very Good-Good      52.89544 -130.15186  235.9427 0.9341158
Fair-Good          429.89331  119.33783  740.4488 0.0014980
Premium-Good       655.39325  475.65120  835.1353 0.0000000
Fair-Very Good     376.99787   90.13360  663.8622 0.0031094
Premium-Very Good  602.49781  467.76249  737.2331 0.0000000
Premium-Fair       225.49994  -59.26664  510.2665 0.1950425

Изображение добавлено, чтобы уточнить мой ответ на комментарий Маруитса: enter image description here

1 Ответ

0 голосов
/ 27 июня 2018

Ниже приведен пошаговый пример воспроизведения таблицы minitab для набора данных ggplot2::diamonds. Я включил детали / объяснения в максимально возможной степени.

Обратите внимание, что, насколько я могу судить, результаты, показанные в таблице minitab, не зависят / не связаны с результатами специального теста Тьюки; они основаны на результатах анализа отклонений. Тест честных значимых различий (HSD) Тьюки - это специальный тест, который устанавливает, какие сравнения (из всех возможных парных сравнений средних групп) (честно) статистически значимы, учитывая результаты ANOVA.


Для того чтобы воспроизвести сводную таблицу «средняя группировка» мини-таблиц (см. первую таблицу «Интерпретация результатов: шаг 3» Экспресс-поддержки minitab ), я рекомендую (повторно) запустить линейная модель для извлечения средних и доверительных интервалов. Обратите внимание, что именно так aov подходит для анализа дисперсионной модели для каждой группы.

Fit линейная модель

Мы указываем смещение 0, чтобы получить абсолютные оценки для каждой группы (а не оценки изменений относительно смещения).

fit <- lm(price ~ 0 + cut, data = diamonds)
coef <- summary(fit)$coef;
coef;
#    Estimate Std. Error   t value Pr(>|t|)
#cutFair      4358.758   98.78795  44.12236        0
#cutGood      3928.864   56.59175  69.42468        0
#cutVery Good 3981.760   36.06181 110.41487        0
#cutPremium   4584.258   33.75352 135.81570        0
#cutIdeal     3457.542   27.00121 128.05137        0

Определение семейных групп

Чтобы получить нечто похожее на «семейные группировки» minitab, мы используем следующий подход:

  1. Рассчитать доверительные интервалы для всех параметров
  2. Выполнение анализа иерархической кластеризации данных доверительного интервала для всех параметров
  3. Вырежьте получившееся дерево на высоте, соответствующей стандартному отклонению элементов конфигурации. Это даст нам группировку оценок параметров на основе их доверительных интервалов. Это несколько эмпирический подход, но он оправдан, поскольку дерево измеряет попарные расстояния между доверительными интервалами, и стандартное отклонение можно интерпретировать как евклидово расстояние .

Мы начнем с вычисления доверительного интервала и кластеризации полученной матрицы расстояний, используя иерархическую кластеризацию, используя полную связь.

CI <- confint(fit);
hc <- hclust(dist(CI));

Проверяем кластерную дендрограмму

plot(hc);

enter image description here

Теперь мы срезаем дерево на высоте, соответствующей стандартному отклонению всех элементов конфигурации для всех оценок параметров, чтобы получить «группировки по семействам»

grps <- cutree(hc, h = sd(CI))

Подвести итоги

Наконец, мы сопоставляем все количества и сохраняем результаты в таблице, аналогичной таблице minitab «средняя группировка».

library(tidyverse)
bind_cols(
    cut = rownames(coef),
    N = as.integer(table(fit$model$cut)),
    Mean = coef[, 1],
    Groupings = grps) %>%
    as.data.frame()
#           cut     N     Mean Groupings
#1      cutFair  1610 4358.758         1
#2      cutGood  4906 3928.864         2
#3 cutVery Good 12082 3981.760         2
#4   cutPremium 13791 4584.258         1
#5     cutIdeal 21551 3457.542         3

Обратите внимание на почти идеальное совпадение наших результатов с результатами из таблицы "средних групп" minitab: cut = Ideal сам по себе в группе 3 (группа C в таблице minitab), а Fair + Premium общая группа 1 (minitab: группа A) и Good + Very Good общая группа 2 (minitab: группа B).

...