2012-10-10 42 views
10

Estoy intentando comprender cómo la función predict.loess puede calcular nuevos valores pronosticados (y_hat) en los puntos x que no existen en los datos originales. Por ejemplo (este es un ejemplo sencillo y me doy cuenta, obviamente, no se necesita de loess para un ejemplo de este tipo pero ilustra el punto):loess predecir con nuevos valores de x

x <- 1:10 
y <- x^2 
mdl <- loess(y ~ x) 
predict(mdl, 1.5) 
[1] 2.25 

loess obras de regresión mediante el uso de polinomios en cada x y por lo tanto se crea una predijo y_hat en cada y. Sin embargo, como no se almacenan coeficientes, el "modelo" en este caso es simplemente los detalles de lo que se usó para predecir cada y_hat, por ejemplo, span o degree. Cuando lo hago predict(mdl, 1.5), ¿cómo es posible que predict produzca un valor en este nuevo x? ¿Está interpolando entre los dos valores de x existentes más cercanos y su y_hat asociado? Si es así, ¿cuáles son los detalles de cómo está haciendo esto?

He leído la documentación cloess en línea, pero no he podido encontrar dónde se discute esto.

+0

¿Interpolación, extrapolación o ambas cosas? Creo que te refieres a la interpolación solamente. – smci

Respuesta

5

Sin embargo, ya que no existen coeficientes de ser almacenados, el "modelo" en este caso es simplemente los detalles de lo que se utilizó para predecir cada y_hat

Tal vez usted ha utilizado print(mdl) comando o simplemente mdl para ver lo que contiene el modelo mdl, pero este no es el caso. El modelo es realmente complicado y almacena una gran cantidad de parámetros.

Para tener una idea de lo que hay adentro, puede usar unlist(mdl) y ver la lista grande de parámetros en él.

Esta es una parte del manual del comando que describe cómo funciona realmente:

Montaje se hace localmente. Es decir, para el ajuste en el punto x, el ajuste se realiza usando puntos en un vecindario de x, ponderados por su distancia de x (sin tener en cuenta las diferencias en variables "paramétricas" al calcular la distancia). El tamaño del vecindario está controlado por α (establecido por span o enp.target). Para α < 1, el vecindario incluye la proporción α de los puntos, y estos tienen ponderación tricubica (proporcional a (1 - (dist/maxdist)^3)^3). Para α> 1, se utilizan todos los puntos, suponiendo que la "distancia máxima" es α^(1/p) multiplicada por la distancia máxima real para las variables explicativas p.

Para la familia predeterminada, el ajuste es por mínimos cuadrados (ponderados). Para family = "simétrico", se utilizan algunas iteraciones de un procedimiento de estimación M con . El peso biológico de Tukey. Tenga en cuenta que, dado que el valor inicial es el ajuste de mínimos cuadrados , este no necesita ser un ajuste muy resistente.

Lo que creo es que intenta adaptarse a un modelo polinomial en la vecindad de cada punto (no solo un polinomio para todo el conjunto). Pero el vecindario no significa solo un punto antes y un punto después, si estaba implementando tal función, puse un gran peso en los puntos más cercanos al punto x, y bajé los pesos a los puntos distales, y traté de encajar en un polinomio que se ajusta al mayor peso total.

Entonces, si la x 'dada para la cual se debe predecir la altura es la más cercana al punto x, traté de usar el polinomio ajustado en las vecindades del punto x - digamos P (x) - y lo apliqué sobre x' - di P (x ') - y esa sería la predicción.

Avíseme si usted está buscando algo especial.

+1

gracias por su respuesta. sin embargo, la lógica/matemática detrás de qué regresión polinomial se describe en mi pregunta. Estoy intentando comprender cómo se calculan los puntos intermedios. debe ser a través de algún tipo de interpolación? – Alex

+0

He actualizado la respuesta – Ali

+1

Gracias, sí, esto es exactamente lo que describo en la pregunta. Tenga en cuenta: "el ajuste en el punto x, el ajuste se realiza mediante puntos en un barrio de x". la pregunta es: qué ocurre entre x_1 y x_2 ​​.. a, por ejemplo, x_1 + epsilon que no existe en el conjunto de datos – Alex

2

encontrado la respuesta en la página 42 del manual:

In this algorithm a set of points typically small in number is selected for direct  
computation using the loess fitting method and a surface is evaluated using an interpolation 
method that is based on blending functions. The space of the factors is divided into 
rectangular cells using an algorithm based on k-d trees. The loess fit is evaluated at 
the cell vertices and then blending functions do the interpolation. The output data 
structure stores the k-d trees and the fits at the vertices. This information 
is used by predict() to carry out the interpolation. 
+0

¿Qué manual? Estoy intentando encontrar la respuesta yo mismo y me gustaría ver las funciones de fusión. –

+0

Creo que está citando este documento: http://www.netlib.org/a/cloess.pdf, que parece ser un apéndice a un documento o informe de William S. Cleveland , Eric Grosse, y Ming-Jen Shyu. Aunque no estoy seguro acerca de la cita porque no he localizado el documento principal, solo el apéndice. –

5

Para comprender mejor lo que está sucediendo en un ajuste de loess intente ejecutar la función loess.demo del paquete TeachingDemos. Esto le permite hacer clic interactivamente en el gráfico (incluso entre puntos) y luego muestra el conjunto de puntos y sus pesos utilizados en la predicción y la línea/curva predicha para ese punto.

Tenga en cuenta también que el valor predeterminado para loess es realizar un segundo alisado/interpolación en el ajuste loess, por lo que lo que ve en el objeto ajustado probablemente no sea la verdadera información de ajuste de loess, sino el suavizado secundario.

Cuestiones relacionadas