Линейная регрессия с известным фиксированным перехватом в R
Я хочу вычислить линейную регрессию, используя функцию lm () в R. Кроме того, я хочу получить наклон регрессии, где я явно даю перехват lm()
.
Я нашел пример в интернете, и я попытался прочитать R-help "?lm "(к сожалению, я не могу этого понять), но мне это не удалось. Кто-нибудь может сказать мне, где моя ошибка?
lin <- data.frame(x = c(0:6), y = c(0.3, 0.1, 0.9, 3.1, 5, 4.9, 6.2))
plot (lin$x, lin$y)
regImp = lm(formula = lin$x ~ lin$y)
abline(regImp, col="blue")
# Does not work:
# Use 1 as intercept
explicitIntercept = rep(1, length(lin$x))
regExp = lm(formula = lin$x ~ lin$y + explicitIntercept)
abline(regExp, col="green")
Thanls для вашей помощи.
3 ответов
вы можете вычесть явный Перехват из регрессанда, а затем соответствовать модели без перехвата:
> intercept <- 1.0
> fit <- lm(I(x - intercept) ~ 0 + y, lin)
> summary(fit)
на 0 +
подавляет установку перехвата lm
.
редактировать для построения подгонки используйте
> abline(intercept, coef(fit))
С. П. переменных в вашей модели выглядеть не так: обычно y ~ x
, а не x ~ y
(т. е. регресс и должен идти слева, а регрессор(ы) справа).
Я вижу, что вы приняли решение, используя I(). Я думал, что решение на основе offset () было бы более очевидным, но вкусы различаются, и после работы с решением offset я могу оценить экономичность решения I ():
with(lin, plot(y,x) )
lm_shift_up <- lm(x ~ y +0 +
offset(rep(1, nrow(lin))),
data=lin)
abline(1,coef(lm_shift_up))
я использовал как offset, так и I(). Я также нахожу смещение легче работать с (например, BondedDust), так как вы можете установить свой перехват.
предполагая, что перехват равен 10.
plot (lin$x, lin$y)
fit <-lm(lin$y~0 +lin$x,offset=rep(10,length(lin$x)))
abline(fit,col="blue")