การพล็อตความลาดชันโดยประมาณดังเช่นในคำถามเป็นสิ่งที่น่าทำ แทนที่จะกรองด้วยความสำคัญแม้ว่า - หรือใช้ร่วมกับมัน - ทำไมไม่แมปการวัดว่าการถดถอยแต่ละแบบนั้นเหมาะสมกับข้อมูลอย่างไร สำหรับสิ่งนี้ข้อผิดพลาดกำลังสองเฉลี่ยของการถดถอยนั้นตีความได้อย่างง่ายดายและมีความหมาย
เป็นตัวอย่างR
รหัสด้านล่างสร้างอนุกรมเวลา 11 rasters ดำเนินการถดถอยและแสดงผลลัพธ์ในสามวิธี: ในแถวด้านล่างเป็นกริดแยกของลาดเนินโดยประมาณและหมายถึงข้อผิดพลาดกำลังสอง; ในแถวบนสุดเป็นภาพซ้อนทับของเส้นตารางเหล่านั้นพร้อมกับความลาดเอียงพื้นฐานที่แท้จริง (ซึ่งในทางปฏิบัติคุณจะไม่มีวันได้ แต่เป็นแบบจำลองคอมพิวเตอร์เพื่อการเปรียบเทียบ) การซ้อนทับเนื่องจากใช้สีสำหรับตัวแปรหนึ่งตัว (ความชันโดยประมาณ) และความสว่างสำหรับอีกตัวแปรหนึ่ง (MSE) ไม่ใช่เรื่องง่ายที่จะตีความในตัวอย่างนี้โดยเฉพาะ แต่การรวมแผนที่ที่แยกต่างหากในแถวล่างอาจมีประโยชน์และน่าสนใจ
(โปรดละเว้นตำนานที่ทับซ้อนกันบนโอเวอร์เลย์หมายเหตุด้วยเช่นกันชุดรูปแบบสีสำหรับแผนที่ "True ลาด" นั้นไม่เหมือนกันสำหรับแผนที่ของเนินลาดโดยประมาณ: ข้อผิดพลาดแบบสุ่มทำให้เกิดความลาดชันโดยประมาณเพื่อขยาย ระยะทางไกลเกินกว่าความลาดชันจริงนี่เป็นปรากฏการณ์ทั่วไปที่เกี่ยวข้องกับการถดถอยที่มีต่อค่าเฉลี่ย )
BTW นี่ไม่ใช่วิธีที่มีประสิทธิภาพมากที่สุดในการทำ regressions จำนวนมากในชุดเดียวกัน: แทนmatrix matrix สามารถคำนวณล่วงหน้าและนำไปใช้กับแต่ละ "stack" ของพิกเซลได้เร็วกว่าการคำนวณใหม่สำหรับการถดถอยแต่ละครั้ง แต่นั่นไม่สำคัญสำหรับภาพประกอบขนาดเล็กนี้
# 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))