Як застосувати коефіцієнт коефіцієнта для факторів та інтерактивних доданків у лінійному рівнянні?


9

Використовуючи R, я встановив лінійну модель для однієї змінної відгуку з суміші безперервних та дискретних предикторів. Це є базовим, але я маю труднощі зрозуміти, як працює коефіцієнт для дискретного коефіцієнта.

Поняття: Очевидно, що коефіцієнт неперервної змінної 'x' застосовується у формі, y = coefx(varx) + interceptале як це працює для коефіцієнта z, якщо коефіцієнт нечисловий?y = coefx(varx) + coefz(factorz???) + intercept

Конкретні: Я встановив модель в R як lm(log(c) ~ log(d) + h + a + f + h:a)де hі fє дискретні нечислові фактори. Коефіцієнти:

Coefficients:
              Estimate 
(Intercept)  -0.679695 
log(d)        1.791294 
h1            0.870735  
h2           -0.447570  
h3            0.542033   
a             0.037362  
f1           -0.588362  
f2            0.816825 
f3            0.534440
h1:a         -0.085658
h2:a         -0.034970 
h3:a         -0.040637

Як їх використовувати для створення прогнозного рівняння:

log(c) =  1.791294(log(d)) + 0.037362(a) + h??? + f???? + h:a???? + -0.679695

Або я роблю це неправильно?

Я думаю, що це поняття, якщо предмет підпадає під категорію, h1і f2рівняння стає:

log(c) =  1.791294(log(d)) + 0.037362(a) +  0.870735  + 0.816825  + h:a???? + -0.679695

Але мені справді не зрозуміло, як h:aрозбирається інтерактивний термін. Дякую за те, що ти мені просто пішов

Відповіді:


14

Це не проблема, характерна для R. R використовує звичайне відображення коефіцієнтів.

Коли ви читаєте такі результати регресії (в папері, підручнику чи зі статистичного програмного забезпечення), вам потрібно знати, які змінні є "безперервними", а які "категоричними":

  • "Безперервні" є явно числовими, і їх числові значення використовувались як є в регресійному примірнику.

  • "Категоричні" змінні можуть бути будь-якого типу, включаючи числові! Те, що робить їх категоричними, полягає в тому, що програмне забезпечення розглядало їх як "фактори": тобто кожне окреме значення, яке знайдено, вважається показником чогось виразного.

    Більшість програмного забезпечення розглядатиме нечислові значення (наприклад, рядки) як фактори. Більшість програмного забезпечення може бути переконана трактувати числові значення як фактори. Наприклад, код поштової служби (Поштовий індекс у США) виглядає як номер, але насправді є лише кодом для набору поштових скриньок; не було б сенсу додавати, віднімати та множувати поштові індекси на інші числа! (Ця гнучкість є джерелом поширеної помилки: якщо ви не будьте обережні чи мимовільні, ваше програмне забезпечення може ставитися до змінної, яку ви вважаєте категоричною як безперервну, або навпаки. Будьте уважні!)

    Тим не менш, категоричні змінні повинні бути певним чином представлені як числа, щоб застосувати відповідні алгоритми. Існує багато способів їх кодування . Коди створюються за допомогою "фіктивних змінних". Дізнайтеся більше про фіксовану змінну кодування за допомогою пошуку на цьому сайті; деталі тут не мають значення.

У питанні нам сказано, що це hі fкатегоричні ("дискретні") значення. За замовчуванням, log(d)і aбезперервні. Це все, що нам потрібно знати. Модель є

y=0.679695+1.791294 log(d)+0.870735 if h=h10.447570 if h=h2+0.542033 if h=h3+0.037362 a0.588362 if f=f1+0.816825 if f=f2+0.534440 if f=f30.085658 a if h=h10.034970 a if h=h20.040637 a if h=h3

Тут застосовуються правила:

  • Термін "перехоплення", якщо він з'явиться, є адитивною константою (перший рядок).

  • Безперервні змінні множаться на коефіцієнти, навіть в «взаємодіях» подібно h1:a, h2:aі h3:aтерміни. (Це відповідає на початкове запитання.)

  • Будь-яка категорична змінна (або коефіцієнт) включається лише у випадках, коли відображається значення цього коефіцієнта.

Наприклад, припустимо, що , , і . Встановлене значення в цій моделі становитьlog(d)=2h=h3a=1f=f2

y^=0.6797+1.7913×(2)+0.5420+0.0374×(1)+0.81680.0406×(1).

Зверніть увагу , як більшість з коефіцієнтів моделі просто не з'являється в розрахунку, тому що hможе взяти на себе рівно одне з трьох значень , , і , отже , тільки один з трьох коефіцієнтів відносяться і тільки один із трьох коефіцієнтів при взаємодії помножиться ; аналогічно, у будь-якому конкретному випадку застосовується лише один коефіцієнт .h1h2h3(0.870735,0.447570,0.542033)h(0.085658,0.034970,0.040637)ah:af


8

Це лише коментар, але він не впишеться як такий у обмежені поля редагування, які ми маємо в розпорядженні.

