Видалення перехоплення - це інша модель, але є чимало прикладів, коли це законно. Поки що відповіді детально обговорювали на прикладі, коли справжній перехоплення дорівнює 0. Я зупинюсь на кількох прикладах, де нас може зацікавити нетипова параметризація моделі.
Приклад 1: Модель у стилі ANOVA Для категоричних змінних ми зазвичай створюємо бінарні вектори, що кодують членство в групі. Стандартна модель регресії параметризована як перехоплення + k - 1 фіктивних векторів. Перехоплення кодує очікуване значення для "еталонної" групи або опущеного вектора, а решта векторів перевіряють різницю між кожною групою та еталонною. Але в деяких випадках може бути корисним очікуване значення кожної групи.
dat <- mtcars
dat$vs <- factor(dat$vs)
## intercept model: vs coefficient becomes difference
lm(mpg ~ vs + hp, data = dat)
Coefficients:
(Intercept) vs1 hp
26.96300 2.57622 -0.05453
## no intercept: two vs coefficients, conditional expectations for both groups
lm(mpg ~ 0 + vs + hp, data = dat)
Coefficients:
vs0 vs1 hp
26.96300 29.53922 -0.05453
Приклад 2: Випадок стандартизованих даних. У деяких випадках можна працювати зі стандартизованими даними. У цьому випадку перехоплення дорівнює 0 за задумом. Я думаю, що класичним прикладом цього були моделі структурного рівняння старого стилю або коефіцієнт, які діяли саме на матрицях коваріації даних. У нижченаведеному випадку, напевно, добре б оцінити перехоплення в будь-якому разі, якби тільки упустити додатковий ступінь свободи (яку ви справді повинні були втратити, оскільки середня оцінка була оцінена), але є кілька ситуацій, коли конструкція, засоби можуть бути 0 (наприклад, певні експерименти, коли учасники присвоюють рейтинги, але обмежені для надання рівних позитивів і негативів).
dat <- as.data.frame(scale(mtcars))
## intercept is 0 by design
lm(mpg ~ hp + wt, data = dat)
Coefficients:
(Intercept) hp wt
3.813e-17 -3.615e-01 -6.296e-01
## leaving the intercept out
lm(mpg ~ 0 + hp + wt, data = dat)
Coefficients:
hp wt
-0.3615 -0.6296
Приклад 3: Багатовимірні моделі та приховані перехоплення. Цей приклад багато в чому схожий на перший. У цьому випадку дані складені таким чином, що дві різні змінні зараз знаходяться в одному довгому векторі. Друга змінна кодує інформацію про те , вектор відгуку, y
належить mpg
або disp
. У цьому випадку, щоб отримати окремі перехоплення для кожного результату, ви пригнічуєте загальний перехоплення і включаєте обидва манекени вектора для вимірювання. Це свого роду багатоваріантний аналіз. Зазвичай це не робиться за допомогоюlm()
тому що ви повторили заходи і, ймовірно, повинні враховувати невідповідність. Однак є деякі цікаві випадки, коли це необхідно. Наприклад, при спробі зробити посередницький аналіз із випадковими ефектами, щоб отримати матрицю повної коріантності дисперсії, потрібні обидві моделі, що оцінюються одночасно, що може бути зроблено шляхом складання даних і певного розумного використання макетних векторів.
## stack data for multivariate analysis
dat <- reshape(mtcars, varying = c(1, 3), v.names = "y",
timevar = "measure", times = c("mpg", "disp"), direction = "long")
dat$measure <- factor(dat$measure)
## two regressions with intercepts only
lm(cbind(mpg, disp) ~ 1, data = mtcars)
Coefficients:
mpg disp
(Intercept) 20.09 230.72
## using the stacked data, measure is difference between outcome means
lm(y ~ measure, data = dat)
Coefficients:
(Intercept) measurempg
230.7 -210.6
## separate 'intercept' for each outcome
lm(y ~ 0 + measure, data = dat)
Coefficients:
measuredisp measurempg
230.72 20.09
Я не стверджую, що перехоплення, як правило, слід видаляти, але добре бути гнучкими.