2017-02-03 15 views
1

Я хотел бы сразу подогнать несколько кривых и сравнить их по статистическим показателям с точки зрения их трех оценочных параметров - асимптоты, наклона и x0. Вот идеализированный образ данных, которые будут смоделированы: enter image description hereПодгонка и сравнение множественных сигмоидных кривых в R

Большинство для поиска страниц оказаться методы, чтобы соответствовать единой кривой, как показано здесь: http://kyrcha.info/2012/07/08/tutorials-fitting-a-sigmoid-function-in-r/ и здесь http://rstudio-pubs-static.s3.amazonaws.com/7812_5327615eb0044cf29420b955ddaa6173.html

В моей case, Я хотел бы проверить (статистически) влияние изменения переменных уровней на три параметра сигмоида. То есть, когда я фитинг эту модель:

model <- nls(y ~ asym/(1 + exp(-slope * (x – x0))), start = c(…), data = my_data) 

Я хотел бы добавить взаимодействия двух факторов (скажем, «Коэффициент образования», и «factorB») с каждым из ASYM, наклона и х0 термины, как мы можем сделать с lm() или glm(), как в следующем примере:

model_int <- nls(y ~ asym*factorA/(1 + exp(-(slope*factorA) * (x – (x0*factorA))), start = c(…), data = my_data) 

Таким образом, я могу видеть, если эти три параметра статистически значимые различия между различными уровнями Коэффициента образования (и потенциально многими другими факторами, как вы можете видеть из изображения). Например, мы видим, что «Условие» влияет на асимптоту кривых.

Я сделал это ранее с фиктивным кодированием каждого уровня каждой взаимодействующей переменной, но это не способ непосредственно протестировать эти переменные и довольно многословно, поскольку модели идут. Это выглядит следующим образом:

model_dummy <- nls(y ~ (asym+ asym.L1 * is.L1 + asym.l2*is.L2)/
(1 + exp(-slope * (x – (x0 + x0.L1 * is.L1 + x0.L2 * is.L2)))), 
start = c(…), data = my_data) 

Как вы могли догадаться, этот метод имеет очевидные недостатки с точки зрения tidyness и отсутствие интерпретируемости.

Кто-нибудь знает, как соответствовать набору сигмоидов, где параметры взаимодействуют с переменными в наборе данных для создания кривых немного разных форм?

ответ

0

Ну, я не уверен, если это то, что вы ищете, но этот пример из nls функция может поможет:

> head(muscle) 
    Strip Conc Length 
3 S01 1 15.8 
4 S01 2 20.8 
5 S01 3 22.6 
6 S01 4 23.8 
9 S02 1 20.6 
10 S02 2 26.8 
# get some initial values 
musc.1 <- nls(Length ~ cbind(1, exp(-Conc/th)), muscle, 
       start = list(th = 1), algorithm = "plinear") 
summary(musc.1) 

# and now with factor Strip 
b <- coef(musc.1) 
musc.2 <- nls(Length ~ a[Strip] + b[Strip]*exp(-Conc/th), muscle, 
       start = list(a = rep(b[2], 21), b = rep(b[3], 21), th = b[1])) 
summary(musc.2) 

Так что в вашем случае это будет что-то вроде этого:

fit <- nls(y ~ asym[Factor]/ (1 + exp(-slope[Factor]*(x –x0[Factor]))), start = c(…), data = my_data)

Надеется, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^