2015-05-21 158 views
0

我想對代表Landsat數據的Band3和Band4的兩個柵格堆棧的每個像素執行移動窗口迴歸。結果應該是兩個額外的堆棧,一個代表攔截,另一個代表迴歸的斜率。 因此,堆棧「B3」和堆棧「B4」的層1導致堆棧「截取」的層1和堆棧「斜率」。堆棧B3和堆棧B4的第2層產生第2層....等等。移動窗口迴歸

我已經沿着gwr函數來過,但是想留在光柵包中。 我莫名其妙地知道focal必須包括以設置我的移動窗口(這應該是3×3像素),並以某種方式線性模型,如:lm(as.matrix(b3)~as.matrix(b4))雖然我不認爲這讓我的價值觀基於像素...

而不是一個rasterstack一層一層的方法也是可能的。 (因此,它不一定必須BAND3的rasterstack。

有沒有人膠水如何R中設定此?

回答

2

這裏是一個辦法,改編自?光柵:: localFun

set.seed(0) 
b <- stack(system.file("external/rlogo.grd", package="raster")) 
x <- flip(b[[2]], 'y') + runif(ncell(b)) 
y <- b[[1]] + runif(ncell(b)) 

# local regression: 
rfun <- function(x, y, ...) { 
    d <- na.omit(data.frame(x, y)) 
    if (nrow(d) < 3) return(NA) 
    m <- lm(y~x, data=d) 
    # return slope 
    coefficients(m)[2] 
} 

ff <- localFun(x, y, fun=rfun) 
plot(ff) 

不幸的是,你需要運行這兩次才能得到斜率和截距(coefficients(m)[1]

+1

將'ngb'設置爲3行和3列時,用戶交叉點(即9個單元格)在你的情況下, ngb = 3'或'ngb = c(3,3)'。 – RobertH

+0

Thanks Robert! - I wo我還有一個問題:因爲我的實際B3和B4柵格堆棧包含NA值(它們在層中變化,但是在柵格之間的相同位置上--B3的層1與B4中的層1具有相同的NA位置)。我認爲這不應該通過'm < - lm(x〜y,na.action = na.exclude)'出現任何問題,但它給了我下面的錯誤:'lm.fit錯誤(x,y,offset = offset ,singular.ok = singular.ok,...): 0(非NA)的情況 調用自:eval(替代(瀏覽器(skipCalls = pos),列表(pos = 9-幀)), envir = sys.frame(frame))' – user2978751

+0

有一半以上的光柵通常是NA。我認爲它不是執行移動窗口迴歸的最佳條件 - 我想這應該是可能的。 – user2978751