我想 * 完成 * 一个相关矩阵,使它成为正定的,其中我只关心每个变量与第一个变量的相关性,其余的可以是任何东西。例如,我想 * 完成 * 这个相关矩阵,将--
填入任何一组数字,使矩阵成为正定的。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1.00 0.76 0.77 0.78 0.79 0.81 0.82 0.83 0.84
[2,] 0.76 1.00 -- -- -- -- -- -- --
[3,] 0.77 -- 1.00 -- -- -- -- -- --
[4,] 0.78 -- -- 1.00 -- -- -- -- --
[5,] 0.79 -- -- -- 1.00 -- -- -- --
[6,] 0.81 -- -- -- -- 1.00 -- -- --
[7,] 0.82 -- -- -- -- -- 1.00 -- --
[8,] 0.83 -- -- -- -- -- -- 1.00 --
[9,] 0.84 -- -- -- -- -- -- -- 1.00
有像nearcor这样的函数用于“固定”正定相关矩阵,但它们对所有变量进行优化,而不是在尊重其他变量的同时填充一些变量。或者有像pos_def_limits这样的函数用于while-looping来填充下一个相关值,但同时对许多值进行此操作似乎很难。
(The该相关矩阵的预期用途是将其提供给x1E2f1x以生成满足它的数据)。
3条答案
按热度按时间wvyml7n51#
我想你可以从一个具有正对角线的下三角形
L
开始构造一个正定矩阵M
,例如M = L*L^T
,使得如果x>0
,则x^T*M*x = x^T*L*L^T*x = |L^T*x|^2
应该是肯定的。例如,实现方式:
我们可以看到
我们可以检查所有的特征值都大于
0
mnemlml82#
可能有一些优雅的线性代数的作品,但蛮力似乎可以解决这个问题。
objfun
的正值表示负定矩阵。似乎我们有50/50的机会通过填充随机的正常值来获得pos-def矩阵:
在任何情况下,我们都可以使用
optim()
和abstol
,只要我们得到一个负值(==一个pos def结果),就立即停止。vfhzx4xs3#
如果你真的不关心其他相关性,你可以直接在线性时间内提取样本(你可以对结果应用逐点线性变换而不改变相关性)。