Realice una regresión lineal, pero fuerce la solución para pasar por algunos puntos de datos particulares


14

Sé cómo realizar una regresión lineal en un conjunto de puntos. Es decir, sé cómo ajustar un polinomio de mi elección, a un conjunto de datos dado (en el sentido LSE). Sin embargo, lo que no sé es cómo forzar a mi solución a pasar por algunos puntos particulares de mi elección. He visto que esto se hizo antes, pero no puedo recordar cómo se llamó el procedimiento, y mucho menos cómo se hizo.

Como un ejemplo muy simple y concreto, digamos que tengo 100 puntos dispersos en el plano xy, y elijo colocar un polinomio de cualquier orden a través de ellos. Sé cómo realizar esta regresión lineal muy bien. Sin embargo, digamos que yo quiero 'fuerza' mi solución, que pasar por, digamos, tres de mis puntos de datos en coordenadas x , x = 19 , y x = 89 , (y sus correspondientes coordenadas por supuesto).x=3x=19x=89

¿Cómo se llama este procedimiento general, cómo se lleva a cabo y hay algún inconveniente particular que deba tener en cuenta?

Editar:

Me gustaría agregar que estoy buscando una forma concreta de hacer esto. He escrito un programa que realmente hace la regresión lineal de una de dos maneras, invirtiendo la matriz de covarianza directamente, o mediante el descenso de gradiente. Lo que pregunto es, ¿cómo, exactamente, paso a paso, modifico lo que hice, de modo que obligue a la solución polinómica a pasar por puntos específicos?

¡Gracias!


¿Por qué lo llamas "lineal" si estás usando un polinomio? Cada punto por el que quiere que pase es una restricción que reducirá su grado de libertad. Luego puede usar un algoritmo de optimización restringido.
curious_cat

