Как получить сюжет из NLS в R? - PullRequest
3 голосов
/ 29 марта 2012

В RI используйте nls для нелинейного подбора наименьших квадратов.Как тогда построить график функции модели, используя значения коэффициентов, которые были предоставлены для подбора?

(Да, это очень наивный вопрос от относительного новичка в R).

Ответы [ 4 ]

13 голосов
/ 29 марта 2012

Используя первый пример из ?nls и следуя приведенному мною примеру, строка за строкой достигается следующее:

#This is just our data frame
DNase1 <- subset(DNase, Run == 1)
DNase1$lconc <- log(DNase1$conc)
#Fit the model
fm1DNase1 <- nls(density ~ SSlogis(lconc, Asym, xmid, scal), DNase1)

#Plot the original points
# first argument is the x values, second is the y values
plot(DNase1$lconc,DNase1$density)

#This adds to the already created plot a line
# once again, first argument is x values, second is y values
lines(DNase1$lconc,predict(fm1DNase1))

Метод predict для аргумента nls автоматически возвращает установленные значения y. В качестве альтернативы, вы добавляете шаг и делаете

yFitted <- predict(fm1DNase1)

и передайте yFitted во втором аргументе вместо lines. Результат выглядит так:

enter image description here

Или, если вам нужна «плавная» кривая, вам нужно просто повторить это, но оценить функцию по нескольким точкам:

r <- range(DNase1$lconc)
xNew <- seq(r[1],r[2],length.out = 200)
yNew <- predict(fm1DNase1,list(lconc = xNew))

plot(DNase1$lconc,DNase1$density)
lines(xNew,yNew)
2 голосов
/ 21 мая 2013

coef (x) возвращает коэффициенты для результатов регрессии x.

model<-nls(y~a+b*x^k,my.data,list(a=0.,b=1.,k=1))
plot(y~x,my.data)
a<-coef(model)[1]
b<-coef(model)[2]
k<-coef(model)[3]
lines(x<-c(1:10),a+b*x^k,col='red')

Например.

1 голос
/ 24 марта 2015

Я знаю, что вы хотите (я ученый).Это не так, но, по крайней мере, показывает, как использовать «кривую» для построения функции подгонки по любому диапазону, и кривая будет гладкой.Используя тот же набор данных, что и выше:

nonlinFit <- nls (плотность ~ a - b * exp (-c * conc), данные = DNase1, начало = список (a = 1, b =1, c = 1)) </p>

fitFnc <- функция (x), прогнозирование (nonlinFit, список (conc = x)) </p>

кривая (fitFnc, от = .5, до = 10)

или,

кривая (fitFnc, от = 8,2 до = 8,4)

или,

кривая (fitFnc, от = .1 до = 50) # далеко за пределами диапазона данных

или что-либо еще (без предварительной настройки последовательности точек оценки).

Я элементарный программист на R, поэтому я не знаю, как реализовать (элегантно) что-то вроде ReplaceAll (/.) В Mathematica, которое можно было бы использовать для замены вхождений символических параметров в модели на соответствующие параметры.Этот первый шаг работает, хотя выглядит ужасно:

myModel <- "a - b * exp (-c * conc)" </p>

nonlinFit <- nls (as.formula (paste(«плотность ~», myModel)), data = DNase1, start = list (a = 1, b = 1, c = 1)) </p>

Это оставляет вас с отдельной «моделью» (как символьная строка), которую вы могли бы использовать с подобранными параметрами ... чисто (НЕ выкапывая a, b, c) просто использовало бы nonlinFit ... хотя не уверен как.

0 голосов
/ 12 июля 2013

Функция «Кривая» построит для вас функции.

...