自然对数回归中曲线拟合不佳

时间:2019-04-08 15:42:55

标签: r statistics

我正在使用等式拟合20个以上数据集的对数曲线

y = intercept +  coefficient * ln(x) 

通过R在中生成

output$curvePlot <- renderPlot ({
    x=medianX
    y=medianY
    Estimate = lad(formula = y~log(x),method = "EM")
    logEstimate = lad(formula = y~log(x),method = "EM")
    plot(x,predict(Estimate),type='l',col='white')
    lines(x,predict(logEstimate),col='red')
    points(x,y)
    cf <- round(coef(logEstimate),1)
    eq <- paste0("y = ", cf[1],
        ifelse(sign(cf[2])==1, " + ", " - "), abs(cf[2]), " * ln(x) from 0 to ",xmax)
    mtext(eq,3,line=-2,col = "red")
    output$summary <- renderPrint(summary(logEstimate))
    output$calcCurve <- 
        renderPrint(round(cf[2]*log(input$calcFeet)+cf[1]))

    })

曲线在数据上始终“交叉两次”;在X轴的低/高点拟合得太低,在X轴的中点拟合得太高。

我真的不知道从这里去哪里。我错过了一个因素还是使用了错误的曲线? poorly fit curve

数据集长约60,000行,但我将其浓缩为中位数。选择中位数是因为我们的仪器导致数据中不可避免的异常值,特别是粗尾巴。

x,y
2,6.42
4,5.57
6,4.46
8,3.55
10,2.72
12,2.24
14,1.84
16,1.56
18,1.33
20,1.11
22,0.92
24,0.79
26,0.65
28,0.58
30,0.34
32,0.43
34,0.48
36,0.38
38,0.37
40,0.35
42,0.32
44,0.21
46,0.25
48,0.24
50,0.25
52,0.23

有关上下文的完整方法:

  

因变量样本的速度(ft / min)在   通过NIST校准的热线到风扇喷嘴的不同距离   风速计。我们通过以下方式控制仪器的准确性   风速计每周针对已知环境进行一次测试   具有已知孔径的压力管,以确保   校准保持在+/- 1%以内,   准确性评级。

     

我们控制了风速计在整个安装过程中的风扇对准   使用来自风扇中心的激光的轨道长度,   瞄准任何距离风速计中心不超过一英寸的地方   距离。

     

虽然我们没有明确控制环境因素,例如   室外空气温度,大气压力,我们认为这些   因素对测试结果的影响最小。确保   在许多环境中均匀地收集数据   在这种情况下,我们建造了一个将风速计推向轨道的机器人   每五分钟到另一个距离。这意味着数据会   反复在每个独立变量位置收集   几个小时的过程,而不是整个过程中的某个位置   小时。结果,24小时测试将测量   每个距离超过200倍,允许温度变化   全天加热或冷却房间,以解决任何令人困惑的问题   引入随机化的环境因素。

     

数据是通过热线风速计上的串行端口收集的,   保存带时间戳的CSV,其中包含以下字段:日期,时间,距离   来自风扇,测得的温度和测得的速度。分析   数据是在R中执行的。

     

测试:为了收集初始假设,我们采用了   每个距离的风速。选择了中位数,而不是   平均值,因为离群值在测量物理值的数据集中很常见   数量。随着空气在房间中流动,可能导致气流   暂时远离风速仪弯曲。这导致异常值   在低端并不能反映我们尝试的实际变量   测量。在某些情况下,有时   测得的距离看起来像是“喘气”,还是起伏不定。这是   只需站在风扇前面就可以感知,并且发生在   在一定程度上,所有距离的所有球迷。我们认为最有可能   造成这种膨化的原因是由于涡流和夹带   周围空气,暂时增加气流。中位数结果   使我们不必担心“吹”的感觉有多强,   并有助于限制空气弯曲对风速的影响   来自风速计,它不会影响实际空气速度,但是   仅测风速。利用我们的初始中值数据集,我们   使用对数回归来计算曲线以匹配数据并   在设定距离处生成了我们的初始速度曲线。验证   原始数据准确无误,我们进行了10次蒙特卡洛折叠   以25%的数据集进行仿真,并确保生成的   中位数彼此在合理的范围内。

     

验证:风扇每三个月运行一次,蒙特卡洛   观察到折叠模拟。如果错误率小于我们的5%   之前的测试,我们验证了之前的测试。

1 个答案:

答案 0 :(得分:2)

代码本身没有问题,您使用对数曲线找到了最佳拟合。我使用Mathematica进行了仔细检查,并获得了相同的结果。

问题似乎出在您的模型中。从您提供的数据和数据来源的描述来看,对数函数可能不是您测量的最佳模型。描述表明速度必须为x=0的有限值,并在趋近无穷时逐渐趋向于0。但是,负对数函数将在x=0处无限大,过一会儿将变为负数。

我不是物理学家,但是我的直觉倾向于使用平方反比定律或使用指数函数。我对它们都进行了测试,指数函数给出了更好的结果:

RFC 7231