2017-09-07 31 views
1

私はスプラインでデータを補間する方法を検討していますが、値とその派生物を強制的に終点に配置します。これが私のデータである:今スプラインによる制限付き回帰

library(tidyverse) 
data <- tibble(x = 0:600, y = pnorm((-300:300)/100)+(runif(0:600)-0.5)/20) 
# add noise 
data$y[1] <- 0.35 
data$y[2] <- 0.25 
ggplot(data, aes(x = x, y = y)) + geom_point() 

のは、ノイズのため、スプライン

fit <- lm(formula = y ~ splines::ns(x, 5), 
      data = data) 
data$y_new <- predict.lm(fit) 
ggplot(data, aes(x = x, y = y_new)) + geom_point(aes(y = y), alpha = 0.5) + 
geom_point(color = 'red') 

enter image description here

あなたが見ることができるようにしてこのデータをフィットさせ、中に残ったわずかな上向きの曲率があります左側のスプライン(右側の下向きの曲率)。

x = 0のときにスプラインの値を0にし、スプラインの導関数を0(水平)にしたいと思っています。これまで私はこれを行うことができませんでした。

私はまた、Boundary.knots引数で試してみましたが、それも私を助けませんでした。

答えて

1

ここでは完全に質問の派生一部に取り組むが、どうやらそれはまた、穂軸を持つことができているしませんそれを

spline <- with(data, cobs::cobs(x, y, pointwise=rbind(c(0,min(x),0),c(0,max(x),1)))) 
data$y_new <- predict(spline, z = data$x)[,2] 
ggplot(data, aes(x = x, y = y_new)) + 
    geom_point(aes(y = y), alpha = 0.5) + 
    geom_point(color = 'red') 

enter image description here

via

+0

を行うための一つの方法です – takje

+0

@takje Hmは2番目のx値の予測も強制的にゼロにしますか? – lukeA

+0

これはextreem補間につながる可能性がありますか、間違っています。 x1とx2の間で何が必要なのかは依然として可能です。必ずしも直線である必要はありません。 – takje