在 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)之间。
我正在使用 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)之间。