Я использую пакет fpca для применения модели уменьшенного ранга в James et al. (2000), но каждый раз, когда я пытаюсь использовать функцию fpca.score, она возвращает мне эту ошибку:ошибки при использовании пакета fpca в R
Error in eigenfuncs.u[gridtime, 1:K] : subscript out of bounds
Так что я вытащил исходный код:
function (data.m, grids.u, muhat, eigenvals, eigenfuncs, sig2hat, K)
{
temp <- table(data.m[, 1])
n <- length(temp)
m.l <- as.vector(temp)
result <- matrix(0, n, K)
N <- length(grids.u)
evalmat <- diag(eigenvals[1:K])
current <- 0
eigenfuncs.u <- t(eigenfuncs)
data.u <- matrix(as.numeric(as.vector(data.m[, -1])),nrow=nrow(data.m[,-1]), ncol = ncol(data.m[, -1]))
for (i in 1:n) {
Y <- as.vector(data.u[(current + 1):(current + m.l[i]), 1])
meastime <- data.u[(current + 1):(current + m.l[i]), 2]
gridtime <- ceiling(N * meastime)
muy <- muhat[gridtime]
Phiy <- matrix(eigenfuncs.u[gridtime, 1:K], ncol = K)
Sigy <- Phiy %*% evalmat %*% t(Phiy) + sig2hat * diag(m.l[i])
temp.y <- matrix(Y - muy)
result[i, ] <- evalmat %*% t(Phiy) %*% solve(Sigy, temp.y)
current <- current + m.l[i]
}
return(result)
}
data.m является трехколоночная матрица данных, первый столбец которой равен id, второй столбец - измерение, третий столбец - время. Кроме того, на вход функции fpca.mle, выходные сигналы включают в себя другие входы выше функции fpca.score: сетки, muhat, eigenvals, eigenfuncs, sig2hat, К.
Видимо ошибка происходит здесь
eigenfuncs.u[gridtime, 1:K]
, который приходит от
N <- length(grids.u)
meastime <- data.u[(current + 1):(current + m.l[i]), 2]
gridtime <- ceiling(N * meastime)
есть ли гуру УОГО, кто знает, как это исправить? Глубоко ценим.
не включены? вы могли бы предложить способы исключить 0 и 1 плз? Я нормализовал отметки времени, но всегда включал границы ... Большое спасибо! – shenglih