为 f(x) 黄土函数寻找 x
Finding x for f(x) loess function
我有几个使用类似数据的黄土模型....
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)
我想要完成的(没有任何运气)是确定平滑线在哪里做两件事:
1) 我想确定线在 x 的什么值处穿过 y=0
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)
您可以使用predict
获取任意x的y值,然后优化以找到解决您想要的y值的特定x值。
例如,要找到模型的零交叉点,我们可以优化找到其拟合值的平方最小值的位置
zero1 <- optimize(function(x, m) predict(m, x)^2, range(x), model)
#
# $minimum
# [1] 67.89191
请注意,这只会找到一个局部最小值。如果您的模型多次越过零,您将需要在每个存在零的范围内像这样求解(通过更改 optimize
的第二个参数,它指定要在其中搜索的范围)。
完全相同的方法可以找到模型相交的地方。对于这种情况,您可以最小化两个模型之间差异的平方:
intersection <- optimize(function(x, m1, m2) (predict(m1, x) - predict(m2, x))^2,
range(x), model, model2)
# $minimum
# [1] 45.65295
我有几个使用类似数据的黄土模型....
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)
我想要完成的(没有任何运气)是确定平滑线在哪里做两件事:
1) 我想确定线在 x 的什么值处穿过 y=0
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)
您可以使用predict
获取任意x的y值,然后优化以找到解决您想要的y值的特定x值。
例如,要找到模型的零交叉点,我们可以优化找到其拟合值的平方最小值的位置
zero1 <- optimize(function(x, m) predict(m, x)^2, range(x), model)
#
# $minimum
# [1] 67.89191
请注意,这只会找到一个局部最小值。如果您的模型多次越过零,您将需要在每个存在零的范围内像这样求解(通过更改 optimize
的第二个参数,它指定要在其中搜索的范围)。
完全相同的方法可以找到模型相交的地方。对于这种情况,您可以最小化两个模型之间差异的平方:
intersection <- optimize(function(x, m1, m2) (predict(m1, x) - predict(m2, x))^2,
range(x), model, model2)
# $minimum
# [1] 45.65295