2014-01-16 1 views
9

약간 이상한 질문이 있지만 누군가 나를 도울 수 있기를 바랍니다. 나는 호수 밑바닥의 표면 플롯을 만들고 호수 전체에 수생 식물이 발생하는 곳을 시각적으로 보여주는 식물의 주파수를 보여주는 몇 가지 점을 추가하려고합니다.3 차원에 대한 상한값을 0으로 설정 R에서 음수 값으로 매끄럽게하기

지금은 R에서 scatterplot3d 및 lattice 패키지를 사용하여 scatterplot3d와 와이어 프레임 모두에서 표면 플롯을 만드는 중입니다. 플롯 유형을 얻으려면 깊이를 음수로 변환해야합니다. 값 (호수의 수면을 z 축에서 0으로 상상해보십시오)을 입력 한 다음 위도와 경도 좌표로 황토 모델을 작성했습니다. 그러나 황토 모델이 양의 깊이를 예측한다는 것은 하나의 문제입니다. (물론 호수에서는 불가능하며, 0의 깊이에서 물 기둥으로 갈 수 있습니다.)

x <- seq(1,100,1) 
y <- seq(1,100,1) 
depth <- rbeta(100, 1, 50)*100 
depth <- -depth 

dep.lo <- loess(depth~x*y, degree=2, span=.25) # this shows a big warning, but it works 
coord.fit <- expand.grid(x=x, y=y) 
coord.fit$depth <- as.numeric(predict(dep.lo, newdata=coord.fit)) 
range(coord.fit$depth) 
    # -14.041011 6.986745 

당신이 볼 수 있듯이, 내 깊이는 거의 7로 -14에서가는 나의 모델은 이러한 종류의를 달성하지 않습니다 있도록 황토 모델에 상한을 설정하는 방법이 있나요 긍정적 인 가치? 어떤 도움

감사합니다,

+5

'mgcv' 패키지를 사용하여 로그 링크로 GAMM 피트를 시도하십시오. –

답변

6

당신이 황토 모델을 사용하려는 경우, 당신은 당신의 변수가 부정적인 유지하기 위해 변환을 사용할 수 있습니다. 당신은 당신의 포인트는 라인을 통해 있었기 때문에 경고를 받고, 그래서 조금에게 데이터 변경되었다 : 원래 예제를 사용

set.seed(123) 
n = 100 
x <- c(0, runif(n, min=1, max=100), 100) 
y <- c(0, runif(n, min=1, max=100), 100) 
depth <- rbeta(n+2, 1, 50)*100 
depth <- -depth 
range(depth) 

[1] -13.27248715 -0.01520178 

을, 당신은 얻을 것이다 :

dep.lo <- loess(depth~x*y, degree=2, span=.25) 
coord.fit <- expand.grid(x=seq(1,100,1), y=seq(1,100,1)) 
coord.fit$depth <- as.numeric(predict(dep.lo, newdata=coord.fit)) 
range(coord.fit$depth) 

[1] -7.498542 2.397855 

변환을 위해 log(-depth) 될 수 있습니다 예 :

tiny = 1e-3 
nlogdepth = log(-depth + tiny) # adding 'tiny' to ensure depth is not 0 
dep.lo <- loess(nlogdepth~x*y, degree=2, span=.25) 
coord.fit <- expand.grid(x=x, y=y) 
coord.fit$depth <- -exp(as.numeric(predict(dep.lo, newdata=coord.fit))) + tiny 
range(coord.fit$depth) 

[1] -16.9366043 -0.1091614 
관련 문제