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.
Author: 李哲源, 2011-09-07

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).

 35
Author: NPE,
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))
 14
Author: 42-,
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")

 1
Author: stats_lover,
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