我有一个来自生物实验的数据集:
x = c(0.488, 0.977, 1.953, 3.906, 7.812, 15.625, 31.250, 62.500, 125.000, 250.000, 500.000, 1000.000)
y = c(0.933, 1.036, 1.112, 1.627, 2.646, 5.366, 11.115, 2.355, 1.266, 0, 0, 0)
plot(log(x),y)
表示浓度,y表示我们的测定中的响应。
情节可以在这里找到:1
如何预测预定义y值的x值(浓度)(在我的情况下为1.5)?
在黄土平滑后,我可以预测定义的x值的y值。参见示例:
smooth_data <- loess(y~log(x))
predict(smooth_data, 1.07) # which gives 1.5
使用预测函数,x = 1.07和x = 5.185都会导致y = 1.5
有没有一种方便的方法可以从y = 1.5的黄土回归中获得估算值,而无需在预测函数中手动输入一些x值?
有什么建议吗?
答案 0 :(得分:0)
我猜你的x和y是对吗?所以对于 f(0.488)= 0.933 等等?
我认为更多的数学问题:)。
如果您可以定义一个描述图表的函数,那将非常简单。
您还可以在所有点之间绘制一条直线,对于与y值相交的每一条线,您都可以获得相应的x值。但直线并不是真正的前提。
如果你有足够的配对,你也可以训练一个 neureal网络。这可能会让你获得最好的结果,但需要一些时间和很多对来训练。
您能否澄清一下您的问题并告诉我们您在寻找什么?这样做的方法还是代码示例?
我希望这对你至少有所帮助:)
答案 1 :(得分:0)
由于你的函数不是单调的,所以没有真正的逆,但是如果你把它分成两个函数 - 一个用于x&lt;最大值和x> 1;最大值 - 你可以创建两个反函数并求解你想要的y值。
smooth_data <- loess(y~log(x))
X = seq(0,6.9,0.1)
P = predict(smooth_data, X)
M = which.max(P)
Inverse1 = approxfun(X[1:M] ~ P[1:M])
Inverse2 = approxfun(X[M:length(X)] ~ P[M:length(X)])
Inverse1(1.5)
[1] 1.068267
predict(smooth_data, 1.068267)
[1] 1.498854
Inverse2(1.5)
[1] 5.185876
predict(smooth_data, 5.185876)
[1] 1.499585