Daugiau

R rastrinis nuspėjimas naudojant lm () laiko eilutes

R rastrinis nuspėjimas naudojant lm () laiko eilutes


Bandau prognozuoti rastrą, naudodamas tiesinę regresiją, pagrįstą praeities rastrais, tačiau negaliu užfiksuoti lm () modelio, kad galėčiau jį pateikti prognozuodamas ().

# # apskaičiuokite regresiją rastrinėje rietuvėje (laiko eilutės) # ir nuspėkite. # reikalauti (rastro) reikalauti (rgdal) # sudaryti rastrų sąrašą rastrais <- list.files (modelis = '*. tif $') # padaryti rastro kamino s <- kamino (rastrų) # apkarpyti kaminą iš Sicilijos sicily_ext <- c (12, 16, 36.5, 38.5) sicily <- crop (s, sicily_ext) # padaryti laiko kintamąjį (naudoti regresijoje) laikas <- 1: nlayers (s) # paleisti regresijos linksmybes <- function (x) {if (is.na (x [1])) {NA} else {lm (x ~ time) $ koeficientai [2]}} x2 <- apskaičiuoti (siciliškai, linksmai) #prognozuoti a rastras numatė <- numatyti (sicilija, x2, progresas = "tekstas") # PABAIGA

Tiksli išvestis yra:

Įkeliamas reikalingas paketas: rastras Įkeliama reikalinga pakuotė: sp Įkeliama reikalinga pakuotė: rgdal rgdal: versija: 1.0-6, (SVN versija 555) Geospatial Data Abstraction Library plėtiniai į R sėkmingai įkeltas Įkelta GDAL vykdymo trukmė: GDAL 1.11.2, išleista 2015/02 / 10 Kelias į GDAL bendrinamus failus: /usr/share/gdal/1.11 Įkelta PROJ.4 vykdymo trukmė: Rel. 4.8.0, 2012 m. Kovo 6 d., [PJ_VERSION: 480] Kelias į PROJ.4 bendrinamus failus: (automatiškai aptiktas) Susiejimas su SP versija: 1,1–1 0% „UseMethod“ klaida („numatyti“): „Prognozuoti“ netaikomas metodas taikoma klasės „data.frame“ objektui

ir gautas x2 rastras parodytas čia


Jūs negalite naudotinumatytičia.numatytiveiktų, jei turėtumėte pasaulinį modelį ir norėtumėte apskaičiuoti vietinio (tinklo langelio) lygio prognozes. Tačiau atrodo, kad norite pritaikyti vietinius modelius (skirtingą kiekvienos tinklelio langelio modelį) ir su jais numatyti.

Atlikdami šiuos veiksmus

fun <- funkcija (x) {if (is.na (x [1])) {NA} else {lm (x ~ laikas) $ koeficientai [2]}} x2 <- skaičiuokite (sicilija, linksma)

Jūs supratote nuolydį. Galite gauti ir nuolydį, ir perėmimą, o ne rankiniu būdu apskaičiuoti tokias vertes:

# gauti visus koeficientus bfun <- funkcija (x) {if (is.na (x [1])) {c (NA, NA)} dar {lm (x ~ laikas) $ koeficientai}} x <- skaičiuokite (sicilija) , bfun) p1 <- x [[1]] + x [[2]] * laikas

Arba vienu žingsniu

pfun <- funkcija (x) {if (is.na (x [1])) {rep (NA, ilgis (x))} else {numatyti (lm (x ~ laikas))}} p2 <- apskaičiuoti (sicilija , pfun)

Jei tai yra tiesinė regresija, su kuria susiduriate, galite tiesiog sukurti du rastro sluoksnius - vieną nuolydžiui, kitą perėmimui - ir numatyti rankiniu būdu (t. Y. y = m * x + t). Čia yra keletas pavyzdžių kodo naudojant GIMMS NDVI duomenis, atsisiųstus ir apdorotus naudojant gimms pakuotė. Turėtumėte galėti pakeisti bet kokiais duomenimis, su kuriais susiduriate.

## load 'gimms' paketų biblioteka (gimms) ## gauti duomenų pavyzdžius gimms_envi <- downloadGimms (as.Date ("2000-01-01"), as.Date ("2000-06-30")) gimms_tifs <- rasterizeGimms (gimms_envi, remove_header = TRUE, failo pavadinimas = gimms_envi, format = "GTiff") ## sukurkite erdvinį pogrupį (sicilija) sicily_ext <- ulatus (c (12, 16, 36.5, 38.5)) gimms_tifs <- crop (gimms_tifs, sicily_ext ) ## sukurti laiko informacijos laiko žymes <- 1: nlayers (gimms_tifs) ## nuolydis ir perėmimas lm_intercept <- calc (gimms_tifs, fun = funkcija (x) {if (visi (is.na (x))) grįžta (NA) else return (koefas (lm (x ~ laiko žymos)) [1])}) lm_slope <- calc (gimms_tifs, fun = funkcija (x) {if (visi (is.na (x))) grįžti (NA) dar grįžti (koefas (lm (x ~ laiko žymes)) [2])}) ## numatyti ndvi (y = m * x + t) lm_slope * gimms_tifs + lm_intercept

Sena tema. Bet kam nors gali būti naudinga. Pagrindinis pavyzdys:

biblioteka (rastras) set.seed (321) # padarykite šį pavyzdį visiškai atkuriamą r <- rastras () res (r) <- c (5,5) r_list <- sąrašas () laikas <- sek (8) (i) laike) {r_list [[i]] <- setValues ​​(x = r, reikšmės = rnorm (n = ncell (r), vidurkis = i, sd = 0.1))} sicilija <- kaminas (r_list)

Ar tas pats požiūris nei @RobertH, bet pridedantnauji duomenysargumentas numatant:

# pikselis po pikselio pfun <- funkcija (x) {if (is.na (x [1])) {rep (NA, ilgis (x))} else {numatyti (lm (x ~ laikas), nauji duomenys = data.frame (laikas = c (9:12)))}} p2 <- calc (sicily, pfun) rasterVis :: levelplot (stack (sicily, p2))

„@Jim“ tikslas, ieškant globalaus tinkamumo:

# visuotinio modelio bibliotekos (dplyr) biblioteka (tidyr) df <- as.data.frame (sicilija) pavadinimai (df) <- laikas df%>% surinkti (raktas = 'laikas', reikšmė = 'x')%>% mutuoti (laikas = kaip. skaitinis (laikas))%>% lm (x ~ laikas, duomenys =.)%>% numatyti (nauji duomenys = duomenys. kadras (laikas = c (9:12))) ## 1 2 3 4 ## 8.996832 9.996315 10.995799 11.995282

Tačiau išvestis yra tik viena reikšmė kiekviename žingsnyje


Žiūrėti video įrašą: Generalized Linear Models I