我试图在R中计算P任意N x J矩阵的投影矩阵S:
P = S (S'S) ^ -1 S'
Run Code Online (Sandbox Code Playgroud)
我一直试图用以下功能执行此操作:
P <- function(S){
output <- S %*% solve(t(S) %*% S) %*% t(S)
return(output)
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,我得到的错误看起来像这样:
# Error in solve.default(t(S) %*% S, t(S), tol = 1e-07) :
# system is computationally singular: reciprocal condition number = 2.26005e-28
Run Code Online (Sandbox Code Playgroud)
我认为这是数值下溢和/或不稳定的结果在许多地方一样讨论R-帮助和这里,但我没有足够的经验使用SVD或QR分解来解决这个问题,要不然就把这个现有的代码到行动.我也尝试了建议的代码,即将solve写成一个系统:
output <- S %*% solve (t(S) %*% S, t(S), tol=1e-7)
Run Code Online (Sandbox Code Playgroud)
但它仍然无效.任何建议,将不胜感激.
我很确定我的矩阵应该是可逆的并且没有任何共线性,只是因为我尝试用正交虚拟变量矩阵进行测试,但它仍然不起作用.
另外,我想将它应用于相当大的矩阵,所以我正在寻找一个简洁的通用解决方案.
为了对能源使用产生季节性影响,我需要将计费数据库中的能源使用信息与月度温度保持一致.
我正在使用具有不同长度和开始日期和结束日期的帐单的结算数据集,并且我想获得每个月内每个帐户的月平均值.例如,我有一个具有以下特征的计费数据库:
acct amount begin end days
1 2242 11349 2009-10-06 2009-11-04 29
2 2242 12252 2009-11-04 2009-12-04 30
3 2242 21774 2009-12-04 2010-01-08 35
4 2242 18293 2010-01-08 2010-02-05 28
5 2243 27217 2009-10-06 2009-11-04 29
6 2243 117 2009-11-04 2009-12-04 30
7 2243 14543 2009-12-04 2010-01-08 35
Run Code Online (Sandbox Code Playgroud)
我想弄清楚如何强制这些有点不规则的时间序列(对于每个帐户)来获得每个月内每个月内的平均金额,以便:
acct amount begin end days avgamtpday
1 2242 11349 2009-10-01 2009-10-31 31 X
2 2242 12252 2009-11-01 2009-11-30 30 X
3 2242 21774 2009-12-01 2010-12-31 31 X
4 2242 18293 …Run Code Online (Sandbox Code Playgroud)