1

同様のデータを使用した黄土モデルがいくつかあります....

set.seed(123)

y<-(runif(100,-20,20))
z<-seq(-12.75,12,.25)*rnorm(100,1,3)
x<-seq(1,100,1)
df<-data.frame(cbind(y,x,z))
model <- loess(y ~ x, data = df)
model2<-loess(z~x,data=df)

私が(運なしで)達成しようとしているのは、平滑化された線が2つのことを行う場所を特定することです:

1) 線が y=0 と交差する x の値を特定したい

2) 2 つの黄土線が交差する x の値を特定したい。

私は、同様の問題とそれらの問題に対する解決策をあまりにも長い間探してきましたが、成功していません。どんな助けでも大歓迎です。

ggplot(df,aes(x=x,y=y))+
  geom_point()+
  geom_smooth(method="loess",se=F)+
  geom_smooth(aes(y=z),method="loess",se=F)
4

1 に答える 1

2

を使用predictして任意の x の y 値を取得し、最適化して、必要な y 値を解決する特定の x 値を見つけることができます。

たとえば、モデルのゼロクロッシングを見つけるために、適合値の 2 乗が最小になる場所を見つけるように最適化できます。

zero1 <- optimize(function(x, m) predict(m, x)^2, range(x), model) 
# 
# $minimum
# [1] 67.89191

これは単一のローカル最小値のみを見つけることに注意してください。モデルが数回ゼロを横切る場合、ゼロがある各範囲でこのように解く必要があります (optimize検索する範囲を指定する の 2 番目の引数を変更することによって)。

まったく同じアプローチで、モデルが交差する場所を見つけることができます。その場合、2 つのモデルの差の 2 乗を最小化します。

intersection <- optimize(function(x, m1, m2) (predict(m1, x) - predict(m2, x))^2,
              range(x), model, model2)  
# $minimum
# [1] 45.65295
于 2016-11-11T15:31:29.963 に答える