Regresión lineal con una intersección fija conocida en R


Quiero calcular una regresión lineal usando la función lm() en R. Además quiero obtener la pendiente de una regresión, donde doy explícitamente la intersección a lm().

Encontré un ejemplo en Internet y traté de leer el R-help"?lm " (desafortunadamente no soy capaz de entenderlo), pero no tuve éxito. ¿Alguien puede decirme dónde está mi error?

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 por su ayuda.

Author: 李哲源, 2011-09-07

3 answers

Podría restar la intercepción explícita de la regresión y luego ajustar el modelo libre de intercepción:

> intercept <- 1.0
> fit <- lm(I(x - intercept) ~ 0 + y, lin)
> summary(fit)

El 0 + suprime el ajuste de la intersección por lm.

Editar Para trazar el ajuste, utilice

> abline(intercept, coef(fit))

P.d. Las variables en su modelo se ven en la dirección equivocada: por lo general es y ~ x, no x ~ y (es decir, el regressand debe ir a la izquierda y el regressor(s) a la derecha).

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-07 12:52:59

Veo que has aceptado una solución usando I(). Pensé que una solución basada en offset() habría sido más obvia, pero los gustos varían y después de trabajar con la solución offset puedo apreciar la economía de la solución 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-26 20:15:39

He utilizado tanto offset como I(). También encuentro que el desplazamiento es más fácil de trabajar (como BondedDust) ya que puede configurar su intercepción.

Suponiendo que la intercepción es 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-18 07:45:25