NLS почти подходит - PullRequest
       13

NLS почти подходит

0 голосов
/ 30 апреля 2019

Я немного не в себе ... У меня есть эти данные:

d <- data.frame(matrix(data = c(1,1.5,6,2,11,2.5,16,3,26,4,46,5,66,6,86,7,126,8,176,9,276,10,426,11,626,12,876,13,1176,14,1551,15,2026,16,2676,17,3451,18,4351,19,5451,20,6801,21,8501,22,10701,23),
    byrow = TRUE,
    ncol = 2
 )
)

names(d) <- c('x','y')

выглядит так:

plot(x = d$x, 
  y = d$y, 
  pch = 19,
  col = 'grey50',
  bty = 'n'
)

Теперь я хочу описать отношения между X и Y в виде формулы. Поэтому я пробую функцию nls. Как это:

fit <- nls(y ~ a * x ^ b, 
  start = list(a = 1, 
    b = 1), 
  data = d
)
lines(d$x, 
  predict(fit), 
  col = 'red', 
  lty = 2
)

Как видите, линия почти подходит! И вот где я застрял. Что-то подсказывает мне, что есть идеальная посадка. Но я не знаю, куда идти отсюда. Альтернативные начальные значения, похоже, ничего не меняют. Я получил совет использовать lm(log(y) ~ log(x), data = d) в качестве начальных параметров. Но нет любви:

fit <- nls(y ~ a * x ^ b, 
  start = list(a = exp(0.3120), 
    b = 0.3883), 
  data = d
)
lines(d$x, 
  predict(fit), 
  col = 'blue', 
  lty = 2
)

Я пробовал несколько других формул, но на самом деле я просто стреляю в темноте:

nls(y ~ a * x / (b + x), data = d)
nls(y ~ a + ((x * b) / (x + c)), start = c(a = 1, b = 10, c = 1), data = d

Итак, есть предложения о том, как двигаться вперед?

1 Ответ

0 голосов
/ 30 апреля 2019

Я не совсем уверен, но мне кажется, что ваши данные просто шумят. Это заставляет вас думать, что вы можете добиться большего успеха, но на самом деле, вероятно, нет.

Этот шум можно лучше визуализировать с помощью линеаризованных данных:

# Linearize by eye
new_x = d$x^0.18

# Plot of data linearized
plot(x = new_x, 
  y = d$y, 
  pch = 19,
  col = 'grey50',
  bty = 'n'
)

# Linear regression
lin_reg = lm(d$y ~ new_x)

# Fitted 
abline(a=lin_reg$coef[1], b=lin_reg$coef[2])

enter image description here

Смотрите, что точки варьируются выше и ниже. Так что ваша первая формула, вероятно, правильная.

...