2014-10-01 48 views
2

我有一個數據集,其中包含從校準中獲得的X和Y值,並且必須使用預定義的多項式函數列表對它們進行插值並選擇具有最佳R2的值。 最傻的功能應該是使用函數列表進行線性迴歸

try<-function(X,Y){ 
    f1<- x + I(x^2.0) - I(x^3.0) 
    f2<- x + I(x^1.5) - I(x^3.0) 
    ... 
    f20<- I(x^2.0) - I(x^2.5) + I(x^0.5) 

    r1<- lm(y~f1) 
    r2<- lm(y~f2) 
    ... 
    r20<-lm(y~f20) 

    v1<-summary(r1)$r.squared 
    v2<-summary(r2)$r.squared 
    ... 
    v20<-summary(r20)$r.squared 

    v<-c(v1,v2,...,v20) 
    return(v) 
    } 

我想,然後使這個功能更短,更聰明(尤其是從R1的定義到底)。我還想給用戶提供選擇f1到f20之間的功能的可能性(輸入所需的行號v),並查看功能的輸出其上的圖

請問,你能幫助我嗎? 謝謝。

@mso:使用sapply的想法很好,但不幸的是,這樣我不使用多項式迴歸:我的x向量根據公式在f1向量中轉換,然後用於迴歸。我只獲得一個參數而不是3(在這種情況下)。

+1

還有比最好的R^2更多的生活,所以要小心接受這是最好的方法。 – 2014-10-01 16:58:45

+0

是的,我知道,我認爲在比較不同程度的多項式函數時更是如此,例如在這種情況下。不幸的是,誰讓我寫劇本不同意...... – Ndr 2014-10-01 17:44:25

回答

4

創建˚F爲列表,並且繼續進行:

F = list(f1, f2, ...., f20) 
r = sapply(F, function(x) lm(y~x)) 
v = sapply(r, function(x) summary(x)$r.squared) 
return v 

sapply將採取的F的每個元素和其中y執行LM並放入向量r的結果。在下一行中,sapply將採用r的每一個元素並得到總結,並將結果放入向量v中。希望它能起作用。你也可以嘗試lapply(而不是sapply),它非常相似。