【问题标题】:How to improve the use of function splinefun?如何提高函数splinefun的使用?
【发布时间】:2022-12-03 01:12:41
【问题描述】:

我的代码部分工作正常:

C <- c(0, 0.3, 1.5, 3.5, 19.5)

v1 <- c(0.00, 0.00, 0.00, 0.26, 0.91) 
H <- 1
n <- 1

V <- function(C, H, n) {
  1/(1 + (C/H)^n) 
}


y_spa1 <- V(C, H, n)  
x_dense1 <- seq(0, 10, by=0.1)
y_dense1 <- splinefun(y_spa1, C, )(x_dense1)
y_dense <- approx(C, y_spa1, xout=x_dense1)$y
which(y_dense1 <= 0.5)
which(y_dense1 <= 0.5)[1]
x_dense1[which(y_dense1 <= 0.5)[1]]

在我看来,当我尝试对 v1 执行相同操作时,它没有给我正确的结果,可能是因为某些值为 0?

y_spa1 <- V(C, H, n)  
x_dense1 <- seq(0, 10, by=0.1)
y_dense1 <- splinefun(y_spa1, v1, )(x_dense1)
y_dense <- approx(v1, y_spa1, xout=x_dense1)$y
which(y_dense1 <= 0.5)
which(y_dense1 <= 0.5)[1]
x_dense1[which(y_dense1 <= 0.5)[1]]


which(y_dense1 <= 0.5)[1]
# [1] 3
x_dense1[which(y_dense1 <= 0.5)[1]]
# [1] 0.2

我认为结果太低了。我在 R 中没有这方面的经验,所以我向论坛寻求帮助。

【问题讨论】:

  • 感谢 jay.sf 的编辑
  • 请给我一些关于我的问题的提示?我在代码中做错了什么吗?
  • 请有人告诉我我的代码或我的假设中是否存在错误?这对我来说非常重要。

标签: r function


【解决方案1】:

看起来你打电话给splinefun无意中交换了 x 和 y 参数,从而从 y 预测 x:y_dense1 &lt;- splinefun(y_spa1, C, )(x_dense1)

将您的代码归结为minimal reproducible example并绘制结果会揭示这一点(并且更容易帮助你)。在本质上:

xs = .1 * 1:100
ys =  1 / (1 + xs) 

plot(xs, ys)

## overlay thick blue interpolated curve from splinefun:
curve(splinefun(xs, ys)(x), lwd = 4, col = 'blue', add = TRUE)

## overlay thin red interpolated curve from approxfun:
curve(approxfun(xs, ys)(x), lwd = 1, col = 'red', add = TRUE)

现在splinefunapprox(通过approxfuncurve提供功能)与数据一致(图未显示)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 2017-01-17
    • 1970-01-01
    • 2021-11-14
    • 2014-03-20
    • 1970-01-01
    • 2020-08-04
    • 2014-05-05
    相关资源
    最近更新 更多