질문에서와 같이 예상 경사를 플로팅하는 것이 좋습니다. 그러나 중요도를 기준으로 또는 그와 관련하여 필터링하지 않고 각 회귀가 데이터에 얼마나 잘 맞는지 측정하는 방법을 설명해보십시오. 이를 위해 회귀의 평균 제곱 오차는 쉽게 해석되고 의미가 있습니다.
예를 들어, R
아래 코드는 11 개의 래스터 시계열을 생성하고 회귀를 수행하며 결과를 세 가지 방법으로 표시합니다. 맨 아래 행에는 추정 된 경사와 평균 제곱 오류의 개별 그리드로 표시됩니다. 맨 위 줄에 그리드 의 오버레이 와 실제 기본 경사 (실제로는 가질 수 없지만 비교를 위해 컴퓨터 시뮬레이션으로 제공됨)가 있습니다. 오버레이는 하나의 변수 (추정 기울기)에 대해 색상을 사용하고 다른 변수에 대한 명암 (MSE)을 사용하기 때문에이 특정 예에서는 해석하기 쉽지 않지만 맨 아래 행의 별도 맵과 함께 유용하고 흥미로울 수 있습니다.
(오버레이에서 겹친 범례는 무시하십시오. "참 경사도"맵의 색 구성표는 예상 경사도 맵의 색 구성표와 동일하지 않습니다. 임의의 오류로 인해 일부 추정 경사가 실제 기울기보다 더 극단적 인 범위입니다. 이는 평균에 대한 회귀 와 관련된 일반적인 현상 입니다.)
BTW, 이것은 같은 시간 동안 많은 회귀를 수행하는 가장 효율적인 방법은 아닙니다. 대신 투영 행렬 을 각 회귀에 대해 다시 계산하는 것보다 더 빨리 각 픽셀의 "스택"에 미리 계산하여 적용 할 수 있습니다 . 그러나이 작은 그림에는 문제가되지 않습니다.
# 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))