r从lm系数创建函数

下面的代码显示了问题。我在data.frame lm上进行了四次多项式回归df以获取model4。 然后创建回归函数fhat4。这按预期工作。

我想将其推广到任何程度的多项式。因此,我使用poly来创建modeln。这与model4相匹配。但是我无法创建适当的功能fhatn。也许这与for循环有关?

df <- structure(list(x = c(0.3543937637005,0.674911001464352,0.21966037643142,0.14723521983251,0.36166316177696,0.975983075099066,0.539355604210868,0.294046462047845,0.853777077747509,0.634912414476275),y = c(0.0120776002295315,0.655085238162428,0.310665819328278,0.525274415733293,0.938241509487852,0.520828885724768,0.241615766659379,0.724816955626011,0.808277940144762,0.358921303786337)),.Names = c("x","y"),row.names = c(NA,-10L),class = "data.frame")

############################################# 
model4 <- lm(y~x+I(x^2)+I(x^3)+I(x^4),data=df)

fhat4 <- function (x) {
  model4$coefficients[1]+
  model4$coefficients[2]*x+
  model4$coefficients[3]*x^2+
  model4$coefficients[4]*x^3+
  model4$coefficients[5]*x^4
  }

fhat4(2)

############################################# 
modeln <- lm(y~poly(x,4,raw=TRUE),data=df)

fhatn <- function (x) {
  fn <- 0
  for (i in 0:5){
    fn <- fn + modeln$coefficients[i+1]*x^i
  }
}

fhatn(4)
bateerdaxia 回答:r从lm系数创建函数

您的for循环只能从0到4,直到5。此外,您的函数不会返回任何内容,因此您可以在末尾添加一个return(fn)

无论如何,您可以实现相同的功能而无需任何循环:

modeln <- lm(y ~ poly(x,4,raw = TRUE),data = df)

fhatn <- function (x) {
  sum(x^(seq_along(coef(modeln)) - 1) * coef(modeln))
}

fhatn(2)
[1] -150.6643

请注意,coef(modeln)modeln$coefficients的替代方法。

或者如文森特在评论中所说,您可以使用预测功能:

predict(modeln,newdata = data.frame(x = 2))
-150.6643 
本文链接:https://www.f2er.com/3129483.html

大家都在问