2016-12-12 3 views
0

私はggplotとgeom_smoothを使ってデータに指数曲線を当てようとしています。私は同様の問題(geom_smooth and exponential fits) への答えを複製しますが、次のエラーメッセージが出続けるしようとしている:ggplotで指数関数的にフィットするR

> exp.model <-lm(y ~ exp(x), df) 
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
    NA/NaN/Inf in 'x' 

をNA/NaNに/ Infの値はでありませんように私は、エラーを理解していませんデータセットは:

>df 
     x   y 
1 1981 3.262897 
2 1990 2.570096 
3 2000 7.098903 
4 2001 5.428424 
5 2002 6.056302 
6 2003 5.593942 
7 2004 10.869635 
8 2005 12.425793 
9 2006 5.601889 
10 2007 6.498187 
11 2008 6.967503 
12 2009 5.358961 
13 2010 3.519295 
14 2011 7.137202 
15 2012 19.121631 
16 2013 6.479928 
+0

私はその記事を見て複製しようとしましたプロットは、再びエラーメッセージが表示されます。 – Rabea

+0

@nrussellあなたは重複としてこの投稿をマークしましたが、参照された投稿の回答を複製しようとするとエラーメッセージが表示されます。私は上記を明確にした。 – Rabea

+0

このように大きな数値を累乗すると、浮動小数点のオーバーフローが発生します。ヒント: 'exp.model <-lm(y〜exp(x-1981)、df)'を試してください。 –

答えて

1

データを設定します。

dd <- data.frame(x=c(1981,1990,2000:2013), 
    y = c(3.262897,2.570096,7.098903,5.428424,6.056302,5.593942, 
    10.869635,12.425793,5.601889,6.498187,6.967503,5.358961,3.519295, 
    7.137202,19.121631,6.479928)) 

問題について709以上の任意の数の方が大きい累乗すること格言より大きい数与えることですumの値は、倍精度浮動小数点値として格納可能です(約。 1e308)、数値オーバーフローが発生します。あなたが簡単にx変数をシフトすることにより、この問題を解決することができます

lm(y~exp(x),data=dd) ## error 
lm(y~exp(x-1981),data=dd) ## fine 

次のようにしかし、あなたがより簡単にこのモデルのフィット値をプロットすることができます

library(ggplot2); theme_set(theme_bw()) 
ggplot(dd,aes(x,y))+geom_point()+ 
    geom_smooth(method="glm", 
      method.args=list(family=gaussian(link="log"))) 
+0

ありがとう、これは私が探していたものです! – Rabea

関連する問題