我有一个数据框(gdata),其中包含函数的x(作为“r”)和y(作为“km”)坐标。当我这样绘制时:
plot(x = gdata$r, y = gdata$km, type = "l")
Run Code Online (Sandbox Code Playgroud)
现在我想计算从 x = 0 到 x = 0.6 的曲线下面积。当我寻找合适的包时,我只找到类似 ROC 曲线的 AUC 计算之类的东西。但是有没有一种方法可以计算普通函数的 AUC?
给定数据点集的曲线下面积 (AUC) 可以使用数值积分进行存档:
\n让data是包含 x 和 y 值的数据框。您可以通过积分该函数来获得从下 x0=0 到上 x1=0.6 的曲线下面积,该函数线性逼近您的数据。
这是一个数值近似值,并不精确,因为我们没有无限数量的数据点:因为y=sqrt(x)我们将得到 0.3033,而不是真实值 0.3098。对于 200 行,如果dataauc=0.3096,我们会得到更好的结果。
library(tidyverse)\n\ndata <-\n tibble(\n x = seq(0, 2, length.out = 20)\n) %>%\n mutate(y = sqrt(x))\ndata\n#> # A tibble: 20 \xc3\x97 2\n#> x y\n#> <dbl> <dbl>\n#> 1 0 0 \n#> 2 0.105 0.324\n#> 3 0.211 0.459\n#> 4 0.316 0.562\n#> 5 0.421 0.649\n#> 6 0.526 0.725\n#> 7 0.632 0.795\n#> 8 0.737 0.858\n#> 9 0.842 0.918\n#> 10 0.947 0.973\n#> 11 1.05 1.03 \n#> 12 1.16 1.08 \n#> 13 1.26 1.12 \n#> 14 1.37 1.17 \n#> 15 1.47 1.21 \n#> 16 1.58 1.26 \n#> 17 1.68 1.30 \n#> 18 1.79 1.34 \n#> 19 1.89 1.38 \n#> 20 2 1.41\n\nqplot(x, y, data = data)\nRun Code Online (Sandbox Code Playgroud)\n
integrate(approxfun(data$x, data$y), 0, 0.6)\n#> 0.3033307 with absolute error < 8.8e-05\nRun Code Online (Sandbox Code Playgroud)\n由reprex 包于 2021 年 10 月 3 日创建(v2.0.1)
\n返回的绝对误差integrate是 corerect,当且仅当每两个数据点之间的现实世界是完美的线性插值,正如我们假设的那样。
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |