预测范围更广

时间:2017-06-29 16:48:16

标签: r predict nls

我想拟合数据并预测更宽x范围的y值。

假设我有虹膜'数据集并使用以下数据进行预测post

 library(dplyr)
 cc <- iris %>%
  group_by(Species) %>%
  do({
    mod <- nlsLM(Sepal.Length ~ k*Sepal.Width/2+U, start=c(k=10,U=5), data = ., trace=F, control = nls.lm.control(maxiter=100))
    pred <- predict(mod, newdata =.["Sepal.Width"])
    data.frame(., pred)
  })

这是拟合情节

enter image description here

我希望将此数据与更宽Sepal width范围相匹配,以便

new.range<- data.frame(x=seq(2,10,length.out=20))

并修改脚本

 pred <- predict(mod, newdata =new.range)

绘制new.range拟合

library(ggplot2)

ggplot(cc,aes(y=Sepal.Length,x=Sepal.Width ,col=factor(Species)))+
  geom_point()+
  facet_wrap(~Species)+
  geom_line(aes(x=new.range,y=pred),size=1)
  

错误(函数(...,row.names = NULL,check.rows = FALSE,   check.names = TRUE,:参数意味着行数不同:   20,150

我无法理解为什么会出现此错误。我认为pred是根据new.range计算出来的,所以它们应该有相同的长度?

类似的帖子

using-predict-in-nls

trouble-with-predict-function-in-r

predict-maybe-im-not-understanding-it?

1 个答案:

答案 0 :(得分:1)

这可以达到你想要的效果。原始问题的原因是,在回归过程中,预测变量的名称为vh而不是Sepal.width,并且您的预测根本不会使用x,因此,您必须执行new.range之类的操作才能对new.range<- data.frame(Sepal.Width=seq(2,10,length.out=50))进行预测。

另一个问题是,您必须将new.range的长度设为50,以便new.rangepred适合原始data.frame。< / p>

然后你可以绘制你想要的情节,注意new.range变成new.range

Sepal.Width.1