我在R中运行多个回归时遇到问题。我有一个返回矩阵,必须针对向量进行回归。为了清楚起见,我有一个1794资产的矩阵,每个资产都需要针对SPX进行回归。然后我需要随着时间推移这些回归,所以我试图用矩阵代数来做这个以获得最佳速度。
我的代码如下:
for (i in 1:(nrow(fundReturns) - 59)){
tempMatrix <- fundReturns[i:(i+59),]
tempSPX <- spxReturns[i:(i+59)]
theSubset <- sapply(tempMatrix, function(x) sum(is.na(x))) == 0
tempMatrix <- tempMatrix[,theSubset]
theBeta <- solve(crossprod(tempMatrix), crossprod(tempMatrix, tempSPX))
theBetas[index(fundReturns)[(i + 59)], colnames(theBeta)] = theBeta
}
在第一次迭代时,在'theBeta&lt; - ...'行中断。我收到以下错误:
Error in solve.default(t(tempMatrix) %*% tempMatrix) :
Lapack routine dgesv: system is exactly singular: U[273,273] = 0
我认为这意味着我在某处有一些奇异的矩阵,这对我来说没有意义。 (如果有人能够解释这个错误究竟意味着什么,那将是值得的奖励积分。)我没有看到错误来自何处,并且为了启动,我尝试使用以下代码进行检查:
for (i in 1:1794){
tempMatrix2 <- tempMatrix[,i]
theBeta <- solve(t(tempMatrix2) %*% tempMatrix2) %*% (t(tempMatrix2) %*% tempSPX)
}
此代码运行正常,并为每个列生成测试版。我假设我的代码中缺少某些东西,或者向后计算,但我找不到它。请大神,帮助我。
如果有帮助,请参阅以下内容:
> dim(tempSPX)
[1] 60 1
> dim(tempMatrix)
[1] 60 1794