Участок NLS в R, реальные данные и оценочные параметры
Мой набор данных ICM_Color0 имеет следующую структуру, где столбцы:
Lum Ruido Dist RT.ms Condicion
С 2599 рядами.
Есть три яркости = [13,19,25] и два типа шума = [1, 2] -> 3x2 = 6 условий.
Condicion:
Lum Ruido Condicion
13 1 1
13 2 2
19 1 3
19 2 4
25 1 5
25 2 6
Моя модель:
Color0.nls <- nls(RT.ms ~ 312 + K[Condicion]/(Dist^1),
data = ICM_Color0, start = list(K = rep(1,6)))
> summary(Color0.nls)
Formula: RT.ms ~ RT0.0 + K[Condicion]/(Dist^n)
Parameters:
Estimate Std. Error t value Pr(>|t|)
K1 1.84108 0.03687 49.94 <2e-16 ***
K2 2.04468 0.03708 55.14 <2e-16 ***
K3 1.70841 0.03749 45.58 <2e-16 ***
K4 2.09915 0.03628 57.86 <2e-16 ***
K5 1.62961 0.03626 44.94 <2e-16 ***
K6 2.18235 0.03622 60.26 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 120.5 on 2593 degrees of freedom
Number of iterations to convergence: 1
Achieved convergence tolerance: 1.711e-08
Мне нужно построить фактические данные и оценки параметров.
Я уже сделал общий обзор литературы, но не нашел примеров с такой моделью, как моя, где модель зависит от условной переменной. Кто-нибудь может направить меня?
большое спасибо
1 ответ
Довольно просто построить построенные линии из регрессии (нелинейной или нет). Я чаще всего делаю это с помощью predict
рассчитать прогнозные значения из исходных данных и затем отобразить их в виде линий на графике рассеяния данных.
Вы не привели воспроизводимый пример, поэтому я сделал несколько нелинейных данных после этого ответа.
# Create data to fit with non-linear regression
set.seed(16)
x = seq(100)
y = rnorm(200, 50 + 30 * x^(-0.2), 1)
site = rep(c("a", "b"), each = 100)
dat = data.frame(expl = c(x, x), resp = y, site)
Затем я подгоняю нелинейную регрессию, позволяя каждому параметру варьироваться в зависимости от переменной группировки site
,
fit1 = nls(resp ~ a[site] + b[site] * expl^(-c[site]), data = dat,
start = list(a = c(80, 80), b = c(20, 20), c = c(.2, .2)))
Теперь я просто добавляю подогнанные значения к набору данных, используя predict.nls
dat$pred = predict(fit1)
Я построил это с помощью пакета ggplot2.
ggplot(data = dat, aes(x = expl, y = resp, color = site)) +
geom_point() +
geom_line(aes(y = pred))
В этом случае, когда я позволяю всем параметрам варьироваться в зависимости от сайта, похоже, что вы можете сделать все это в ggplot
через geom_smooth
, Я нашел очень хороший пример этого здесь.
Вот как это будет выглядеть с набором игрушечных данных.
ggplot(data = dat, aes(x = expl, y = resp, color = site)) +
geom_point() +
geom_smooth(aes(group = site), method = "nls", formula = "y ~ a + b*x^(-c)",
start = list(a = 80, b = 20, c = .2), se = FALSE)