使用函数列表进行线性回归

时间:2014-10-01 16:30:14

标签: r regression

我有一个从校准中获得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 行号)并查看函数输出 print 情节就可以了。

拜托,你能帮帮我吗? 谢谢。

@mso:使用sapply的想法很好但不幸的是,这样我不使用多项式进行回归:我的x向量根据公式在f1向量中转换,然后用于回归。我只获得一个参数而不是3个(在这种情况下)。

1 个答案:

答案 0 :(得分: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)。