การใช้แพ็คเกจ RandomForest ใน R จะแมปการทำนายฟอเรสต์แบบสุ่มได้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่ฉันกำลังพยายามใช้ Randomforest เพื่อสร้างแผนที่การทำนายเชิงพื้นที่

ฉันพัฒนาแบบจำลองของฉันโดยใช้การถดถอยฟอเรสต์แบบสุ่ม แต่ฉันพบปัญหาเล็กน้อยในขั้นตอนสุดท้ายในการใช้ตัวทำนายที่ดีที่สุดสำหรับการสร้างแผนที่เชิงทำนาย ฉันต้องการสร้างแผนที่ทำนายแผนที่

รหัสของฉัน:

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)

ข้อมูลตัวอย่าง:

> 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

ข้อผิดพลาดเมื่อฉันรันโค้ดสั้นคือ:

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

person Issoufou    schedule 08.07.2016    source แหล่งที่มา
comment
head(d) จะช่วยแก้ไขคำถามของคุณได้ดีขึ้นและดูที่ d ว่าชื่อคอลัมน์มีไนเตรตหรือไนโตรเจนหรือไม่   -  person abhiieor    schedule 08.07.2016
comment
รหัสบรรทัดใดที่ทำให้เกิดข้อผิดพลาด มันเป็นแบบจำลองหรือการทำนายหรือไม่?   -  person Gregor Thomas    schedule 08.07.2016
comment
ข้อผิดพลาดของรหัสปรากฏขึ้นเมื่อฉันทำงานในขั้นตอน: rf ‹-randomForest(nitrate~ . , data=d, allowance=TRUE, ntree=500, na.action = na.roughfix)   -  person Issoufou    schedule 09.07.2016
comment
ฉันมีตัวทำนายสิบสองตัวในรูปแบบแรสเตอร์ แรสเตอร์ที่แตกต่างกันถูกเก็บไว้ใน: s ‹- stack(Density.tif, Aqui.tif, Rech.tif, Rainfall.tif, Land Use.tif, Cond.tif, Nitrogen.tif, Regions.tif, Soil.tif, Topo .tif, Climat class.tif, Depth.tif) วัตถุประสงค์ของฉันคือการใช้ไนเตรต (logtransformed ของไนเตรต) เป็นตัวแปรตอบสนองเพื่อสร้างแผนที่การทำนาย   -  person Issoufou    schedule 09.07.2016


คำตอบ (2)


ฉันเดาว่าข้อผิดพลาดจะเกิดขึ้นเมื่อคุณพอดีกับโมเดล

เหตุใดจึงมีตัวแปรชื่อ nitrate เมื่อพิจารณาว่าคุณสร้าง RasterStack อย่างไร บางทีอาจมีอันหนึ่งชื่อ Nitrogen ไม่ว่าจะด้วยวิธีใด คุณสามารถค้นหาได้โดยดูที่ names(s) และ colnames(d)

โปรดทราบว่า points ของคุณไม่ดี! พวกเขาอยู่ในลำดับที่กลับกัน ลำดับควรเป็น (ลองจิจูด, ละติจูด)

จากความคิดเห็นของคุณ (โปรดแก้ไขคำถามของคุณแทน) คุณควรเพิ่มไนเตรตไฟล์คะแนน (คอลัมน์ที่สาม) หรืออะไรทำนองนั้น แล้วทำ

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

แยกคะแนนและรวมกับข้อมูลที่สังเกตได้ของคุณ

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

สร้างแบบจำลองและคาดการณ์

 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
ฉันมีตัวทำนายสิบสองตัวในรูปแบบแรสเตอร์ แรสเตอร์ที่แตกต่างกันถูกเก็บไว้ใน: s ‹- stack(Density.tif, Aqui.tif, Rech.tif, Rainfall.tif, Land Use.tif, Cond.tif, Nitrogen.tif, Regions.tif, Soil.tif, Topo .tif, Climat class.tif, Depth.tif) - person Issoufou; 09.07.2016
comment
ถ้าฉันบวกค่าไนเตรตลงในจุด ฉันจะได้: 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.983 610 4 0.4054651 7.245675 -4.233336 5 0.4054651 12.096330 15.036016 6 0.6205765 - 4.255000 15.233745 ในกรณีนี้ หากฉันใส่ค่าไนเตรตด้วย LAT และ LONG เมื่อรันอีกครั้ง ข้อผิดพลาดจะปรากฏขึ้น: › d ‹- extract(s, point) Error in .xyValues(x, as.matrix(y) , ...) : xy ควรมี 2 คอลัมน์เท่านั้น พบมิติเหล่านี้: 82, 3 - person Issoufou; 09.07.2016
comment
ตัวแปรที่เรียกว่าไนเตรตไม่อยู่ในรูปแบบแรสเตอร์ แต่เป็นตัวแปรเชิงปริมาณ - person Issoufou; 09.07.2016

ดูเหมือนว่าข้อผิดพลาดจะเกิดขึ้นเมื่อคุณพยายามสร้างฟอเรสต์ การไม่ใช้อินเทอร์เฟซสูตรอาจเป็นประโยชน์มากที่สุด นอกจากนี้ หาก d มีขนาดใหญ่ ไม่แนะนำให้ใช้อินเทอร์เฟซสูตร จากไฟล์วิธีใช้บน randomForest: "สำหรับชุดข้อมูลขนาดใหญ่ โดยเฉพาะชุดข้อมูลที่มีตัวแปรจำนวนมาก ไม่แนะนำให้เรียก RandomForest ผ่านทางอินเทอร์เฟซของสูตร เนื่องจากอาจมีค่าใช้จ่ายมากเกินไปในการจัดการสูตร"

สมมติว่า d$nitrate มีอยู่แล้ว วิธีแก้ไขคือ randomForest(y = d$nitrate, x = subset(d, select = -nitrate), importance=TRUE, ntree=500, na.action = na.roughfix)

person Willis    schedule 15.07.2016