在 R 中使用 fpca 包时出错

errors when using fpca package in R

我正在使用 fpca 包来应用 James 等人中的降阶模型。 (2000),但每次我尝试使用 fpca.score 函数时,都会 returns 我出现此错误:

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,第二列是measurement,第三列是time。它也是 fpca.mle 函数的输入,其输出包括上述 fpca.score 函数的其他输入:grids, muhat, eigenvals, eigenfuncs, sig2hat, K.

显然错误发生在这里

eigenfuncs.u[gridtime, 1:K]

来自

N <- length(grids.u)
meastime <- data.u[(current + 1):(current + m.l[i]), 2]
gridtime <- ceiling(N * meastime)

有哪位 fda 大师知道如何解决这个问题吗?非常感谢。

问题可能是由于网格值与数据中的时间值不匹配所致。使用牛顿算法,网格的默认值是seq(0,1,0.002),所以时间数据需要重新缩放到(0,1)之间。