Основа, предоставляемая Ns() в пакете R Epi
Поскольку я работал над тем, как Epi создает основу для своих функций сплайна (через функцию Ns
), я был немного смущенный тем, как он обрабатывает аргумент detrend
.
Когда detrend=T
я бы ожидал, что Epi::Ns(...)
будет более или менее проектировать базу, заданную splines::ns(...)
, на ортогональное дополнение к пространству столбцов [1 t]
и, наконец, извлечь набор линейно независимых столбцов (так что у нас есть базис).
Однако, похоже, это не так. Я попробовал
library(Epi)
x=seq(-0.75, 0.75, length.out=5)
Ns(x, knots=c(-0.5,0,0.5), Boundary.knots=c(-1,1), detrend=T)
и
library(splines)
detrend(ns(x, knots=c(-0.5,0,0.5), Boundary.knots=c(-1,1)), x)
Матрицы, создаваемые указанным выше кодом, не совпадают, однако они имеют одинаковое пространство столбцов (в этом примере), предполагая, что если подключить к линейной модели, то установленные коэффициенты будут разными, но подгонка (сама по себе ) будут одинаковыми.
Первый вопрос у меня был; это правда в целом?
Второй вопрос: почему два разных?
Что касается второго вопроса - когда указано detrend
, Epi::Ns
дает предупреждение о том, что fixsl
игнорируется.
Дайвинг в Epi github NS.r... в построении основы в вызове Epi::Ns
выше с detrend=T
, вызывается рабочий ns.ld()
(функция, почти идентичная кишкам splines::ns()
), которая проходит c(NA,NA)
до splines::spline.des
в качестве аргумента derivs
при определении матрицы const
;
const <- splines::spline.des( Aknots, Boundary.knots, 4, c(2-fixsl[1],2-fixsl[2]))$design
В этом разница между тем, что происходит в Ns(detrend=T)
, и вызовом ns()
выше, который передает c(2,2)
в splineDesign как аргумент derivs
.
Итак, это объясняет, как они разные, но не почему? У кого-нибудь есть объяснение, почему fixsl=c(NA,NA)
используется вместо fixsl=c(F,F)
в Epi::Ns()
?
И у кого-нибудь есть доказательство/или ответ на первый вопрос?
Я думаю, что ортогональное дополнение к пространству столбцов const
используется так, что на грани (через проекцию общего сплайн-базиса) на второй (или желаемом) производные равны нулю, но я не уверен в этом шаге, поскольку у меня нет выкопал в математику, я просто иду своим "чувством". Возможно, если бы я это понял лучше, причина, по которой различия в результате для const
от вызова до splineDesign
/spline.des
(в ns()
и ns()
соответственно) объяснят, почему две матрицы с самого начала не то же самое, но при этом одинаковые.
Ответы
Ответ 1
fixsl=c(NA,NA)
была ошибкой, которая была исправлена через некоторое время. См. Фиксации в зеркале CRAN Github.
Я все равно отправил письмо сопровождающему, чтобы узнать, может ли исправление быть немного более совместимым с условием, но в принципе это может быть закрыто.