Мне любопытно, как построить функцию, которая определена примерно так:
if(x < 1) f(x) = x/10 * 1.2 if(x < 3) f(x) = x/12 * 1.7 ... else f(x) = x/15 * 2
Если бы функция была простой, скажем, f (x) = x / 10 * x / 5, тогда было бынет проблем, и можно использовать метод кривой ().Однако я не уверен, как лучше всего справляться с более сложными функциями, такими как приведенная выше.Есть идеи?Бонусные баллы, если можно использовать ggplot ():)
Кривая все еще возможна.(И когда вы читаете статистическую литературу, эта формулировка проявляется как I [x], где «I» означает «индикатор».)
curve( (x <1)*( (x/10)*1.2 ) + # one line for each case (!(x <1)&(x<3) )*(x/12)*1.7 + # logical times (local) function (x >=3)*(x/15)*2 , 0,4) # limits
Дело вкуса, но я предпочитаю ifelse, чем Показатели Двинса (как в комментарии к MBQ). Для сравнения:
ifelse
curve( (x <1) * ( (x/10)*1.2 ) + (!(x <1)&(x<3) ) * ( (x/12)*1.7 ) + (x >=3) * ( (x/15)*2 ) , 0,4) # versus curve( ifelse(x < 1, (x/10)*1.2, ifelse(x < 3, (x/12)*1.7, (x/15)*2 )), 0,4)
Вы ищете что-то вроде stepfun?
stepfun
fn <- stepfun(c(1,2,3,4,5),c(0,1,2,3,4,5)) plot(fn,verticals = FALSE)
Способ задания функции будет немного другим, но его довольно легко понять, прочитав ?stepfun и подготовив несколько примеров самостоятельно.
?stepfun