다변량, 자연 입방 스플라인 피팅


17

참고 : 한 달 후 더 정확한 답변을, 나는에 재 게시 한 SO

배경

모델 . 여기서 Y = f ( X )fY=f(X)

m 개의 매개 변수에서 추출한 샘플의 n × m 행렬이고 Y 는모형 출력의 n × 1 벡터입니다.Xn×mmYn×1

는 계산 집약적이므로 ( X , Y ) 점을통해 다변량 입방 스플라인을 사용하여 f 를 근사하고 싶습니다. 그래서더 많은 수의 점에서 Y 를평가할 수 있습니다.ff(X,Y)Y

질문

X와 Y 사이의 임의 관계를 계산하는 R 함수가 있습니까?

특히, 나는 splinefun단 변량 경우에 대한 스플라인 함수를 생성하는 함수 의 다변량 버전을 찾고 있습니다.

예를 들어 이것은 splinefun일 변량 사례에서 작동 하는 방식입니다.

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 () 함수를 사용해보십시오. 이것은 모든 차원의 큐빅 스플라인을 허용합니다
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 함수를 확인하고 예측하십시오.

다음은 3 차원 보간의 예입니다. 일반화하는 것은 간단 해 보입니다.

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는 좋은 선택입니다. 특정 요청에 대해 3 차 스플라인을 기본 함수 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는 그다지 도움이되지 않습니다. stop ( "Basis 만 1D 스무딩 만 처리") ( svn.r-project.org/R-packages/trunk/mgcv/R/smooth.r에서 )
Alex

0

함수의 형태에 대한 세부 사항은 제공하지 않습니다. 에프(엑스); 부분 단위 상수 함수는 충분히 좋은 근사치 일 수 있습니다.이 경우 회귀 트리를 적합하게 만들 수 있습니다 ( rpart예 : 패키지 포함 ). 그렇지 않으면 earth이미 제안 된 것 외에도 package를 볼 수 있습니다 .


1
의 형태 에프(엑스)이 문제의 범위를 벗어나지 만 Medvigy et al 2009 의 부록
David LeBauer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.