Как указать контрастную матрицу (в R) для разницы между одним уровнем и средним по другим?

9

У меня есть модель регрессии, которая выглядит следующим образом:

Y=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

... или в обозначении R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Допустим, и являются категориальными переменными, а - числовыми. Сложность состоит в том, что имеет три уровня и вместо стандартных контрастов мне нужно проверить:X1X2X3X1X1a,X1b,X1c

  • Существенно ли отличается перехват для уровня от среднего перехвата для уровней и .X1aX1bX1c
  • Значительно ли отличается ответ между уровнем и средним значением уровней и .X2X1aX1bX1c
  • Значительно ли отличается наклон между уровнем и средним значением уровней и .X3X1aX1bX1c

Исходя из этого поста, кажется, что матрица, которую я хочу ...

 2
-1
-1

Я так и делаю contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1))). Оценка меняется, как и другие. Я могу воспроизвести новую оценку , вычтя предсказанные значения значений групп и (когда и находится на своем эталонном уровне) из двойного значения на этих уровнях. Но я не могу поверить, что я правильно указал свою контрастную матрицу, если я не могу также аналогичным образом вывести другие коэффициенты.β1beta1X1bX1cX3=0X2X1a

Кто-нибудь есть какой-нибудь совет о том, как обернуть мою голову вокруг отношений между клеточными средствами и контрастами? Спасибо. Есть ли стандартное название для этого типа контраста?


Ага! В соответствии с ссылкой, размещенной в ответе Glen_b , суть в том, что вы можете преобразовать ЛЮБОЕ сравнение групповых значений, которые вы хотите, в контрастный атрибут в стиле R следующим образом:

  1. Сделайте квадратную матрицу. Строки представляют уровни вашего фактора, а столбцы представляют контрасты. За исключением первого, которое сообщает модели, что должен представлять перехват.
  2. Если вы хотите, чтобы ваш перехват был средним значением, заполните первый столбец одним и тем же ненулевым значением, не важно, что. Если вы хотите, чтобы перехват был одним из средств уровня, поместите число в эту строку и заполните остальные нулями. Если вы хотите, чтобы перехват был средним для нескольких уровней, поместите числа в эти строки и нули в остальные. Если вы хотите, чтобы это было средневзвешенное значение, используйте разные числа, в противном случае используйте одно и то же число. Вы можете даже ввести отрицательные значения в столбец перехвата, что, вероятно, тоже что-то значит, но это полностью меняет другие контрасты, поэтому я понятия не имею, для чего это нужно
  3. Заполните остальные столбцы положительными и отрицательными значениями, указывающими, какие уровни вы хотите сравнить с другими. Я забыл, почему суммирование до нуля важно, но отрегулируйте значения так, чтобы столбцы суммировали до нуля.
  4. Транспонировать матрицу с помощью t()функции.
  5. Используйте ginv()из MASSпакета или, solve()чтобы получить обратную транспонированную матрицу.
  6. Оставьте первый столбец, например mycontrast<-mycontrast[,-1]. Теперь у вас есть матрица apx p-1, но информация, которую вы вводите для перехвата, была закодирована в матрице в целом на шаге 5.
  7. Если вы хотите, чтобы надписи в итоговом выводе были более приятными для чтения, чем lm()вывод по умолчанию и др., Соответствующим образом назовите столбцы вашей матрицы. Однако, перехват всегда будет автоматически назван (Intercept).
  8. Сделайте вашу матрицу новым контрастом для рассматриваемого фактора, например contrasts(mydata$myfactor)<-mymatrix
  9. Запуск lm()(и , возможно , много других функций , которые используют формулы) , как обычно в стандартном R без нагрузки glht, doBy, или contrasts.

Glen_b, спасибо и спасибо UCLA Статистическая Консалтинговая Группа. Мой специалист по прикладной статистике провел несколько дней, размахивая рукой по этой теме, и я все еще не знал, как на самом деле написать свою собственную контрастную матрицу. И вот, час чтения и игры с R, и я наконец-то думаю, что понял. Думаю, мне следовало обратиться в UCLA. Или Университет StackExchange.

f1r3br4nd
источник

Ответы:

5

Это сравнение одной со средним значением всех более поздних переменных (помимо масштаба) называется кодированием Гельмерта или контрастами Гельмерта . Тот, который вы даете, является первым контрастом, другой будет уменьшенной версией .(0,1,1)

То, что R называет кодированием Helmert, это называет «обратным Helmert». Они эквивалентны вплоть до изменения порядка переменных.

Glen_b - Восстановить Монику
источник
Должен ли эквивалент «вплоть до изменения порядка переменных» быть «задан смена порядка уровней»? Таким образом, чтобы получить тип Helmert типа SAS / SPSS (сравните со средним значением оставшихся уровней), нужно либо изменить порядок уровней соответствующего коэффициента, либо rev () каждого столбца, а затем rev () каждой строки матрицы вернулся contra.helmert?
Тим
@ Тим «изменение переменных порядка» не означает « любое изменение переменного порядка», но вполне буквально изменения переменного порядка (то есть, один , в частности).
Glen_b