2016-12-04 52 views
1

我想用R遺傳包(rgp)使用此處使用的技術進行非線性迴歸:Fitting a curve to specific data(請參閱第二種方法)。我,使用R包drcheartrate數據: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") 

但是,我正在生成的迴歸線顯然是不正確。數據點的分佈表明曲線關係隨着壓力增加而降低(反向關聯)。然而,所產生的迴歸線是線性的並且方向錯誤。

enter image description here

哪裏錯誤?

編輯:

採用實施意見提出由@ 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分鐘就可以完成。情節是:

enter image description here

迴歸線的方向比上述更好,但它表明,這將需要很長的時間才能達到明顯的方向(!)。由@墨魚魚44獲得的函數的迴歸線也是相似的,並且不太合適。

+0

在你的情況下,'stopCondition','makeTimeStopCondition(5)'的默認值是否太短?'符號迴歸(率〜壓力,數據=心率,stopCondition = makeStepsStopCondition(45000))'給了我'符號;函數(壓力)exp(exp(exp(exp(exp(tan(6.91310722380877 /壓力 - sin(0.932394750416279))* cos(exp(sin(-9.12634917534888))))))))' – cuttlefish44

+0

我已經添加了結果以上。 – rnso

回答

-1

您可能已經閱讀過此內容,但我認爲您的回答隱藏在Oliver Flasch編寫的this introduction to RGP package內。

我對rgp軟件包一無所知,但如果您只想要線性迴歸,您爲什麼不使用基本包中的lm()函數?

至少你將能夠估計β 和β 參數爲普通最小二乘迴歸:

率= β *壓力+ β

 linear.model <- lm(rate ~ pressure, data=heartrate) 

    ggplot(data=heartrate, aes(x=pressure,y=rate)) + 
     geom_point() + 
     geom_smooth(method="lm", col="red") 

linear regression with ggplot2

您可以訪問coeficcients與linear.model$coefficients

您仍然可以linear.model$fitted.values

您可以訪問殘留與操縱預測值:linear.model$residuals

如果你想以更精確地擬合曲線線性模型可能不足,您可以嘗試glm或多項式迴歸,並選擇AIC或BIC標準的最佳模型。

+0

我不想要線性迴歸,這正是我使用rgp軟件包的原因。我已經看過rgp pdf文件的這個簡介,但也建議使用非常類似的方法。爲什麼不使用rgp包並嘗試獲得正確的結果。 – rnso

+0

對不起,我沒有看看你的個人資料是否正確,你是否看到過在符號迴歸過程中所有警告都表明你生成了NAN? – bobolafrite

+0

這真是一個很好的觀點。我以前沒有看到警告()。你應該把它放在答案中,以及如何糾正這個問題,而不是如何做線性迴歸。 – rnso