微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何调整预测对数函数,使其更接近我的数据点?

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

我有以下数据(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))

raw data points

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

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

log plot

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

我猜我的数据不像我想象的那么接近对数函数,但是我如何调整我的预测函数以获得更紧密的拟合?

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

解决方法

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

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

const mongoose = require("mongoose");
const programImageBasePath = "uploads/programImages";
const path = require("path");
require("dotenv").config();
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;

const programSchema = new mongoose.Schema({
  programtype: {
     type: String,required: true,},title: {
     type: String,description: {
       type: String,createdAt: {
     type: Date,default: Date.now,programImage: {
     type: String,require: true,programcomments: [{ type: Schema.Types.ObjectId,ref: "Programcomment" }],});

programSchema.pre("remove",function (next) {
  Programcomment.remove({ programcomments: this._id }).exec();
  next();
});

programSchema.pre("deleteOne",function (next) {
  const programId = this.getQuery()["_id"];
   mongoose
     .model("Programcomment")
     .deleteMany({ program: programId },function (err,result) {
        if (err) {
            console.log(`[error] ${err}`);
            next(err);
        } else {
            console.log("success");
            next();
        }
    });
 });

 module.exports = mongoose.model("Program",programSchema);
 module.exports.programImageBasePath = programImageBasePath;

得到这个情节: newplot

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。