Quiero calcular una regresión lineal utilizando la lm() en función de R. Además quiero obtener la pendiente de una regresión, donde me expresamente la intersección para lm().

He encontrado un ejemplo en el internet y traté de leer la R-help «?»lm» (por desgracia yo no soy capaz de entenderlo), pero no lo he conseguido. ¿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.

InformationsquelleAutor R_User | 2011-09-07

3 Comentarios

  1. 38

    Podría restar el explícito de intercepción de la regressand y, a continuación, ajuste la intersección libre de modelo:

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

    La 0 + suprime el acondicionamiento de la intersección por lm.

    editar Para trazar el ajuste, utilice

    > abline(intercept, coef(fit))

    P. S. las variables en El modelo se vea al revés: suele y ~ x, no x ~ y (es decir, el regressand debe ir a la izquierda y el regresor(s) a la derecha).

    • o I(x - 1.0)~ y-1 surpresses el acondicionamiento de la intersección así.
    • Meys: Sí. Yo creo que las dos formas son sinónimos. He elegido el otro camino para evitar tener dos -1 términos y tener que explicar cual es cual.
    • Pero cuando me parcela de la regresión de la curva de abline(regExp, col=»green»), no ir a través de 1. No he descubierto la manera de extraer la pendiente (y/o interceptar) de la película de salida. Para mee parece que siempre tiene que conocer la posición de los valores en el coeficiente de matriz, y de extraer en (y la esperanza de que la posición es la correcta). Esto es así, el siguiente código de la «forma de oro» para graficar la correcta curva de regresión? abline(b=coef(regExp)[1], a= explicitIntercept, col="green")
    • coef(fit)) parcelas de la fit (aquí, 1.0 es el explícito interceptar). He actualizado la respuesta a incluir este.
    • Véase también el offset argumento.
    • offset puede ser utilizado como un argumento o como un término en el modelo. (Se fueron de publicar tu comentario como el mismo tiempo que yo estaba ofreciendo una alternativa de respuesta.)
    • fit = lm(x~0+y, lin) va a tener el efecto de obligar a la línea que pasa por el origen, entonces? Gracias.
    • no, y - 1 voluntad. Trate de abline(lm(x ~ y - 1, data=lin)).

  2. 14

    Veo que has aceptado una solución con el uso de I(). Yo había pensado que un desplazamiento() basado en la solución habría sido más evidente, pero los gustos varían y después de trabajar a través de la compensación de solución, puedo apreciar la economía de la I() solución:

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

    He utilizado tanto el offset y la I(). También me parece desplazamiento más fácil trabajar (como BondedDust), ya que puede establecer su intercepción.

    Suponiendo que es Interceptar 10.

    plot (lin$x, lin$y)
    fit <-lm(lin$y~0 +lin$x,offset=rep(10,length(lin$x)))
    abline(fit,col="blue")

Dejar respuesta

Please enter your comment!
Please enter your name here