Как применить коэффициент коэффициента для факторов и интерактивных терминов в линейном уравнении?

9

Используя R, я установил линейную модель для одной переменной ответа из смеси непрерывных и дискретных предикторов. Это базовый уровень, но мне трудно понять, как работает коэффициент для дискретного фактора.

Концепция: Очевидно, что коэффициент непрерывной переменной «х» применяется в форме, 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анализируется интерактивный термин. Спасибо, что успокоились.

Trees4theForest
источник

Ответы:

14

Это не проблема, характерная для R. R использует обычное отображение коэффициентов.

Когда вы читаете такой вывод регрессии (в статье, учебнике или из статистического программного обеспечения), вам необходимо знать, какие переменные являются «непрерывными», а какие «категориальными»:

  • «Непрерывные» являются явно числовыми, и их числовые значения использовались как есть в подгонке регрессии.

  • «Категориальные» переменные могут быть любого типа, включая числовые! Что делает их категоричными, так это то, что программное обеспечение рассматривает их как «факторы»: то есть каждое найденное отдельное значение считается показателем чего-то особенного.

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

    Тем не менее, для применения алгоритмов подбора категориальные переменные должны быть представлены в виде чисел. Есть много способов их кодировать . Коды создаются с использованием «фиктивных переменных». Узнайте больше о фиктивной переменной кодирования, выполнив поиск на этом сайте; детали здесь не имеют значения.

В вопросе нам говорят, что это hи fесть категориальные («дискретные») значения. По умолчанию log(d)и aявляются непрерывными. Это все, что нам нужно знать. Модель

Yзнак равно-0.679695+1.791294 журнал(d)+0.870735 если часзнак равночас1-0.447570 если часзнак равночас2+0.542033 если часзнак равночас3+0.037362 a-0.588362 если езнак равное1+0.816825 если езнак равное2+0.534440 если езнак равное3-0.085658 a если часзнак равночас1-0.034970 a если часзнак равночас2-0.040637 a если часзнак равночас3

Правила, применяемые здесь:

  • Термин «перехват», если он появляется, является аддитивной константой (первая строка).

  • Непрерывные переменные умножаются на коэффициенты, даже в «взаимодействиях» подобно h1:a, h2:aи h3:aсроки. (Это отвечает на оригинальный вопрос.)

  • Любая категориальная переменная (или коэффициент) включается только для случаев, когда появляется значение этого фактора.

журнал(d)знак равно2часзнак равночас3aзнак равно-1езнак равное2

Y^знак равно-0,6797+1,7913×(2)+0,5420+0,0374×(-1)+0,8168-0,0406×(-1),

hчас1час2час3(0.870735,-0.447570,0.542033)h(-0.085658,-0.034970,-0.040637)ah:aвзаимодействие; аналогично, fв каждом конкретном случае применяется только один коэффициент .

Whuber
источник
8

Это просто комментарий, но он не подходит как таковой в ограниченные поля редактирования, которые мы имеем в нашем распоряжении.

LATЕИкс

Давайте сначала смоделируем некоторые данные,

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
+0.2099013{б}g1{б}г1знак равноббб01
1
@whuber Изображение выше было обрезано, но есть сноска, напоминающая, что «{c} = 1, если субъект находится в группе c, в противном случае 0» (выбор cможет быть запутанным в этом конкретном случае, потому что я выбираю две буквы для представляют уровни g1, но обычно это довольно интуитивно понятно - и это чистый текст, поэтому мы все равно можем редактировать исходный файл позже). Прилагается еще одно резюме, в которое я внес изменения, g1так что теперь это четырехуровневый фактор. Тем не менее, с 0/1 метками это может быть более запутанным .
ЧЛ
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 прямо перед тем, как ложиться спать ...
блин - Восстановить Монику