我想用R遺傳包(rgp)使用此處使用的技術進行非線性迴歸:Fitting a curve to specific data(請參閱第二種方法)。我,使用R包drc
爲heartrate
數據:rgp(R遺傳編程)包 - 無法做迴歸
library(drc)
head(heartrate)
# pressure rate
#1 50.85 348.76
#2 54.92 344.45
#3 59.23 343.05
#4 61.91 332.92
#5 65.22 315.31
#6 67.79 313.50
library(rgp)
res <- symbolicRegression(rate ~ pressure, data=heartrate)
(symbreg <- res$population[[which.min(sapply(res$population, res$fitnessFunction))]])
#function (pressure)
#pressure + (pressure/0.853106872646055 + pressure)
ggplot() +
geom_point(data=heartrate, aes(pressure,rate), size = 3) +
geom_line(data=data.frame(symbx=heartrate$pressure,
symby=sapply(heartrate$pressure, symbreg)),
aes(symbx, symby), colour = "red")
但是,我正在生成的迴歸線顯然是不正確。數據點的分佈表明曲線關係隨着壓力增加而降低(反向關聯)。然而,所產生的迴歸線是線性的並且方向錯誤。
哪裏錯誤?
編輯:
採用實施意見提出由@ cuttlefish44增加步驟:
res = symbolicRegression(rate ~ pressure, data = heartrate, stopCondition = makeStepsStopCondition(45000))
(symbreg <- res$population[[which.min(sapply(res$population, res$fitnessFunction))]])
#function (pressure)
#exp(exp(exp(cos(cos(-9.23878724686801/pressure)))))
它用了8分鐘就可以完成。情節是:
迴歸線的方向比上述更好,但它表明,這將需要很長的時間才能達到明顯的方向(!)。由@墨魚魚44獲得的函數的迴歸線也是相似的,並且不太合適。
在你的情況下,'stopCondition','makeTimeStopCondition(5)'的默認值是否太短?'符號迴歸(率〜壓力,數據=心率,stopCondition = makeStepsStopCondition(45000))'給了我'符號;函數(壓力)exp(exp(exp(exp(exp(tan(6.91310722380877 /壓力 - sin(0.932394750416279))* cos(exp(sin(-9.12634917534888))))))))' – cuttlefish44
我已經添加了結果以上。 – rnso