เหมาะสมหลายตัวแปรลูกบาศก์ธรรมชาติ


17

หมายเหตุ: หากไม่มีคำตอบที่ถูกต้องหลังจากผ่านไปหนึ่งเดือนฉันได้โพสต์ข้อความใหม่เป็นSO

พื้นหลัง

ฉันมีแบบจำลองที่Y = f ( X )fY=f(X)

คือเมทริกซ์ n × mของตัวอย่างจากพารามิเตอร์ mและ Yคือ n × 1Xn×mmYn×1เวกเตอร์ของเอาต์พุตโมเดล

มีการคำนวณอย่างเข้มข้นดังนั้นฉันจึงต้องการประมาณ fโดยใช้ลูกบาศก์หลายตัวแปรผ่านจุด ( X , Y )เพื่อให้ฉันสามารถประเมิน Yที่จุดจำนวนมากff(X,Y)Y

คำถาม

มีฟังก์ชั่น R ที่จะคำนวณความสัมพันธ์โดยพลการระหว่าง X และ Y หรือไม่?

โดยเฉพาะฉันกำลังมองหารุ่นหลายตัวแปรของsplinefunฟังก์ชั่นซึ่งสร้างฟังก์ชั่น spline สำหรับกรณี univariate

เช่นนี้เป็นวิธีการsplinefunทำงานสำหรับกรณี univariate

x <- 1:10
y <- runif(10)
foo <- splinefun(x,y)
foo(1:10) #returns y, as example
all(y == foo(1:10))
## TRUE

สิ่งที่ฉันได้ลอง

ฉันได้ตรวจสอบแพ็กเกจmdaและดูเหมือนว่าสิ่งต่อไปนี้จะใช้งานได้:

library(mda)
x   <- data.frame(a = 1:10, b = 1:10/2, c = 1:10*2)
y   <- runif(10)
foo <- mars(x,y)
predict(foo, x) #all the same value
all(y == predict(foo,x))
## FALSE

แต่ฉันไม่สามารถหาวิธีที่จะใช้ลูกบาศก์อิสระ mars

อัปเดตตั้งแต่เสนอเงินรางวัลฉันเปลี่ยนชื่อ - ถ้าไม่มีฟังก์ชั่น R ฉันจะยอมรับตามลำดับที่ต้องการ: ฟังก์ชั่น R ที่ส่งออกฟังก์ชั่นกระบวนการเกาส์เซียนหรือฟังก์ชั่นการแก้ไขหลายตัวแปรอื่นที่ผ่านจุดการออกแบบ ใน R, Matlab อื่น


ลองใช้ฟังก์ชั่น gam () จะอนุญาตให้มีมิติใด ๆ ของลูกบาศก์ Splines
user5563

คำตอบ:


11

เอกสารนี้นำเสนอที่ UseR! ปี 2009 ดูเหมือนจะแก้ไขปัญหาที่คล้ายกัน

http://www.r-project.org/conferences/useR-2009/slides/Roustant+Ginsbourger+Deville.pdf

แนะนำแพ็คเกจ DiceKriging http://cran.r-project.org/web/packages/DiceKriging/index.html

โดยเฉพาะให้ตรวจสอบฟังก์ชั่น km และทำนาย

นี่คือตัวอย่างของการแก้ไขสามมิติ ดูเหมือนจะตรงไปตรงมาเพื่อสรุป

x <- c(0, 0.4, 0.6, 0.8, 1)
y <- c(0, 0.2, 0.3, 0.4, 0.5)
z <- c(0, 0.3, 0.4, 0.6, 0.8)

model <- function(param){
2*param[1] + 3*param[2] +4*param[3]
}


model.in <- expand.grid(x,y,z)
names(model.in) <- c('x','y','z')

model.out <- apply(model.in, 1, model)

# fit a kriging model 
m.1 <- km(design=model.in, response=model.out, covtype="matern5_2")

# estimate a response 
interp <- predict(m.1, newdata=data.frame(x=0.5, y=0.5, z=0.5), type="UK",    se.compute=FALSE)
# check against model output
interp$mean
# [1]  4.498902
model(c(0.5,0.5,0.5))
# [1] 4.5

# check we get back what we put in
interp <- predict(m.1, newdata=model.in, type="UK", se.compute=FALSE)
all.equal(model.out, interp$mean)
# TRUE

6

คุณต้องการข้อมูลเพิ่มเติมเพื่อความพอดี mgcv แน่นอนเป็นทางเลือกที่ดี สำหรับคำขอเฉพาะของคุณคุณต้องตั้งค่าลูกบาศก์อิสระเป็นฟังก์ชันพื้นฐาน bs = 'cr' และยังไม่ได้ลงโทษ fx = TRUE ตัวเลือกทั้งสองถูกตั้งค่าสำหรับคำที่ราบรื่นที่ตั้งค่าด้วย s () ทำนายผลได้ตามคาด

library(mgcv)
x <- data.frame(a = 1:100, b = 1:100/2, c = 1:100*2)
y <- runif(100)
foo <- gam(y~a+b+s(c,bs="cr",fx=TRUE),data=x)
plot(foo)
predict(foo,x)

ขอบคุณสำหรับความช่วยเหลือของคุณ แต่ถ้านี่เป็นลูกบาศก์เส้นโค้งฉันไม่ควรคาดหวังที่predict(foo,x)จะกลับมาy?
David LeBauer

ขออภัยไม่ได้สังเกตว่าคุณต้องการการประมาณที่สมบูรณ์แบบ เห็นได้ชัดว่า mgcv ไม่ได้ช่วยอะไรมาก: หยุด ("พื้นฐานเท่านั้นจัดการกับ 1D เรียบ") (จากsvn.r-project.org/R-packages/trunk/mgcv/R/smooth.r )
Alex

0

คุณไม่ให้รายละเอียดเกี่ยวกับรูปแบบของฟังก์ชั่น (X); มันอาจเป็นไปได้ว่าฟังก์ชั่นค่าคงที่ทีละชิ้นคือการประมาณที่ดีพอซึ่งในกรณีนี้คุณอาจต้องการให้พอดีกับแผนผังการถดถอย (พร้อมกับแพคเกจrpartเป็นต้น) มิฉะนั้นคุณอาจต้องการดูแพ็คเกจearthนอกเหนือจากสิ่งที่ได้รับการแนะนำแล้ว


1
รูปแบบของ (X)อยู่นอกเหนือขอบเขตของปัญหานี้ แต่เป็นรูปแบบพืชทั่วโลกแบบไดนามิกที่อธิบายไว้ในภาคผนวกของMedvigy et al 2009
David LeBauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.