首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RMSE Landsat8 AVHRR

RMSE Landsat8 AVHRR
EN

Stack Overflow用户
提问于 2019-02-28 17:52:35
回答 1查看 31关注 0票数 0

我想在Landsat8 NDVI IMG和AVHRR NDVI IMG之间进行空间验证

这两个IMG具有相同的投影、范围和像素大小

为此,我想确定RMSE。但是,我得到了错误消息:

在这一行:

代码语言:javascript
复制
error <- actual - predicted

此错误且无法继续在actual - predicted:二元运算符的非数值参数中出现错误

我必须如何更改代码才能取得进展?下面是我的完整代码

代码语言:javascript
复制
library(sp)
library(raster)
library(rgdal)
library(rastervis)
library(rgl)
library(dplyr)

#Setze den Pfad
setwd("/home/franziska/r-Daten/RSME")

#lade beide Raster
AVHRR <- raster("AVHRR_NDVI.tif")
Landsat <- raster("Landsat_NDVI.tif")`

# diese Funktion soll den RMSE bestimmen
rmse <- function(error)
{
 sqrt(mean(error^2))
}

# diese Funktion gibt den absoluten Fehler zurück
mae <- function(error)
{
  mean(abs(error))
}

# Weiße die Raster den Variablen zu
actual <- c(Landsat)
predicted <- c(AVHRR)

# Berechne den Fehler
error <- actual - predicted

# Ausgabe der Zwischenberechnungen
rmse(error)
mae(error)


lm.D9 <- lm(Landsat ~ AVHRR)
rmse(lm.D9$residuals) # RSME
EN

回答 1

Stack Overflow用户

发布于 2019-03-01 11:44:57

以下是您的简化代码和一些示例数据(这就是您在这里提问的方式)。

代码语言:javascript
复制
library(raster)
f <- system.file("external/rlogo.grd", package="raster")
Landsat <- raster(f, 1)
AVHRR <- raster(f, 3)

error <- Landsat - AVHRR
#You can do
#[1] 25.52578
#mae <- mean(abs(values(error)))
#mae
#[1] 15.28597

但是内存安全的方法是这样做

代码语言:javascript
复制
cellStats(error, "rms")
#[1] 25.52742
cellStats(abs(error), "mean")
#[1] 15.28597

请注意,我返回的是一个“全局”值,而您的函数将返回一个栅格-这表明您可能需要“局部”错误统计信息。但只有当您有多层栅格数据时,这才有意义。在您的示例中,您没有这样做;但请参见下面的本地示例。

那么是什么导致了你的错误呢?你做了

代码语言:javascript
复制
#actual <- c(Landsat)
#predicted <- c(AVHRR)
#error <- actual - predicted

或者使用我们的示例数据

代码语言:javascript
复制
error <- c(Landsat) - c(AVHRR)
#Error in c(Landsat) - c(AVHRR) : non-numeric argument to binary operator

这是因为c(Landsat)创建了一个list,您不能将两个列表相减。

代码语言:javascript
复制
class(c(Landsat))
#[1] "list"

你可以这样做

代码语言:javascript
复制
error <- c(Landsat)[[1]] - c(AVHRR)[[1]]

(但你为什么要这样做呢)

如果你想要“本地”值,你可以这样做:

代码语言:javascript
复制
library(raster)
f <- system.file("external/rlogo.grd", package="raster")
Landsat <- stack(f)
AVHRR <- Landsat[[3:1]]
error <- Landsat - AVHRR

mae <- mean(abs(error))
plot(mae)   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54922767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档