У меня есть этот код, где он вычисляет отрицательное биномиальное распределение, с параметрами:Нелинейная Минимизация (НМГ) в R с ошибкой: неправильное число измерений
ce <- c(0, 1, 2, 3, 4, 5)
ce <- as.integer(ce)
comp <- c(257, 155, 64, 17, 5, 2)
comp <- as.integer(comp)
data.cells <- data.frame(ce, comp)
params <- c(5, 1.5) # vector of 2 params, x and κ.
dat <- data.cells
И функции:
negbinll <- function(dat,params) {
if (missing(dat)||missing(params)) {
print('Plese add values for the model')
} else if (params[1]<0||params[2]<0) {
print('Plese make sure your parameters are >0')
} else {
p <- params[1]/(params[1]+params[2])
N <- params[1] + dat[,1] - 1
log.l <- sum(dat[2]*dnbinom(dat[,1], size = N, prob = p, log = TRUE))
return(log.l)
}
}
Теперь, результат от этого кода
> negbinll(dat, params)
[1] -591.024
Следующим шагом нам е nlm
(Non-Linear Минимизация), чтобы найти максимальные оценки правдоподобия х и х, предположим Params = (X, κ)
nlm(negbinll, dat, p = params)
Error in dat[, 1] : incorrect number of dimensions
Но, если я меняю в начальной функции на DAT [1] в dat [1] Я получаю сообщение об ошибке: Нечисловой аргумент математической функции
Любые предложения? Thanks
Глядя на 'nlm' странице помощи, я не вижу аргумент данных. Также подумайте, что список параметров будет в основном выкидывать любые значения, если он не был назван, потому что не существует позиционного соответствия после '(f, p, ...)' –
Вы просто дали мне идею, позвольте мне попробовать что-то. Аргумент данных, который, как предполагается, должен следовать за параметрами. Я помещал их в nlm на той же последовательности, чтобы соответствовать negbinll – Jespar
Хорошо, я чувствую себя совершенно глупо. Я думал, что независимо от последовательности '(f, p, ...), функция будет работать. По-видимому, мне следовало написать первый код: 'negbinll <- function (params, dat)' вместо dat, а затем params – Jespar