Я пытаюсь оценить параметры, используя максимальное правдоподобие с внутренней подпрограммой, которая решает проблему с фиксированной точкой.
По существу, оцениваемые параметры: альфа, дельта и лямда. Я хочу следующее:
- Начальные угадывания параметров для оцениваемых параметров
- Используйте угадывание параметров + функцию FixedPoint, чтобы решить для M (который является функцией параметров)
- Рассчитайте логарифмическую вероятность для этого
- Используйте MLE, чтобы получить новые оценки параметров, которые затем используются в качестве новых догадок для задачи с фиксированной точкой для M
- Продолжайте до тех пор, пока алгоритм сходится.
Подробнее о данных: у меня есть смоделированный набор данных для 100 групп по 2 человека в каждой. Логарифмическая вероятность должна быть суммирована по всем лицам во всех группах. Я использую списки, чтобы определить соответствующие матрицы для каждой группы отдельно.
У меня есть следующий код:
neg_LL <- function (alpha, delta, lamda) {
for (g in 1:G) {
#Calculate the initial value of M for each group
Inputs <- matrix(0.5, nrow = N, ncol = 1)
m_hat <- list()
C = FixedPoint(x <- function (M) {sigmoid(as.matrix(X[[g]]) %*% alpha + W %*% as.matrix(X[[g]]) %*% delta + lamda*W %*% M)}, Inputs, Method = "Simple")
m_hat[[g]] <- matrix(C$FixedPoint, ncol = 1)
#Calculate the probabilities of y = 1 and y = -1 for each individual in each group
Phat_1 <-list()
Phat_minus1 <- list()
Phat_1[[g]] = 1/(1+ exp(-0.2*(X[[g]] %*% alpha + W %*% X[[g]] %*% delta + lamda * W %*% m_hat[[g]])))
Phat_minus1[[g]] = 1/(1+ exp(0.2*(X[[g]] %*% alpha + W %*% X[[g]] %*% delta + lamda * W %*%
m_hat[[g]])))
#Calculate the LL for each group
negLL_g <- list()
for (i in 1:N) {
negLL_g[[g]] = sum(((1+as.matrix(my_data_list[[g]]$Y, ncol = 1)[i,])/2)*log(Phat_1[[g]][i,])
+ ((1-as.matrix(my_data_list[[g]]$Y, ncol = 1)[i,])/2)*log(Phat_minus1[[g]]
[i,]))
}}
#Sum up all the LL's for all the groups to get the neg LL that is to be maximised
negLL = sum(negLL_g[[g]])
return(negLL)
}
est <- stats4::mle(minuslog=neg_LL, start=list(alpha = matrix(c(0.025, - 0.02, 0.05), nrow = k), delta = matrix(c(0.05, 0.02, 0.9), nrow = k),
lamda = 0.5))
summary(est)
Ошибка: я получаю следующую ошибку:
Ошибка в optim (start, f, method = method, hessian = TRUE , ...): (список) объект не может быть приведен к типу 'double'
Что мне делать?