Извинения, если ответ очевиден, но я потратил некоторое время, пытаясь использовать пользовательскую функцию ссылки в mgcv.gamФункция пользовательской Link работает для GLM, но не mgcv GAM
Короче говоря,
- Я хочу использовать модифицированную ссылку пробита из пакета psyphy (я хочу использовать psyphy.probit_2asym, я называю это
custom_link
) Я могу создать {статистики} семейного объект по этой ссылке и использовать его в «семейном» аргументе GLM.
m <- glm(y~x, family=binomial(link=custom_link), ...)
Это не работает, когда используется в качестве аргумента для {mgcv} GAM
m <- gam(y~s(x), family=binomial(link=custom_link), ...)
Я получаю ошибку
Error in fix.family.link.family(family) : link not recognised
я не получаю причина этой ошибки, как glm, так и gam работа, если я укажу стандарт link=probit
.
Так что мой вопрос можно резюмировать следующим образом:
чего не хватает в этой пользовательской ссылке, которая работает на ГЖС, но не гам?
Заранее спасибо, если вы можете дать мне подсказку о том, что я должен делать.
функция Link
probit.2asym <- function(g, lam) {
if ((g < 0) || (g > 1))
stop("g must in (0, 1)")
if ((lam < 0) || (lam > 1))
stop("lam outside (0, 1)")
linkfun <- function(mu) {
mu <- pmin(mu, 1 - (lam + .Machine$double.eps))
mu <- pmax(mu, g + .Machine$double.eps)
qnorm((mu - g)/(1 - g - lam))
}
linkinv <- function(eta) {
g + (1 - g - lam) *
pnorm(eta)
}
mu.eta <- function(eta) {
(1 - g - lam) * dnorm(eta) }
valideta <- function(eta) TRUE
link <- paste("probit.2asym(", g, ", ", lam, ")", sep = "")
structure(list(linkfun = linkfun, linkinv = linkinv,
mu.eta = mu.eta, valideta = valideta, name = link),
class = "link-glm")
}
Большое спасибо за редактирование вопроса. – user1436340