Regresja liniowa ze znanym stałym przechwyceniem w R
Chcę obliczyć regresję liniową za pomocą funkcji lm () W R. dodatkowo chcę uzyskać nachylenie regresji, gdzie jawnie daję intercept lm()
.
Znalazłem przykład w Internecie i próbowałem przeczytać R-help "?lm " (niestety nie jestem w stanie tego zrozumieć), ale nie udało mi się. Czy ktoś może mi powiedzieć, gdzie jest mój błąd?
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 o Twoją pomoc. 3 answers
Można odjąć wyraźne przechwytywanie od regressand i dopasować model bez przechwytywania:
> intercept <- 1.0
> fit <- lm(I(x - intercept) ~ 0 + y, lin)
> summary(fit)
0 +
hamuje dopasowanie przechwytywania przez lm
.
Edytuj aby wykreślić dopasowanie, Użyj
> abline(intercept, coef(fit))
P. S. zmienne w twoim modelu wyglądają źle: zwykle jest to y ~ x
, a nie x ~ y
(tzn. regressand powinien iść po lewej, a regressor (s) po prawej).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 12:52:59
Widzę, że zaakceptowałeś rozwiązanie używając i (). Myślałem, że rozwiązanie oparte na offsecie() byłoby bardziej oczywiste, ale gusta są różne i po pracy nad rozwiązaniem offsetowym mogę docenić ekonomię rozwiązania 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))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-26 20:15:39
Użyłem zarówno offsetu, jak i i (). Uważam również, że offset jest łatwiejszy do pracy (jak BondedDust), ponieważ można ustawić przechwytywanie.
Zakładając, że przechwycenie wynosi 10.
plot (lin$x, lin$y)
fit <-lm(lin$y~0 +lin$x,offset=rep(10,length(lin$x)))
abline(fit,col="blue")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-18 07:45:25