Menggunakan paket randomForest di R, bagaimana cara memetakan prediksi hutan acak?

masukkan deskripsi gambar di siniSaya mencoba menggunakan randomforest untuk menghasilkan peta prediksi spasial.

Saya mengembangkan model saya dengan menggunakan regresi hutan acak, namun saya menemui sedikit kesulitan pada langkah terakhir dalam menggunakan prediktor terbaik untuk membuat peta prediktif. Saya ingin membuat peta prediksi peta.

Kode saya:

library(raster)
library(randomForest)

set.seed(12)
s <- stack("Density.tif", "Aqui.tif", "Rech.tif", "Rainfall.tif","Land Use.tif", "Cond.tif", "Nitrogen.tif", "Regions.tif","Soil.tif","Topo.tif", "Climatclass.tif", "Depth.tif")

points <- read.table("Coordonnées3.txt",header=TRUE, sep="\t", dec=",",strip.white=TRUE)

d <- extract(s, points)
rf <-randomForest(nitrate~ . , data=d, importance=TRUE, ntree=500, na.action = na.roughfix)
p <- predict(s, rf)

plot(p)

Contoh data:

> head(points)
       LAT      LONG
1 -13.057007 27.549580
2  -4.255000 15.233745
3   5.300000 -1.983610
4   7.245675 -4.233336
5  12.096330 15.036016
6  -4.255000 15.233745

Kesalahan ketika saya menjalankan kode pendek saya adalah:

Error in eval(expr, envir, enclos) : object 'nitrate' not found.

person Issoufou    schedule 08.07.2016    source sumber
comment
head(d) akan membantu men-debug pertanyaan Anda dengan lebih baik dan memeriksa d apakah ada nitrat atau Nitrogen sebagai nama kolomnya.   -  person abhiieor    schedule 08.07.2016
comment
Baris kode manakah yang menghasilkan kesalahan? Apakah modelnya cocok atau prediksinya?   -  person Gregor Thomas    schedule 08.07.2016
comment
Kesalahan kode muncul ketika saya menjalankan langkah: rf ‹-randomForest(nitrate~ . , data=d, important=TRUE, ntree=500, na.action = na.roughfix)   -  person Issoufou    schedule 09.07.2016
comment
Saya memiliki dua belas prediktor dalam format raster. Raster yang berbeda disimpan di: s ‹- stack(Density.tif, Aqui.tif, Rech.tif, Rainfall.tif, Land Use.tif, Cond.tif, Nitrogen.tif, Regions.tif, Soil.tif, Topo .tif, Kelas iklim.tif, Kedalaman.tif). Tujuan saya adalah menggunakan nitrat (transformasi log nitrat) sebagai variabel respons untuk membuat peta prediksi.   -  person Issoufou    schedule 09.07.2016


Jawaban (2)


Saya kira kesalahan terjadi saat Anda menyesuaikan modelnya.

Mengapa ada variabel bernama nitrate. Mengingat cara Anda membuat RasterStack, mungkin ada yang disebut Nitrogen. Apa pun yang terjadi, Anda dapat mengetahuinya dengan melihat names(s) dan colnames(d).

PERHATIKAN bahwa points Anda tidak bagus! Urutannya terbalik. Urutannya harus (bujur, lintang).

Berdasarkan komentar Anda (harap edit pertanyaan Anda), Anda harus menambahkan file poin nitrat (kolom ketiga) atau semacamnya. Lalu lakukan

 xy <- points[, 2:1]
 nitrate <- points[,3]

Ekstrak poin dan gabungkan dengan data pengamatan Anda

 d <- extract(s, xy)
 d <- cbind(nitrate=nitrate, d)

Bangun model dan prediksi

 rf <-randomForest(nitrate~ . , data=d, importance=TRUE, ntree=500, na.action = na.roughfix)
 p <- predict(s, rf)
person Robert Hijmans    schedule 09.07.2016
comment
Saya memiliki dua belas prediktor dalam format raster. Raster yang berbeda disimpan di: s ‹- stack(Density.tif, Aqui.tif, Rech.tif, Rainfall.tif, Land Use.tif, Cond.tif, Nitrogen.tif, Regions.tif, Soil.tif, Topo .tif, Kelas iklim.tif, Kedalaman.tif). - person Issoufou; 09.07.2016
comment
Jika saya menambahkan nilai nitrat ke poin, saya memperoleh: head(points) Ln.NO3._mean LAT LONG 1 0.2311117 -13.057007 27.549580 2 0.3148107 -4.255000 15.233745 3 0.3162695 5.300000 -1.9836 10 4 0,4054651 7,245675 -4,233336 5 0,4054651 12,096330 15,036016 6 0,6205765 - 4.255000 15.233745 Dalam hal ini, jika saya memasukkan nilai nitrat dengan LAT dan LONG, ketika saya jalankan lagi, kesalahan yang muncul adalah: › d ‹- ekstrak(s, poin) Error in .xyValues(x, as.matrix(y) , ...) : xy seharusnya memiliki 2 kolom saja. Menemukan dimensi ini: 82, 3 - person Issoufou; 09.07.2016
comment
Variabel yang disebut nitrat tidak dalam format raster. Tapi variabel kuantitatif. - person Issoufou; 09.07.2016

Sepertinya kesalahan terjadi ketika Anda mencoba membangun hutan. Mungkin akan sangat membantu jika tidak menggunakan antarmuka rumus. Selain itu, jika d besar, maka tidak disarankan menggunakan antarmuka rumus. Dari file bantuan di randomForest: "Untuk kumpulan data besar, terutama yang memiliki jumlah variabel besar, tidak disarankan memanggil randomForest melalui antarmuka rumus: Mungkin ada terlalu banyak overhead dalam menangani rumus."

Dengan asumsi d$nitrate ada maka solusinya adalah randomForest(y = d$nitrate, x = subset(d, select = -nitrate), importance=TRUE, ntree=500, na.action = na.roughfix)

person Willis    schedule 15.07.2016