Мені подобається, що рівняння регресії чітко написано простим текстом, як це робив @whuber у своїй відповіді. Ось швидкий шлях до цього в R, з пакетом Hmisc . (Я також використовую rms , але це насправді не має значення.) В основному, це лише передбачає, що на вашій машині доступна система набору .LATEX

Давайте спочатку змоделюємо деякі дані,

n <- 200
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
g1 <- gl(2, 100, n, labels=letters[1:2])
g2 <- cut2(runif(n), g=4)
y <- x1 + x2 + rnorm(200)

потім підходимо до регресійної моделі,

f <- ols(y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

що дає такі результати:

Linear Regression Model

ols(formula = y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs      200    LR chi2     35.22    R2       0.161    
sigma 0.9887    d.f.            8    R2 adj   0.126    
d.f.     191    Pr(> chi2) 0.0000    g        0.487    

Residuals

    Min      1Q  Median      3Q     Max 
-3.1642 -0.7109  0.1015  0.7363  2.7342 

                   Coef    S.E.   t     Pr(>|t|)
Intercept           0.0540 0.2932  0.18 0.8541  
x1                  1.1414 0.3642  3.13 0.0020  
x2                  0.8546 0.2331  3.67 0.0003  
x3                 -0.0048 0.2472 -0.02 0.9844  
g1=b                0.2099 0.2895  0.73 0.4692  
g2=[0.23278,0.553)  0.0609 0.1988  0.31 0.7598  
g2=[0.55315,0.777) -0.2615 0.1987 -1.32 0.1896  
g2=[0.77742,0.985] -0.2107 0.1986 -1.06 0.2901  
x1 * g1=b          -0.2354 0.5020 -0.47 0.6396  

Потім, щоб надрукувати відповідне рівняння регресії, просто використовуйте загальну latexфункцію, наприклад:

latex(f)

Після перетворення dvi в png ви повинні отримати щось подібне

введіть тут опис зображення

ІМО, в цьому заслуга показує, як обчислювати прогнозовані значення залежно від фактичних чи вибраних значень для числових та категоричних предикторів. Для останнього рівні фактора вказуються в дужці поблизу відповідного коефіцієнта.


1
+1 Це гарна можливість. Синтаксис термінів на зразок , однак, потенційно заплутаний: між цим виразом і категоріальною змінною немає очевидного зв’язку , а також не зовсім очевидно, що дійсно означає показник, що а не для числового значення ! (Тут дійсно означає "b" - літера - що може бути достатнім попередженням, але коли категорії кодуються цифрами, такими як і , слідкуйте ...)+0.2099013{b}g1{b}g1=bbb01
whuber

1
@whuber Наведене вище зображення було вирізане, але є якась виноска, яка нагадує, що "{c} = 1, якщо суб'єкт входить до групи c, 0 в іншому випадку" (вибір cможе бути заплутаним у цьому конкретному випадку, тому що я вибираю дві літери до представляють рівні g1, але зазвичай це досить інтуїтивно - і це чистий текс, тому ми можемо згодом редагувати вихідний файл). Додано ще одне резюме, де я змінив g1так, що він тепер є чотирирівневим фактором. Тим не менш, з позначками 0/1, які можуть бути більш заплутаними .
chl

5

Ви можете перевірити свої "контрасти" за замовчуванням, options()шукаючи:

$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly" 

Якщо ваші невпорядковані контрасти встановлені так contr.treatment(як вони повинні бути, якщо ви їх не змінили), то перший рівень кожного з ваших факторів буде встановлений як базовий. Вам будуть дані лише оцінки коефіцієнтів перед фіксованими змінними, створеними для інших рівнів коефіцієнта. Фактично, ці коефіцієнти будуть "наскільки різними в середньому є змінна відповідь на цьому рівні коефіцієнта порівняно з базовим рівнем фактора, контролюючи все інше в моделі".

Я здогадуюсь з ваших результатів, є a h0і f0які є базовими рівнями для h і f (якщо у вас немає опції за замовчуванням для контрастів; у такому випадку є кілька можливостей; спробуйте ?contr.treatmentдопомогти).

Це аналогічно взаємодії. Якщо мій попередній абзац правильний, оцінка, наведена для a, дійсно буде нахилом, aколи h=h0. Оцінки, наведені в резюме, що стосуються взаємодій, на скільки змінюється нахил для різних рівнів h.

Тож у вашому прикладі, де h = h1 і f = f2, спробуйте:

log(c) =  1.791294(log(d)) + (0.037362 - 0.085658) (a) +  0.870735  + 0.816825  -0.679695

О, і ти можеш використовувати predict()багато корисних справ теж ... якщо ти насправді хочеш щось передбачити (а не виписувати рівняння для звіту). Спробуйте ?predict.lmпобачити, що predict()робить об’єкт, створений lm.


+1 (насправді, я звернувся до цього місяця назад, і якраз зараз його перечитав) у будь-якому випадку, мені здається, що ви рекомендуєте перевірити тип контрасту за допомогою options(). Вам доведеться прокрутити багато мотлоху, щоб знайти те, що вам потрібно. Ви можете спробувати options()$contrasts, який видасть лише те, що ви хочете.
gung - Відновіть Моніку

гарна пропозиція, мій мозок, мабуть, спав.
Пітер Елліс

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