簡體   English   中英

ggplot R中的指數擬合

[英]exponential fit in ggplot R

我一直在嘗試使用 ggplot 和 geom_smooth 為我的數據擬合指數曲線。 我正在嘗試復制類似問題的答案( geom_smooth 和指數擬合),但不斷收到以下錯誤消息:

> 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

設置數據:

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 的數字求冪會得到一個大於可存儲為雙精度浮點值的最大值(大約 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")))
            
            

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM