Основа, предоставляемая 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.desns() и ns() соответственно) объяснят, почему две матрицы с самого начала не то же самое, но при этом одинаковые.

Ответы

Ответ 1

fixsl=c(NA,NA) была ошибкой, которая была исправлена ​​через некоторое время. См. Фиксации в зеркале CRAN Github.

Я все равно отправил письмо сопровождающему, чтобы узнать, может ли исправление быть немного более совместимым с условием, но в принципе это может быть закрыто.