【问题标题】:predict x value with given y using loess使用黄土预测给定 y 的 x 值
【发布时间】:2018-01-20 17:33:06
【问题描述】:

我有一个生物实验的数据集:

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)

x 代表浓度,y 代表我们测定中的反应。

情节可以在这里找到:1

如何预测预定义 y 值(在我的例子中为 1.5)的 x 值(浓度)?

经过黄土平滑后,我可以在定义的 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 值?

有什么建议吗?

【问题讨论】:

    标签: r predict loess


    【解决方案1】:

    我猜你的 x 和 y 是成对的?那么对于 f(0.488) = 0.933 等等?

    在我看来更多的是一个数学问题:)。

    如果你可以定义一个描述你的图表的函数,那就很容易了。

    您还可以在所有点之间画一条直线,并且对于与您的 y 值相交的每条线,您可以获得相应的 x 值。但直线并不是真正的珍贵。

    如果你有足够的对,你也可以训练一个神经网络。这可能会给你带来最好的结果,但需要一些时间和很多对来训练。

    您能否澄清一下您的问题并告诉我们您在寻找什么?一种方法或代码示例?

    我希望这至少对您有所帮助:)

    【讨论】:

    • 是的,x 和 y 是成对的。提供的数据只是众多数据集中的一个。所有点之间的直线是一种可能的方法。
    【解决方案2】:

    由于您的函数不是单调的,因此没有真正的逆函数,但如果将其拆分为两个函数 - 一个用于 x 最大值 - 您可以创建两个逆函数并求解你想要。

    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
    

    【讨论】:

    • 我只是想知道是否有某种类似的 inverse.predict 函数:link 用于黄土回归?据我了解,r 必须使用某种函数来计算/显示该行。这会以某种方式“颠倒”吗?
    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2017-09-05
    相关资源
    最近更新 更多