Постройте NLS в R, реальные данные и расчетные параметры

Мой набор данных ICM_Color0 имеет следующую структуру, в которой столбцы:

Lum Ruido Dist RT.ms Condicion

С 2599 рядами.

Есть три яркости = [13,19,25] и два типа шума = [1, 2] -> 3x2 = 6 условий.

Состояние:

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

Мне нужно построить фактические данные и оценку параметров.

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

Большое спасибо


r nls
person user3096207    schedule 04.08.2014    source источник


Ответы (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)
person aosmith    schedule 06.08.2014