44
Es lineal porque está encontrando coeficientes para una combinación lineal . Por ejemplo, si desea ajustar sus datos a un cúbico, entonces está encontrando los coeficientes (las 's) de y = c 0 + c 1 x + c 2 x 2 + c 3 x 3 . cy=c0+c1x+c2x2+c3x3
Spacey

1
@Mohammad: Otra forma de aproximar lo que desea sería utilizar una solución de mínimos cuadrados ponderados y asignar pesos muy grandes a los puntos por los que desea que pase la línea de regresión. Esto debería obligar a la solución a pasar muy de cerca a los puntos que elija.
Jason R

@JasonR Me alegro de verte aquí. Sí, WLS es un contendiente interesante. He respondido con whubers debido a la ingeniosa factorización polinómica, y porque mantiene la estructura de error muy bien.
Spacey

Respuestas:


19

El modelo en cuestión puede ser escrito

y=p(x)+(xx1)(xxd)(β0+β1x++βpxp)+ε

donde es un polinomio de grado d - 1 que pasa por puntos predeterminados ( x 1 , y 1 ) , ... , ( x d , y d ) y ε es aleatorio. (Utilice el polinomio de interpolación de Lagrange ). Escritura ( x - x 1 ) ( x - x d ) = rp(xi)=yid1(x1,y1),,(xd,yd)ε nos permite reescribir este modelo como(xx1)(xxd)=r(x)

yp(x)=β0r(x)+β1r(x)x+β2r(x)x2++βpr(x)xp+ε,

que es un problema de regresión múltiple OLS estándar con la misma estructura de error que el original donde las variables independientes son las cantidades r ( x ) x i , i = 0 , 1 , ... , p . Simplemente calcule estas variables y ejecute su conocido software de regresión , asegurándose de evitar que incluya un término constante. Se aplican las advertencias habituales sobre regresiones sin un término constante; En particular, el R 2 puede ser artificialmente alta; No se aplican las interpretaciones habituales.p+1r(x)xi, i=0,1,,pR2

(De hecho, la regresión a través del origen es un caso especial de esta construcción donde , ( x 1 , y 1 ) = ( 0 , 0 ) y p ( x ) = 0 , de modo que el modelo es y = β 0 x + + β p x p + 1 + ε . )d=1(x1,y1)=(0,0)p(x)=0y=β0x++βpxp+1+ε.


Aquí hay un ejemplo trabajado (en R)

# Generate some data that *do* pass through three points (up to random error).
x <- 1:24
f <- function(x) ( (x-2)*(x-12) + (x-2)*(x-23) + (x-12)*(x-23) )  / 100
y0 <-(x-2) * (x-12) * (x-23) * (1 + x - (x/24)^2) / 10^4  + f(x)
set.seed(17)
eps <- rnorm(length(y0), mean=0, 1/2)
y <- y0 + eps
data <- data.frame(x,y)

# Plot the data and the three special points.
plot(data)
points(cbind(c(2,12,23), f(c(2,12,23))), pch=19, col="Red", cex=1.5)

# For comparison, conduct unconstrained polynomial regression
data$x2 <- x^2
data$x3 <- x^3
data$x4 <- x^4

fit0 <- lm(y ~ x + x2 + x3 + x4, data=data)
lines(predict(fit0), lty=2, lwd=2)

# Conduct the constrained regressions
data$y1 <- y - f(x)
data$r <- (x-2)*(x-12)*(x-23)
data$z0 <- data$r
data$z1 <- data$r * x
data$z2 <- data$r * x^2

fit <- lm(y1 ~ z0 + z1 + z2 - 1, data=data)
lines(predict(fit) + f(x), col="Red", lwd=2)

Trama

Los tres puntos fijos se muestran en rojo sólido; no forman parte de los datos. El ajuste de mínimos cuadrados polinomiales de cuarto orden sin restricciones se muestra con una línea punteada negra (tiene cinco parámetros); el ajuste restringido (de orden cinco, pero con solo tres parámetros libres) se muestra con la línea roja.

Inspeccionar la salida de mínimos cuadrados ( summary(fit0)y summary(fit)) puede ser instructivo; lo dejo al lector interesado.


βr(x)xixir(x)

He agregado un ejemplo trabajado, Mohammad.
whuber

Oh perfecto. Lo estudiaré Usando su ejemplo, aún sería posible forzar al poli a pasar por puntos que son parte de los datos, ¿verdad?
Spacey

Absolutamente eso se puede hacer: pero sea doblemente cauteloso al interpretar los valores p o cualquier otra estadística, porque ahora sus restricciones se basan en los datos mismos.
whuber

Tu publicación me tuvo despierto anoche. Me enseñé el LIP. (LIP es interesante. Es como una descomposición de Fourier pero con polys).
Spacey

9

(xi,yi)xixyiy

Si desea forzar a una línea a pasar por dos puntos en un plano XY, también es bastante fácil de hacer. Se pueden ajustar dos puntos con una línea. Puedes usar la fórmula punto-pendiente para calcular tu pendiente, y luego usar uno de los puntos, la pendiente y la ecuación de una línea para encontrar la intersección.

XX2


Sin embargo, me siento obligado a mencionar en este punto que esto puede no ser una gran cosa para hacer (a menos que su teoría proporcione razones muy sólidas para hacerlo). También es posible que desee analizar la regresión bayesiana , donde puede permitir que su modelo encuentre la mejor combinación de la información en sus datos y alguna información previa (que podría utilizar para sesgar fuertemente su intercepción hacia cero, por ejemplo, sin forzándolo).


1
xiyi

2
Aunque agregar tres puntos más y ponderarlos ( a la respuesta de Glen_b) podría crear tal ajuste, interpretar cualquiera de los resultados estadísticos sería problemático: se necesitarían algunos ajustes.
whuber

6

Para agregar un poco de información adicional a la excelente cobertura de @ gung del caso lineal, en el caso del polinomio de orden superior hay varias formas en que puede hacerlo de manera exacta o aproximada (pero con la precisión que necesita).

Primero, tenga en cuenta que los grados de libertad del polinomio (o de cualquier función ajustada) deben ser al menos tan grandes como el número de puntos "conocidos". Si los grados de libertad son iguales, no necesita los datos, ya que la curva está completamente determinada. Si hay más puntos 'conocidos', no puede resolverlos (a menos que todos se encuentren exactamente en el mismo polinomio del grado especificado, en cuyo caso bastará cualquier subconjunto de tamaño adecuado). A partir de ahora, solo hablaré sobre cuándo el polinomio tiene más df que los puntos conocidos (como un cúbico - con 4df - y tres puntos conocidos, para que el cúbico no esté sobredeterminado por puntos conocidos ni completamente determinado por ellos) .

1) "la curva debe pasar por este punto" es una restricción lineal en los parámetros, lo que resulta en una estimación restringida o mínimos cuadrados restringidos (aunque ambos términos pueden incluir otras cosas que no sean restricciones lineales, como restricciones de positividad). Puede incorporar restricciones lineales por cualquiera

  (a) refundir la parametrización para incluir implícitamente cada restricción que dé como resultado un modelo de orden inferior.

  (b) utilizando herramientas estándar que pueden incorporar restricciones lineales en los parámetros de un ajuste de mínimos cuadrados. (generalmente a través de algo como la fórmula dada en el enlace anterior)

2) Otra forma es a través de la regresión ponderada. Si le da a los puntos conocidos un peso suficientemente grande, puede obtener esencialmente el mismo ajuste que en (1). Esto a menudo se implementa fácilmente, puede ser sustancialmente más rápido que volver a parametrizar y se puede hacer en paquetes que no ofrecen un ajuste limitado.

Se aplican todas las advertencias de @gung


Glen_b, no había considerado la regresión ponderada. Puede ser la forma de hacerlo. Lo puse en mi lista de tareas. Creo que puedo enseñarme eso sin incidentes. Con respecto a (1), ¿puede ampliar amablemente este aspecto de la re-paramaterización? Además, ¿cómo se llama a esto que estoy tratando de hacer, donde fuerzo al polinomio a pasar por ciertos puntos? Parte del problema es que no sé para qué buscar en Google. Si sé cómo se llama, podría aumentar lo que está diciendo con material en línea. Gracias.
Spacey

Vea mis ediciones arriba, que incluyen algunos términos de búsqueda y un enlace con algunos detalles más.
Glen_b -Reinstale a Monica

2
La regresión ponderada +1 es una buena idea. Es posible que se necesiten algunos ajustes de las estadísticas de salida, como estimaciones de error RMS.
whuber

s2FR2

Gracias por tu respuesta Glen_b, aunque he aceptado los de @whuber, todavía aprendí mucho de los tuyos.
Spacey
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.