Монотонный сплайн в R

Я пытаюсь использовать пакет spline2 в R, чтобы построить монотонный сплайн.

У меня проблемы с оценкой модели на предмет новых значений независимой переменной. В общем, у меня возникли проблемы с пониманием R-трактовки «предсказать» и его связи со spline2, а также с тем, как использовать созданный объект bs.

Я попытался следовать этому примеру, в котором используется spline1. Мои данные находятся во фрейме данных BRIyII с независимой переменной t и зависимой переменной P, поэтому:

plot(BRIyII$t,BRIyII$P)

дает:  введите описание изображения здесь

So I do:

knots=c(9)
myMat=mSpline(BRIyII$t, knots = knots, degree = 3, intercept = TRUE)
mylm=lm(BRIyII$P~myMat)

Теперь, если мы:

pr = predict(mylm,data.frame(BRIyII$t))
points(BRIyII$t,pr,col = "red")

Это дает:  введите описание изображения здесь

Итак, мои вопросы:

1- Поскольку крайнее правое прогнозируемое значение (красная точка) ниже, чем значение слева от него, не понимаю ли я «монотонную» природу m сплайнов?

2- Как я могу оценить сплайн в значениях, отличных от тех, которые определены в BRIyII $ t? Я пробовал несколько комбинаций, но мне не хватает знаний синтаксиса R. В идеале я бы хотел сделать что-то вроде:

newdata=seq.int(0,41.5,0.1) 

person cladelpino    schedule 26.07.2017    source источник
comment
Я не уверен насчет монотонности. Фактически, когда я запустил регрессию с mSpline, а другой с bs (с использованием встроенного фрейма данных mtcars), я получил точно такие же коэффициенты. Что касается прогнозов: во-первых, вы можете выполнить регрессию в одной строке следующим образом: mylm = lm(P ~ mSpline(t, knots=knots, degree=3, intercept=TRUE), data=BRIyII).   -  person eipi10    schedule 26.07.2017
comment
Во-вторых, чтобы получить прогнозы с данными, которые вы использовали для соответствия модели, вы можете сделать predict(mylm), и он автоматически будет использовать фрейм данных, используемый для соответствия модели. Чтобы получить прогнозы для других значений переменных-предикторов, вам необходимо подать predict фрейм данных с новыми значениями (и имена столбцов в новом фрейме данных должны совпадать с именами столбцов во фрейме данных, используемом для соответствия модели). Например, predict(mylm, newdata=data.frame(t = seq(0,41.5,0.1))).   -  person eipi10    schedule 26.07.2017
comment
по крайней мере, спасибо за решение простой части! :)   -  person cladelpino    schedule 26.07.2017


Ответы (1)


Я обращусь к вопросу №1, потому что вопрос №2 рассматривается в комментариях.

В документации splines2 основание M-сплайна упоминается как основа «сплайна монотонной регрессии», но я думаю, что это вводит в заблуждение. Способ оценки монотонного сплайна регрессии заключается в использовании базиса I-сплайна, с ограничением, что коэффициенты регрессии должны быть неотрицательными. I-сплайны являются интегралами M-сплайнов и поэтому не убывают. Таким образом, любая их неотрицательная линейная комбинация также не будет убывающей. Таким образом, вы можете использовать splines2 :: iSpline вместе с методом неотрицательной регрессии, например nnls :: nnls, для оценки функции монотонной регрессии.

Для объяснения M-сплайнов, I-сплайнов и монотонной регрессии посмотрите:

Рамзи, Дж. О. (1988) Монотонные регрессионные сплайны в действии. Статистическая наука 3 (4), 425–461.

person saberpowers    schedule 25.09.2017