2015-11-02 207 views
2

我无法找到适合我的数据的正确曲线。如果有人比我更懂得有更好的拟合曲线的想法/解决方案,我会非常感激。R nls:拟合曲线到数据

数据:目的是从y中预测X

dat <- data.frame(x = c(15,25,50,100,150,200,300,400,500,700,850,1000,1500), 
        y = c(43,45.16,47.41,53.74,59.66,65.19,76.4,86.12,92.97, 
         103.15,106.34,108.21,113)) 

这是多远我来:

model <- nls(x ~ a * exp((log(2)/b) * y), 
      data = dat, start = list(a = 1, b = 15), trace = T) 

这是不是一个非常适合:

dat$pred <- predict(model, list(y = dat$y)) 
plot(dat$y, dat$x, type = 'o', lty = 2) 
points(dat$y, dat$pred, type = 'o', col = 'red') 

fit plot

个感谢,F

+0

在R的'plot'函数中,第一个参数是'x'参数,第二个参数是'y'。你在'y'轴上绘制了'dat $ x'。你可能想纠正它。 –

+1

对于一些事情,我发现Excel比R更直观 - 例如,你可以在Excel中拟合一个趋势线,可以看到更高阶的多项式函数很合适,最后你可能会落在这里[http: //stackoverflow.com/questions/3822535/fitting-polynomial-model-to-data-in-r)。 – lukeA

回答

5

预测从雅X 5次多项式不是那么parsimonius但确实适用:

fm <- lm(x ~ poly(y, 5), dat) 
plot(x ~ y, dat) 
lines(fitted(fm) ~ y, dat) 

(剧情后继续)

screenshot

你也可以考虑drc包装的UCRS.5b型号:

library(drc) 
fm <- drm(x ~ y, data = dat, fct = UCRS.5b()) 
plot(fm) 

screenshot

注:本来,我以为你想从X预测y和写了下面的答案。

立方看起来相当不错:

plot(y ~ x, dat) 
fm <- lm(y ~ poly(x, 3), dat) 
lines(fitted(fm) ~ x, dat) 

(剧情后继续)

screenshot

A 4参数逻辑看起来也不错:

library(drc) 
fm <- drm(y ~ x, data = dat, fct = LL.4()) 
plot(fm) 

screenshot

+0

谢谢!立方看起来确实很不错。但它从x预测y,我想从y预测x。 –

+0

对不起,我用'drm'代替'drc'包 –

+0

P.S我不熟悉'drc'包。你知道如何获得预测的x值吗?谢谢! –