Tahmini eğimleri, soruda olduğu gibi çizmek, yapmak için harika bir şey. Önemle filtrelemekten ziyade - veya bununla birlikte - neden her regresyonun verilere ne kadar iyi uyduğunun bir ölçüsünü göstermiyorsunuz? Bunun için regresyonun ortalama kare hatası kolayca yorumlanır ve anlamlıdır.
Örnek olarak, aşağıdaki R
kod 11 rasterlik bir zaman dizisi oluşturur, gerilemeleri gerçekleştirir ve sonuçları üç şekilde görüntüler: alt satırda, tahmini eğimlerin ve ortalama kare hataların ayrı ızgaraları; En üst sırada, bu ızgaraların (gerçek pratikte asla sahip olamayacağınız ancak karşılaştırma için bilgisayar simülasyonu tarafından karşılanacak olan) gerçek temel eğimlerle birlikte üst üste binmesi olarak. Bindirme, bir değişken için renk (tahmin edilen eğim) ve diğerine hafiflik (MSE) kullandığı için, bu özel örnekte yorumlanması kolay değildir, ancak alt sıradaki ayrı haritalar ile birlikte faydalı ve ilginç olabilir.
(Lütfen üst üste binen üst üste binen lejantları dikkate almayın. "Gerçek eğimler" haritasındaki renk şemasının, tahmini eğim haritaları için olanlarla aynı olmadığını unutmayın: rastgele hata, tahmin edilen eğimlerin bir kısmının yayılmasına neden olur Gerçek eğimden daha aşırı aralık, bu , ortalamaya doğru gerileme ile ilgili genel bir olgudur .)
BTW, bu, aynı zamanlar için çok sayıda regresyon yapmanın en etkili yolu değildir: bunun yerine, yansıtma matrisi her bir regresyon için yeniden hesaplamaktan daha hızlı bir şekilde piksellerin her "yığına" uygulanabilir . Ancak bu küçük örneklem için önemli değil.
# Specify the extent in space and time.
#
n.row <- 60; n.col <- 100; n.time <- 11
#
# Generate data.
#
set.seed(17)
sd.err <- outer(1:n.row, 1:n.col, function(x,y) 5 * ((1/2 - y/n.col)^2 + (1/2 - x/n.row)^2))
e <- array(rnorm(n.row * n.col * n.time, sd=sd.err), dim=c(n.row, n.col, n.time))
beta.1 <- outer(1:n.row, 1:n.col, function(x,y) sin((x/n.row)^2 - (y/n.col)^3)*5) / n.time
beta.0 <- outer(1:n.row, 1:n.col, function(x,y) atan2(y, n.col-x))
times <- 1:n.time
y <- array(outer(as.vector(beta.1), times) + as.vector(beta.0),
dim=c(n.row, n.col, n.time)) + e
#
# Perform the regressions.
#
regress <- function(y) {
fit <- lm(y ~ times)
return(c(fit$coeff[2], summary(fit)$sigma))
}
system.time(b <- apply(y, c(1,2), regress))
#
# Plot the results.
#
library(raster)
plot.raster <- function(x, ...) plot(raster(x, xmx=n.col, ymx=n.row), ...)
par(mfrow=c(2,2))
plot.raster(b[1,,], main="Slopes with errors")
plot.raster(b[2,,], add=TRUE, alpha=.5, col=gray(255:0/256))
plot.raster(beta.1, main="True slopes")
plot.raster(b[1,,], main="Estimated slopes")
plot.raster(b[2,,], main="Mean squared errors", col=gray(255:0/256))