2016-07-19 12 views
0

데이터 세트에 1 - exp(x) 함수를 적합 시키려고하지만 첫 번째 값에 더 높은 가중치를 부여하려고합니다. 그러나 다음 코드는 같은 방식으로 작동하지 않습니다 : 여기에 Fiting 1 - exp (x) 첫 번째 값에 더 높은 가중치 부여 : R

x <-sqrt((0.05)^2+(0.05)^2)*seq(from = 1, to = 20, by = 1) 
y <- c(11,20,27,32,35,36,36.5,25,16,9,4,1,7.87e-16,2.07e-15,-9.36e-16,1.61e-15,-3.81e-16,3.92e-16,7.65e-16,-8.26e-16) 
temp <- data.frame(cbind(x,y)) 
we <- 1/(log1p(seq_along(x))) 
# fit non-linear model 
mod <- nls(y ~ (1 - exp(a + b * x)), data = temp, start = list(a = 0, b = 0), weights = we) 

#add fitted curve 
lines(temp$x, predict(mod, list(x = temp$x))) 

는 출력 : 무게의

enter image description here

+0

덕분에, 내 데이터가 이미 게시됩니다. – mountainlake

답변

0

귀하의 사양은 정확합니다. 당신이 얻은 나쁜 적합성은 잘못된 모델 가정 때문입니다. exp() 엄격하게 양의 값을 제공

y ~ 1 - exp(a + b * x) 

하는 것으로, 그래서 y 1. 그러나, 데이터의 y 값은 내 생각이 완벽하지 않습니다 (35)

까지 범위 없습니다보다 크지 않은 수 있지만 : 당신은 가정 그것은 당신에게 더 좋은 출발점을 줄 것입니다. 고려 :

y ~ a * x * exp(b * x * x + c * x) 

데이터를 사용 :

x <- c(0, sqrt((0.05)^2+(0.05)^2)*seq(from = 1, to = 20, by = 1)) 
y <- c(0, 11,20,27,32,35,36,36.5,25,16,9,4,1,7.87e-16,2.07e-15,-9.36e-16,1.61e-15,-3.81e-16,3.92e-16,7.65e-16,-8.26e-16) 
fit <- nls(y ~ a * x * exp(b * x * x + c * x), start = list(a = 30, b= -1, c = -1)) 
plot(x, y) 
lines(x, predict(fit, list(x))) 

enter image description here

+0

많은 감사 Zheyuan! 무게를 사용하여 처음 6 점에 맞추고 싶다면 어떻게해야합니까? 어떤 기능을 제안하겠습니까? – mountainlake

+0

어떤 기능이 있습니까? y - a * (1 - exp (b * x))? – mountainlake