2015-05-30 7 views
1

Я использую пакет 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) 

есть ли гуру УОГО, кто знает, как это исправить? Глубоко ценим.

ответ

1

Проблема может возникнуть в результате несоответствия между значениями сеток и значениями времени в ваших данных. Используя алгоритм Ньютона, значение по умолчанию для сеток является seq (0,1,0.002), поэтому данные времени необходимо перемасштабировать, чтобы упасть между (0,1).

+0

не включены? вы могли бы предложить способы исключить 0 и 1 плз? Я нормализовал отметки времени, но всегда включал границы ... Большое спасибо! – shenglih

Смежные вопросы