R подгонка нелинейной модели с использованием функции fitModel - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу подогнать нелинейную модель к реальным данным.

Реальные данные состоят из 2 известных числовых векторов ;толщина как 'x' и fh как 'y'

thickness=seq(0.15,2.00,by=0.05)

fh = c(5.17641, 4.20461, 3.31091, 2.60899, 2.23541, 1.97771, 1.88141, 1.62821, 1.50138, 1.51075, 1.40850, 1.26222, 1.09432, 1.13202, 1.12918, 1.10355, 1.11867, 1.09740,1.08324, 1.05687, 1.19422, 1.22984, 1.34516, 1.19713,1.25398 ,1.29885, 1.33658, 1.31166, 1.40332, 1.39550,1.37855, 1.41491, 1.59549, 1.56027, 1.63925, 1.72440, 1.74192, 1.82049)
plot(thickness,fh)

Это, по-видимому, нелинейно.Итак, я пытаюсь приспособить эту модель как нелинейную функцию

y= x*2/3+(2+2*a)/(3*x)

Переменная a является неизвестной константой, и я пытаюсь найти наилучшую константу a, которая минимизирует суммуквадрат ошибки между линией регрессии и реальными данными.

Сначала я использовал функцию fitModel, обнаруженную в видео на YouTube, Подгонка функций к данным в R .

 library(TIMP)
 f=fitModel(fh~thickness^2/3+(2+2*A)/(3*thickness)) #it finds the coefficient 'A'
coef(f) # to represent just the coefficient

Тем не менее, есть ошибка

Ошибка в моделях spec [[datasetind [i]]]: нижний индекс вне границ

Итак, в качестве альтернативы, хотите найти график «а» и «сумма квадратов ошибок».На этот раз мне очень трудно найти «а» и построить график.Путем ручной работы я выяснил, что значение «а» где-то около 0,2, но это не точное значение.

Было бы полезно, если бы кто-то мог проявить либо:

  1. ПочемуfitModel функция не работает или
  2. Как найти значение a и построить график.

1 Ответ

1 голос
/ 04 мая 2019

Вы можете попробовать это вместо:

yf = function(a,xv) xv*(2/3)+(2+2*a)/(3*xv)
yf(2,thickness)
f <- function (a,y, xv) sum((y - yf(a,xv))^2)
f(2,fh,thickness)
xmin <- optimize(f, c(0, 10), tol = 0.0001, y=fh,xv=thickness)
xmin
plot(thickness,fh)
lines(thickness,yf(xmin$minimum,thickness),col=3)

enter image description here

...