网格之间的多元线性回归:查看假设

时间:2020-06-01 09:45:09

标签: r linear-regression geospatial raster

我尝试对R中的3个栅格堆栈执行回归分析,到目前为止,该分析也有效。现在,我想检查模型的条件,但不确定在这种情况下应该如何工作。由于该模型是针对每个像素单独计算的,因此我无法提取整个调查区域的残差然后进行检查。因此,我目前必须在试验的基础上提取几个点/坐标的变量数据,然后创建一个lm,然后在其上应用测试(shapiro-test,breusch-pagan-test和VIF-test)。有谁知道更优雅的解决方案?

NAO_stack <- stack("NAO_stack_fertig.tif")
AOD_stack <- stack("AOD_stack_fertig.tif")
CFC_stack <- stack("CFC_stack_fertig.tif")
NAO_AOD_stack <- stack(NAO_stack, AOD_stack)
NAO_CFC_stack <- stack(NAO_stack, CFC_stack)

NAO_AOD_CFC <- stack(NAO_stack, AOD_stack, CFC_stack)
NAO_CFC_AOD <- stack(NAO_stack, CFC_stack, AOD_stack)


fun1=function(x) { if (is.na(x[1])){ NA } else { m <- lm(x[56:110] ~ x[1:55] + x[111:165]);summary(m)$coefficients[,1] }}
Steigung_CFC <- calc(NAO_CFC_AOD, fun1)
names(Steigung_CFC) <- c("Intercept", "NAO_Steigung", "AOD_Steigung")
plot(Steigung_CFC[[3]])

fun2=function(x) { if (is.na(x[1])){ NA } else { m <- lm(x[56:110] ~ x[1:55] + x[111:165]);summary(m)$coefficients[,4] }}
p_value_CFC <- calc(NAO_CFC_AOD, fun2)
names(p_value_CFC) <- c("Intercept", "NAO_P_Value", "AOD_P_Value")
plot(p_value_CFC[[3]])

### pixel-by-pixel multiple linear regression with NAO and AOD / CFC as dependent variables

fun3=function(x) { if (is.na(x[1])){ NA } else { m <- lm(x[56:110] ~ x[1:55] + x[111:165]);summary(m)$adj.r.squared }}
r_squared_CFC <- calc(NAO_CFC_AOD, fun3)
plot(r_squared_CFC, main = "R²_CFC_multiple")

r_squared_AOD <- calc(NAO_AOD_CFC, fun3)
plot(r_squared_AOD, main = "R²_AOD_multiple")

### pixel-wise regression only with NAO as a dependent variable

fun4=function(x) { if (is.na(x[1])){ NA } else { m <- lm(x[56:110] ~ x[1:55]);summary(m)$adj.r.squared }}
r_squared_CFC_NAO <- calc(NAO_CFC_stack, fun4)
plot(r_squared_CFC_NAO, main = "R²_CFC")

r_squared_AOD_NAO <- calc(NAO_AOD_stack, fun4)
plot(r_squared_AOD_NAO, main = "R²_AOD")

r_squared_AOD_CFC <- calc(stack(CFC_stack, AOD_stack), fun4)
plot(r_squared_AOD_CFC, main = "R²_AOD_CFC")



### Extract data for a point to check the assumptions on the resulting LM model
XCoordinate = 8
YCoordinate = 61
points(XCoordinate, YCoordinate, pch = 15, cex = 0.5)
xy <- cbind(XCoordinate,YCoordinate)
xy
sp <- SpatialPoints(xy)
sp
data_CFC <- extract(CFC_stack, sp)  
data_CFC
data_CFC <- as.vector(data_CFC)
data_AOD <- extract(AOD_stack, sp) 
data_AOD
data_AOD <- as.vector(data_AOD)
data_NAO <- extract(NAO_stack, sp)
data_NAO
data_NAO <- as.vector(data_NAO)

CFC_lm <- lm(data_CFC ~ data_AOD + data_NAO)
summary(CFC_lm)
CFC_resid <- CFC_lm$residuals

AOD_lm <- lm(data_AOD ~ data_CFC + data_NAO)
summary(AOD_lm)
AOD_resid <- AOD_lm$residuals

shapiro.test(AOD_resid)
bptest(AOD_lm)
vif(AOD_lm)

0 个答案:

没有答案
相关问题