zweiseitiger Signifikanztest reklassifizieren

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

Antworten
f_mo
Beiträge: 1
Registriert: Mi Mär 06, 2019 11:41 am

zweiseitiger Signifikanztest reklassifizieren

Beitrag von f_mo »

Hallo, ich habe in meinem Projekt eine Zeitreihe von NDVI Daten auf signifikante Änderungen zu analysieren.
Dazu habe ich eine Pixelweise Überprüfung durchgeführt:

Code: Alles auswählen

# Laden aller nötigen Dateien
library(sp)
library(raster)
library(rgdal)
library(rastervis)
library(rgl)
library(ggplot2)
library(ggmap)
library(spatial.tools)
library(magrittr)
library(tidyverse)
library(rgeos)
library(plyr)
library(dbplyr)
library(quantmod)

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

#Erstelle ein Rasterstack
NDVI_avhrr_path <- "/home/r-Daten"
all_NDVI <- list.files(NDVI_path,full.names = TRUE,pattern = ".tif$")

#fülle den Rasterstack mit den Rastern
NDVI_s <- stack(all_NDVI)

#lade ein einzelnes Raster für die Zellgrößenanpassung mit dem Geländehöhenmodell
rastertest <- raster("VHP.P1981040.tif")

#hereinladen des DGM
dgm <- raster("/home/r-Daten/srtm_23_16.tif")


#Anpassung der Zellgröße des DGM auf die Zellgröße der von rastertest
dgm_2 <- spatial_sync_raster(dgm, rastertest, method = "bilinear", size_only = FALSE,
                             raster_size, verbose = FALSE)

#Zuschnitt des Zellengleichen DGM auf das tatsächliche Untersuchungsgebiet
dgm_2_crop <- crop(dgm_2, dgm)


#Zuschnitt der Zeitreihe auf das DGM
NDVI_s_crop <- crop(NDVI_s, dgm_2_crop)

#Erstellung der jährlichen Summen, da Autokorrelation mit monatlichen Werten vorhanden sein könnte.  Zu Testzwecken wird im Moment nur ein Bild pro Jahr verwendet
fun <- function(x){
  NDVI_st_crop.ts = ts(x,start=c(1981), end=c(2015),frequency = 1)
  x<- aggregate(NDVI_s_crop.ts)
}

#Dann wird die Steigung berechnet, um die Richtung und Größe der Trends zu erhalten, 
#multipliziert mit der Anzahl der Jahre, um die Änderung der NDVI-Einheiten zu erhalten
NDVI_s_crop.sum <- calc (NDVI_s_crop, fun)
NDVI_s_crop.sum=NDVI_s_crop.sum

#Jetzt müssen wir sehen, welche Trends zweiseitig signifikant sind. Also extrahieren wir zuerst den p-Wert:
time <- 1:nlayers(NDVI_s_crop.sum) 
fun=function(x) { if (is.na(x[1])){ NA } else { m = lm(x ~ time); summary(m)$coefficients[2] }}
NDVI_s_crop.slope=calc(NDVI_s_crop.sum, fun)
NDVI_s_crop.slope=NDVI_s_crop.slope*34

NASCS = NDVI_s_crop.slope
plot(NASCS)

#Auslesung der Werte des Signifikanztests
NASCS.values=values(NASCS)

#Kurzer Überblick
NASCS.values

#Nun möchte ich die kritischen Werte auslesen und habe so eine Funktion dazu im Internet gefunden, sofern ich die library(quantmod) verwende: 
critical_values = c(qt(NASCS(0,025, 29)),qt(NASCS(0,975, 29)))
critical_values 
#Die Angabe «29» bezieht sich auf Freiheitsgrade aus einem Youtube-Video 
#da kommt diese Fehlermeldung 
Fehler in NASCS(0, 25, 29) : konnte Funktion "NASCS" nicht finden
Aber wie soll ich denn sonst r sagen von was ich die jeweiligen 0.05 Werte haben möchte?
Bzw. wie kann ich das Signifikanzergebnis so klassifizieren, dass ich am Ende einen Plot raus bekomme, in dem als Levelplot das DGM und oben drauf das Ergebnis vom Signifikanztest als Schraffur zu sehen ist, wo es nur darum gehen soll, hat sich signifikant verändert bzw. hat sich nicht signifikant verändert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: zweiseitiger Signifikanztest reklassifizieren

Beitrag von jogo »

Hallo f_mo,

willkommen im Forum!
Leider können wir den Code nicht laufen lassen, weil wir keine Daten haben.
Bitte lies viewtopic.php?f=20&t=11
... und reduziere Deinen Code auf den Teil, der Dir Probleme bereitet :!:
(also nicht das komplette Projekt)
Vergleiche auch: https://stackoverflow.com/help/mcve

Gruß, Jörg
Antworten