首页 > 解决方案 > 如何调整预测的对数函数,使其更接近我的数据点?

问题描述

我有以下数据(N=100):

data <- c(0.00625184781684353,0.00476045914992689,0.00410579590496692,0.00364190024330886,0.00330959588679313,0.00295162467178293,0.00294139180137722,0.00309671219181701,0.00275951517937275,0.00259638723910849,0.00255055235436329,0.00253639564250565,0.00245535559384006,0.00228326375027479,0.00223552980728776,0.00256747699305967,0.00236892396756154,0.00223789975401336,0.00227117347429151,0.00221586146913485,0.0022126769368319,0.00227402304510622,0.0021468617279666,0.00225341888941175,0.00211058992596496,0.00219476252758117,0.00210173301929526,0.00227560193923749,0.00203577505430919,0.00203318498773805,0.00201499827623374,0.00213377036862111,0.00206677581233842,0.00195908442478977,0.0019074281942733,0.00219326497963758,0.00209439107947152,0.00207351039547349,0.00212462221193429,0.00195082242453627,0.00201628705333334,0.0019459203467357,0.00201864564961588,0.00207500005646203,0.0019938335042378,0.00191824828638271,0.00185918053681837,0.00198330566751539,0.0020937511770958,0.00204318381191582,0.00188128649781538,0.00196154000701513,0.00200027621624583,0.0019031292568209,0.0019753645338664,0.00194343623099681,0.00196234854381748,0.00181813976154867,0.00185406846974441,0.0018843993826779,0.00196087591340332,0.00191469615832241,0.0018892813892349,0.00183363182300353,0.00194453589002172,0.00187398813393513,0.0020276166397646,0.00198038284208184,0.00196217220130672,0.00195852945385389,0.00177850240578155,0.00180944090794838,0.00187680265865063,0.00190294215181125,0.00186901596278278,0.00196375687750163,0.00187750813211545,0.00184528196260878,0.00186578257197937,0.00192412901406411,0.00185024869288581,0.0018639679556602,0.00182641530017768,0.00177603379012923,0.0018389901669527,0.0018349308865919,0.00181465024821425,0.00179648127204045,0.00187579404215745,0.00187312385928857,0.00180997375009525,0.00188721222926752,0.00188570075420681,0.00188739190357344,0.00182526851985943,0.00193092855207866,0.00179597246861001,0.00188372398815342,0.00179976677825106,0.00196100767251016)

我在 ggplot 中绘制了这些点,结果如下:

require(ggplot2)
df <- data.frame(x = 1:100,y=data)
ggplot2::ggplot(df,aes(x,y)) + geom_point(aes(x,y))

原始数据点

我想通过这些点拟合曲线。我怀疑数据的行为接近对数函数,所以我用预测函数拟合了一个并将其添加到图中:

logpredict <- lm(df$y ~ log(df$x))
ggplot2::ggplot(df,aes(x,y)) + geom_point(aes(x,y)) +
  geom_line(data=data.frame(df$x,predict(logpredict)),aes(x=df$x,y=predict.logpredict.),color="red3")

对数图

这非常接近我正在寻找的结果,但我对合身不满意。我不确定如何正确描述它,但我希望曲线是......“曲线”,这意味着它更接近实际数据点。所以 10 < x < 50 更低,50 < x < 100 更高。

我猜我的数据并不像我想象的那样接近日志函数,但是我怎样才能调整我的预测函数以获得更紧密的拟合?

编辑:例如,对数函数越来越接近 0,而我怀疑我的数据不会收敛到 0,而是收敛到 ~0.0017 的值。

标签: rstatistics

解决方案


经过仔细考虑,我觉得日志函数不适合我的数据这一事实导致我寻找可能与我的数据相似的其他可能的函数。

在这个Stackoverflow 问题的帮助下,我使用了

fit <- lm(df$y ~ I(1/df$x))
ggplot2::ggplot(df,aes(x,y)) + geom_point(aes(x,y)) +
  geom_line(data=data.frame(df$x,predict(fit)),aes(x=df$x,y=predict.fit.),color="red3")

得到这个情节: 新情节

我觉得这更适合我的数据。


推荐阅读