2017-06-29 12 views
0

データを適合させ、より広いx範囲のy値を予測したいと思います。より広い範囲を予測する

これはフィッティングプロット

enter image description here私はこのデータに合うようにしたいです私は「アイリス」のデータが設定されており、この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) 
    }) 

からの予測のために、以下のデータを使用すると仮定しますより広い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

私は理解することはできません:引数は行数が異なる暗示しますエラー。 new.rangeからはpredが計算されるので、同じ長さにする必要がありますか?

同様の記事

using-predict-in-nls

trouble-with-predict-function-in-r

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

+0

modの代わりに 'cc $ mod'を呼び出す必要がありますか? – troh

+0

@troh cc $ modを試したとき、 'Error in predict(mod、newdata = new.range):オブジェクト 'mod' not found' – Alexander

答えて

1

これは、あなたが望むものを実現するものです。あなたの元の問題の原因は、回帰では、予測子の名前がではなくnew.rangeではないので、new.rangeの予測を行うにはnew.range<- data.frame(Sepal.Width=seq(2,10,length.out=50))のようにする必要があります。

もう1つの問題は、new.rangeの長さを50にして、prednew.rangeが元のdata.frameに収まるようにすることです。

次に、new.rangeSepal.Width.1になることに注意してください。

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)) 
     new.range<- data.frame(Sepal.Width=seq(2,10,length.out=50)) 
     pred <- predict(mod, newdata =new.range) 
     # pred <- predict(mod, newdata =.["Sepal.Width"]) 
     data.frame(., new.range, pred) 

    }) 

library(ggplot2) 

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

素晴らしい答えをありがとう。 OTH、私の実際のデータでは、各グループの長さは異なります! 「虹彩」データセットでは、各種は50行を有する。 length.out = 50に設定するときれいです。しかし、私の実際のデータには、行サイズが100または160のグループがいくつかあります。そのため、同じ 'length.out'パラメータを使用することはできません。あなたはそれについて何か提案していますか? – Alexander

+1

@Alexanderようこそ。行のサイズが異なる場合は、50を 'nrow(。) 'で置き換えることができます。これはうまくいくはずです。 – Consistency

+0

もう一度ありがとうございます。それは素晴らしかった! – Alexander

関連する問題