аналитическая производная от splinefun()

Я пытаюсь подогнать естественный локтевой сплайн к вероятностным данным (вероятности того, что случайная величина меньше определенных значений), чтобы получить кумулятивную функцию распределения, которая достаточно хорошо работает с использованием splinefun():

cutoffs <- c(-90,-60,-30,0,30,60,90,120)
probs <- c(0,0,0.05,0.25,0.5,0.75,0.9,1)
CDF.spline <- splinefun(cutoffs,probs, method="natural")
plot(cutoffs,probs)
curve(CDF.spline(x), add=TRUE, col=2, n=1001)

Однако затем я хотел бы использовать функцию плотности, то есть производную сплайна, для выполнения различных вычислений (например, для получения ожидаемого значения случайной величины).

Есть ли способ получить эту производную как функцию, а не просто вычислять дискретное количество точек с помощью splinefun(x, deriv=1)?

Это довольно близко к тому, что я ищу , но, увы, этот пример не работает в версии R 2.15.0.

За исключением аналитического решения, какой самый чистый численный способ сделать это?


person RoyalTS    schedule 11.10.2012    source источник
comment
Что не работает? Но тем временем, как насчет curvefoo<-curve(CDF.spline(x), add=TRUE, col=2, n=1001) с последующим вычислением наклонов curvefoo$y против curvefoo$x ? У вас должно быть достаточно хорошее разрешение, чтобы локальные линейные подгонки дали вам хороший вектор плотности.   -  person Carl Witthoft    schedule 11.10.2012
comment
Я получал это сообщение об ошибке: Ошибка в g(x): объект «C_spline_eval» не найден. Что показалось странным, когда я посмотрел на код для splinefun, потому что 'C_spline_eval' все еще явно был рядом... где-то. Так что изменение вызова environment() казалось хорошим началом.   -  person IRTFM    schedule 12.10.2012


Ответы (1)


Если вы измените строку назначения среды для g в коде, предоставленном Berwin Turlach в R-help, на это:

environment(g) <- environment(f)

... у вас получится R 2.15.1.

person IRTFM    schedule 11.10.2012