2014-10-30 137 views
0

因爲我是R語言的新手,所以在這裏我只提一個簡短的問題。我不覺得這個代碼適合曲線擬合:poly擬合肯定會檢查出來,但是我不確定的日誌和指數擬合(e fit是否錯誤)。任何幫助將不勝感激,謝謝。薩姆R中的曲線擬合問題

polyFit <- function(xs,ys,degree) { #polynomial fitting a data set degree 3 
    fit3 <- lm(ys~poly(xs,degree,raw=TRUE)) 
    xx <- seq(0,160, length=50) 
    plot(xs,ys,pch='@') 
    lines(xx, predict(fit3, data.frame(xs=xx)), col="green") 
} 

logFit <- function(xs,ys) { #graph the data set with log(x), y 
    logEstimate = lm(ys ~ log(xs)) 
    plot(xs,ys,pch='@') 
     lines(xs,predict(logEstimate),col='green') 
    } 

eFit <- function(xs,ys) { 
    logEstimate = lm(log(ys) ~ xs) 
    plot(xs,ys,pch='@') 
    lines(xs,predict(logEstimate),col='green') 
} 

澄清,XS = X點,YS = Y點

+2

我認爲你的模型很好。可能你的問題是你沒有改變你的預測。例如,在你的'eFit'中,你預測'log(ys)',並將它們繪製成'ys'。可能你應該畫出'exp(預測(logEstimate))'。 – Gregor 2014-10-30 18:18:01

+0

所以像這樣?:eFit < - function(xs,ys)logEstimate = lm(log(ys)〜xs) plot(xs,ys,pch ='@') lines(predict(logEstimate),ys ,col ='green') } – user3558177 2014-10-30 18:46:15

回答

0

沒有,像這樣:

eFit <- function(xs,ys) { 
    expEstimate = lm(log(ys) ~ xs) 
    plot(xs, ys,pch='@') 
    lines(xs, exp(predict(expEstimate)),col='green') 
} 

我改變了型號名稱只是爲了清楚地區別於你的即使它是函數的內部函數,也是如此。在這個模型中,你適合log(y),所以你預測log(y),所以如果你想看看你的預測如何與真實的y疊加起來,你需要對它們進行非轉換,並且exp(log(y)) = y

+0

ahhhh好的我看到感謝的人。 – user3558177 2014-10-30 19:57:58