簡體   English   中英

如何將曲線擬合到 R 中的數據並得到方程?

[英]How to fit a curve to data in R and get the equation?

我有一個 dataframe,其 x 和 y 值在繪制時具有看起來像偏移對數正態分布的形狀。 數據是:

       x      y
400.0000 0.0158
410.3448 0.0373
420.6897 0.0379
431.0345 0.0303
441.3793 0.0250
451.7241 0.0212
462.0690 0.0234
472.4138 0.0295
482.7586 0.0329
493.1034 0.0364
503.4483 0.0469
513.7931 0.0678
524.1379 0.0851
534.4828 0.0693
544.8276 0.0508
555.1724 0.0482
565.5172 0.0617
575.8621 0.2510
586.2069 0.6570
596.5517 0.7360
606.8966 0.6690
617.2414 0.5810
627.5862 0.5060
637.9310 0.4390
648.2759 0.3640
658.6207 0.2980
668.9655 0.2390
679.3103 0.1480
689.6552 0.0496
700.0000 0.0122

並且可以在 R 中重新創建:

df = data.frame("x"=c(400.0000, 410.3448, 420.6897, 431.0345, 441.3793, 451.7241, 462.0690, 472.4138, 482.7586, 493.1034, 503.4483, 513.7931, 524.1379, 534.4828, 544.8276, 555.1724, 565.5172, 575.8621, 586.2069, 596.5517, 606.8966, 617.2414, 627.5862, 637.9310, 648.2759, 658.6207, 668.9655, 679.3103, 689.6552, 700.0000), "y"=c(0.0158, 0.0373, 0.0379, 0.0303, 0.0250, 0.0212, 0.0234, 0.0295, 0.0329, 0.0364, 0.0469, 0.0678, 0.0851, 0.0693, 0.0508, 0.0482, 0.0617, 0.2510, 0.6570, 0.7360, 0.6690, 0.5810, 0.5060, 0.4390, 0.3640, 0.2980, 0.2390, 0.1480, 0.0496, 0.0122))

我怎樣才能為這些數據擬合曲線並得到它的方程式? 我需要能夠在 400 到 700 之間的任何給定 x 值處訪問 y 的估計值。我也不太了解曲線擬合; 我只是環顧四周,看到它看起來像一條對數正態曲線,但不知道該怎么做。

如果這樣做的唯一原因是在給定 x 值的情況下估計 y 值,我們可以使用 loess 或 gam。 可能有必要使用 loess 的 span 參數。

plot(DF)
rng <- range(DF$x)
xx <- seq(rng[1], rng[2], length = 100)

lo <- loess(y ~ x, DF, span = 0.3)
lines(predict(lo, data.frame(x = xx)) ~ xx)

library(mgcv) # mgcv comes with R.  No need to install. Just load.
ga <- gam(y ~ s(x, bs = "cs"), data = DF)
lines(predict(ga, data.frame(x = xx)) ~ xx, col = 2, lty = 2)

legend("topleft", legend = c("loess", "gam"), lty = 1:2, col = 1:2)

截屏

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM