我正在使用等式拟合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轴的中点拟合得太高。
我真的不知道从这里去哪里。我错过了一个因素还是使用了错误的曲线?
数据集长约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% 之前的测试,我们验证了之前的测试。
答案 0 :(得分:2)
代码本身没有问题,您使用对数曲线找到了最佳拟合。我使用Mathematica进行了仔细检查,并获得了相同的结果。
问题似乎出在您的模型中。从您提供的数据和数据来源的描述来看,对数函数可能不是您测量的最佳模型。描述表明速度必须为x=0
的有限值,并在趋近无穷时逐渐趋向于0。但是,负对数函数将在x=0
处无限大,过一会儿将变为负数。
我不是物理学家,但是我的直觉倾向于使用平方反比定律或使用指数函数。我对它们都进行了测试,指数函数给出了更好的结果: