Como notó correctamente, la diferencia original se debe a que en el primer caso usa los polinomios "en bruto" mientras que en el segundo caso usa los polinomios ortogonales. Por lo tanto, si la lm
llamada posterior se modificara en: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)
obtendríamos los mismos resultados entre fit
y fit3
. La razón por la que obtenemos los mismos resultados en este caso es "trivial"; Nos ajustamos exactamente al mismo modelo que teníamos fit<-lm(y~.-1,data=x_exp)
, sin sorpresas.
Uno puede verificar fácilmente que las matrices de modelos de los dos modelos sean las mismas all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE
).
Lo que es más interesante es por qué obtendrá los mismos gráficos al usar una intersección. Lo primero que debe notar es que, al ajustar un modelo con una intersección
En el caso de fit2
, simplemente movemos las predicciones del modelo verticalmente; La forma real de la curva es la misma.
Por otro lado, incluir una intersección en el caso de los fit
resultados en no solo una línea diferente en términos de ubicación vertical sino con una forma totalmente diferente en general.
Podemos ver eso fácilmente simplemente agregando los siguientes ajustes en la trama existente.
fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)
fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')
OK ... ¿Por qué los ajustes sin intersección son diferentes mientras que los ajustes con intersección son los mismos? La captura vuelve a estar en la condición de ortogonalidad.
En el caso de que fit_b
la matriz modelo utilizada contenga elementos no ortogonales, la matriz de Gram crossprod( model.matrix(fit_b) )
está lejos de ser diagonal; en el caso de fit2_b
los elementos son ortogonales ( crossprod( model.matrix(fit2_b) )
es efectivamente diagonal).
Como tal, en el caso de fit
cuando lo expandimos para incluir una intersección fit_b
, cambiamos las entradas fuera de la diagonal de la matriz de Gram y, por lo tanto, el ajuste resultante es diferente en su conjunto (curvatura, intersección, etc.) diferentes en comparación con el ajuste proporcionado por . Sin embargo, en el caso de que cuando lo expandimos para incluir una intersección ya que solo agregamos una columna que ya es ortogonal a las columnas que teníamos, la ortogonalidad está en contra del polinomio constante de grado 0 . Esto simplemente resulta en mover verticalmente nuestra línea ajustada por la intersección. Por eso las tramas son diferentes.XTXfit
fit2
fit2_b
La interesante pregunta secundaria es por qué fit_b
y fit2_b
son iguales; después de todo, las matrices modelo de fit_b
y fit2_b
no son iguales en valor nominal . Aquí solo necesitamos recordar eso en última instancia fit_b
y fit2_b
tener la misma información. fit2_b
es solo una combinación lineal de fit_b
lo que esencialmente sus ajustes resultantes serán los mismos. Las diferencias observadas en el coeficiente ajustado reflejan la recombinación lineal de los valores de fit_b
para obtenerlos ortogonales. (Vea la respuesta de G. Grothendieck aquí también para un ejemplo diferente).
=
y<-
para la asignación de manera inconsistente. Realmente no haría esto, no es exactamente confuso, pero agrega mucho ruido visual a su código sin ningún beneficio. Debe decidirse por uno u otro para usar en su código personal, y simplemente seguir con él.