Как указать контрастную матрицу (в 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.

Ответы:


5

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

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


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

@ Тим «изменение переменных порядка» не означает « любое изменение переменного порядка», но вполне буквально изменения переменного порядка (то есть, один , в частности).
Glen_b
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.