我的曲线通过一定的门槛

我觉得这很简单,但我真的很难。 无论做什么,我都可以使用excel或R。 我只需要知道这些曲线何时通过一定的值。

我试图添加一个额外的行到我的图表,看看是否有一个相交function,但没有。

Years Y 10 0 20 0 50 5.54 100 21.81 200 46.24 500 71.96 1000 84.74 1500 89.63 2000 91.94 

我需要知道这条曲线在哪里穿过90

 Years Y 10 1 20 0.96 50 0.28 100 0 200 0 500 0 1000 0 1500 0 2000 0 

我需要知道这条曲线在哪里穿过0.01

编辑的情况下,它可以帮助(而不是从OP):

SO19006597问题示例

如果设置逆模型$ x = f(y)$(例如Years ~ Y )是适当的,则可以构build并评估它。 (想想逆向build模的后果,但是。)

  • 对于线性逼近,看看?approx
  • 如果你需要一个特定types的模型,那么也许你可以build立你所要求的依赖关系的逆模型,那么?predict就是你的朋友。

下面是第一个数据集( loess )的经典和逆向build模之间差异的一个例子:

古典:
古典模型

逆:
逆模型

由于反演模型假定年的误差在Y上是误差,所以Y = 90的线越过模型拟合的95%置信区间。 年数= 1375年和1900年的逆模型。 对于经典模型,假设Y上的误差占主导地位。 在这种情况下,所有年份都在ca. 800在拟合的95%置信区间内,置信区间几乎接近第一年已经在350年左右的Y = 90线。
请注意,点估计值也有所不同:Y = 90与ca的经典拟合值相交。 1435,而反配合在1635交叉。

(当然,你可能想要更严格的模型)

你需要做的第一件事就是决定如何为你的数据拟合曲线。 有很多方法可以做到这一点,显然答案取决于你的select。 如果用“曲线”表示线性插值(即“连接点”),那么像这样的函数将会在第一次find一个阈值:

 findCross<-function(years, y, value){ over <- y > value w <- which(over != over[1])[1] frac <- (value - y[w-1]) / (y[w] - y[w-1]) years[w-1] + (years[w] - years[w-1]) * frac } 

我将使用线性,多项式或非线性拟合来适合数据,以最适合您的数据和目的。 然后使用你创build和运行的fit函数

uniroot(fit_fun-90,upperbound,lowerbound)

编辑 – 托马斯的评论:任何R的拟合工具,如lmnls包括拟合函数中的所有项的系数。 例如,对于简单的线性拟合,提供斜率和截距。 通过这些信息,创build一个新的fit_fun<-function(x) {intercept + slope*x}

减去90的原因是uniroot寻找一个“根”,即零值,所以我基本上应用了一个偏移量的函数。 详情请参阅?uniroot