Як вказати контрастну матрицю (в R) для різниці між рівнем і середнім рівнем інших?


9

У мене є регресійна модель, яка виглядає приблизно так:

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

... або у позначенні R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3

Скажімо X1 і X2 є категоричними змінними та X3є числовим. Ускладнення полягає в томуX1 має три рівні X1a,X1b,X1c і замість стандартних контрастів мені потрібно перевірити:

  • Чи перехоплення рівня X1a значно відрізняється від середнього перехоплення рівнів X1b і X1c.
  • Будь реакція X2 значно відрізняється між рівнем X1a і середнє значення рівнів X1b і X1c.
  • Будь схил X3 значно відрізняється між рівнем X1a і середнє значення рівнів X1b і X1c.

На основі цієї публікації здається, що матриця, яку я хочу, це ...

 2
-1
-1

Так я і роблю contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1))). Оцінкаβ1зміни, але так роблять і інші. Я можу відтворити нову оцінкуbeta1 відніманням прогнозованих значень X1b і X1c група означає (коли X3=0 і X2 знаходиться на його еталонному рівні) удвічі більше значення X1aна цих рівнях. Але я не можу вірити, що я вказав свою контрастну матрицю правильно, якщо я також не можу аналогічно отримати інші коефіцієнти.

Хтось має поради, як обернути голову навколо зв’язку між засобами клітини та контрастами? Дякую. Чи є стандартна назва цього типу контрасту?


Ага! Відповідно до посилання, розміщеного у відповіді 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". Вони еквівалентні зміні порядку змінних.


Якщо еквівалент "до зміни змінного порядку" повинен бути "дано обернення порядку рівнів"? Отже, щоб отримати тип шлема SAS / SPSS (порівняти із середнім рівнем решти рівнів), треба було б або змінити порядок рівнів відповідного фактора, або rev () кожен стовпець потім rev () кожен рядок матриці повернуто contra.helmert?
час

@tim "зміна змінного порядку" не означає " будь-яку зміну змінного порядку", а буквально зміна змінного порядку (тобто, один , зокрема).
Glen_b -Встановіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.