Я пытаюсь установить данные с помощью функции nls()
, где природа данных дает мне оценки для одного коэффициента и суммы двух коэффициентов. Позвольте мне привести краткий пример, чтобы увидеть, где проблема. Я хочу, чтобы параметр b1 находился между 0 и 1, и я хочу, чтобы сумма параметров b1 и b2 также находилась между 0 и 1.Ограничения для коэффициентов nls
set.seed(123)
# example where everything is OK
x <- 1:200
g <- rbinom(200, 1, 0.5)
y <- 3 + (0.7 + 0.2 * g) * x
yeps <- y + rnorm(length(y), sd = 0.1)
# both parameter b1 and sum of parameters b1 and b2 are between 0 and 1
nls(yeps ~ a + (b1 + b2 * g) * x, start = list(a = 0.12345, b1 = 0.54321, b2 = 0.4213))
# using more extreme values
x <- 1:200
g <- rbinom(200, 1, 0.5)
y <- 3 + (0.9 - 0.99 * g) * x
yeps <- y + rnorm(length(y), sd = 15)
# b1 is OK, but b1 + b2 < 0
nls(yeps ~ a + (b1 + b2 * g) * x,
start = list(a = 0.12345, b1 = 0.54321, b2 = 0.4213))
# trying constraints, not good, sum is still out of range
nls(yeps ~ a + (b1 + b2 * g) * x,
start = list(a = 0.12345, b1 = 0.54321, b2 = 0.4213),
lower = list(a = -Inf, b1 = 0, b2 = -1),
upper = list(a = Inf, b1 = 1, b2 = 1),
algorithm = "port")
Что я ищу что-то подобное (не работает):
nls(yeps ~ a + (b1 + b2 * g) * x,
start = list(a = 0.12345, b1 = 0.54321, b2 = 0.4213),
lower = list(a = -Inf, b1 = 0, b2 = -b1),
upper = list(a = Inf, b1 = 1, b2 = 1 - b1),
algorithm = "port")
Можно ли установить ограничение с другими параметрами в nls()
функции? Спасибо за любые предложения!
Посмотрите на этот [вопрос] (http://stackoverflow.com/q/11589139/707145). – MYaseen208
Спасибо за подсказку. Тем не менее, я не уверен, что 'ifelse' является хорошим подходом в функции' nls', см., Например. http://stats.stackexchange.com/questions/14561/specifying-parameter-constraints-in-nls – Adela
В любом случае, как этот подход отличается от установки двух моделей для каждой группы 'g'? – Adela