Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт на практику.docx
Скачиваний:
10
Добавлен:
08.10.2015
Размер:
98.03 Кб
Скачать
    1. Нелинейные наименьшие квадраты и модели наибольшего правдоподобия

Определенного вида нелинейные модели можно подогнать Обобщенными Линейными Моделями (glm). Но в большинстве случаев следует подходить к проблеме подбора нелинейных кривых как к одной из нелинейных оптимизаций. Нелинейные подпрограммы оптимизации R - optim(), nlm() и nlminb(), которые обеспечивают (и превосходят) функциональность S-плюсовых ms() и nlminb(). Ищется значение параметра, которое минимизирует некоторый индекс отклонения-от- цели, и делается это путем многократного испытания различных значений параметров. В отличие от линейной регрессии, например, нет никакой гарантии, что процедура будет сходиться к удовлетворительным оценкам. Все методы требуют исходных предположений о начальном значении параметра, и сходимость может критически зависеть от качества начальных значений.

      1. Наименьшие квадраты

Один из способов подгонки нелинейной модели состоит в минимизации суммы квадратных ошибок (SSE) или остатков. Этот метод имеет смысл, если наблюдаемые ошибки, возможно, правдоподобно имеют нормальное распределение. Вот пример от Бэйтса & Ватт (1988). Данные:

> x <- c(0.02, 0.02, 0.06, 0.06, 0.11, 0.11, 0.22, 0.22, 0.56, 0.56,

1.10, 1.10)

> y <- c(76, 47, 97, 107, 123, 139, 159, 152, 191, 201, 207, 200)

Критерий подгонки, подлежащий минимизации:

> fn <- function(p) sum((y - (p[1] * x)/(p[2] + x))^2)

Для подгонки необходимы первоначальные оценки параметров. Одним из способов найти начальные значения состоит в рисовании данных, угадывания некоторых значений параметра, и наложения кривой модели, используя это значение.

> plot(x, y)

> xfit <- seq(.02, 1.1, .05)

> yfit <- 200 * xfit/(0.1 + xfit)

> lines(spline(xfit, yfit))

Можно сделать лучше, но эти стартовые значения 200 и 0.1 кажутся адекватными. Теперь сделаем подгонку:

> out <- nlm(fn, p = c(200, 0.1), hessian = TRUE)

После подгонки out$minimum равно SSE, и out$estimate является оценкой параметров методом наименьших квадратов. Чтобы получить оценку приблизительных стандартных ошибок (SE), мы делаем:

> out <- nlm(fn, p = c(200, 0.1), hessian = TRUE)

2 в строке выше представляют число параметров. 95%-ый доверительный интервал был бы оценкой параметра ± 1.96 SE. Мы можем наложить подбор методом наименьших квадратов на новый рисунок:

> plot(x, y)

> xfit <- seq(.02, 1.1, .05)

> yfit <- 212.68384222 * xfit/(0.06412146 + xfit)

> lines(spline(xfit, yfit))

Стандартный пакет stats предоставляют намного более обширные средства для подгонки нелинейных моделей наименьшими квадратами. Модель, которой мы только что подогнали, является моделью Michaelis-Menten, таким образом, можно использовать:

> df <- data.frame(x=x, y=y)

> fit <- nls(y ~ SSmicmen(x, Vm, K), df) > fit

Nonlinear regression model

model: y ~ SSmicmen(x, Vm, K) data: df

Vm K

212.68370711 0.06412123

residual sum-of-squares: 1195.449

> summary(fit)

Formula: y ~ SSmicmen(x, Vm, K) Parameters:

Estimate

Std. Error

t value

Pr(>|t|)

Vm 2.127e+02

6.947e+00

30.615

3.24e-11

K 6.412e-02

8.281e-03

7.743

1.57e-05

Residual standard error: 10.93 on 10 degrees of freedom Correlation of Parameter Estimates: Vm

K 0.7651