2016-12-12 1 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

다음과 같이보다 쉽게이 모델에 장착 값을 플롯 할 수 있습니다, 그러나

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

: 당신은 쉽게 당신의 X 변수를 이동하여이 문제를 해결할 수 있습니다 플롯하지만 다시 오류 메시지가 나타납니다 .. – 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보다 큰 수 제곱 승하면 격언보다 큰 준다이다 음의 값은 배정 밀도 부동 소수점 값 (약. 1e308), 따라서 숫자 오버플로가 발생합니다. 나는 해당 게시물을 본 및 복제 시도했습니다

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