Sas 不同矩阵的IML相关性
给定一个矩阵X(n*p),我想把X分成Y1(n*p-k)和Y2(n*k),其中Y1由X和Y2的前k列组成,Y2是其他列 现在,在R中,我可以通过调用Sas 不同矩阵的IML相关性,sas,sas-iml,Sas,Sas Iml,给定一个矩阵X(n*p),我想把X分成Y1(n*p-k)和Y2(n*k),其中Y1由X和Y2的前k列组成,Y2是其他列 现在,在R中,我可以通过调用cor(Y1,Y2,use=“pairwise.complete.obs”)获得Y1和Y2列之间的“交叉”相关性,在SAS IML中,如果corr函数只允许1个数据集,我如何获得相同的结果 我试图找到一个合适的解决方案或算法来实现它,但结果很糟糕 有人能帮忙吗?同时给我指出一些关于这类或相关的文献会很好!我不想让你为我编写代码,只是一些关于现有函数或
cor(Y1,Y2,use=“pairwise.complete.obs”)
获得Y1和Y2列之间的“交叉”相关性,在SAS IML中,如果corr
函数只允许1个数据集,我如何获得相同的结果
我试图找到一个合适的解决方案或算法来实现它,但结果很糟糕
有人能帮忙吗?同时给我指出一些关于这类或相关的文献会很好!我不想让你为我编写代码,只是一些关于现有函数或算法的帮助或提示
多谢各位
编辑:不要在网上搜索交叉相关性,我写这篇文章只是为了解释我自己。查找“交叉相关性”会让你找到一系列关于信号处理的文献,以及一个非常类似于自相关函数的函数。事实上,在R中,它是用acf记录的
但这不是您的代码所做的。在R中:
n = 100
p = 6
k = 2
set.seed(1)
r = rnorm(n*p)
x= matrix(r,n,p)
y1 = x[,1:k]
y2 = x[,(k+1):p]
cor.ys = cor(y1,y2,use="pairwise.complete.obs")
cor.x = cor(x)
(cor.ys - cor.x[1:k,(k+1):p])
您可以看到,cor(y1,y2)
的结果只是x的相关矩阵的一部分
您应该能够轻松地将其放入IML中。我可以想出一些方法来实现这一点。最简单的方法是计算皮尔逊相关性的完整矩阵(使用成对选项),然后将结果子集。(DomPazz说的)如果你有数百个变量,你只需要几个相关性,这将是低效的,但编程非常简单:
proc iml;
n = 100; p = 6; k = 2;
call randseed(1);
x = randfun(n//p, "Normal");
varNames = "x1":"x6";
corr = corr(x, "pearson", "pairwise"); /* full matrix */
idx1 = 1:k; /* specify VAR */
idx2 = (k+1):p; /* specify WITH */
withCorr = corr[idx2, idx1]; /* extract submatrix */
print withcorr[r=(varNames[idx2]) c=(varNames[idx1])];
在SAS/IML之外,您可以使用PROC CORR和WITH语句执行相同的计算,从而验证SAS/IML程序:
proc corr data=test noprob nosimple;
var x1-x2;
with x3-x6;
run;
(我真的希望来自“do loop”博客的Rick会来这里)我添加了R标签,希望一位R大师能够为你指出文学。我认为这不合适。除非标签与问题实际相关,否则不应使用标签,并且(除非编辑标签以解决此问题),问题不会询问
r
函数的功能。也许应该,但是…多姆帕兹这是真的,我不明白为什么我自己找不到。你完全救了我的大脑不至于发疯。非常感谢,很好,瑞克,谢谢。在我的例子中,两个矩阵是:给定M完整矩阵,X包含没有任何缺失值的列,Y包含缺失值的列。我定义了两个索引:missidx=loc(countmiss(M,“ROW”)^=0;compidx=loc(countmiss(M,“ROW”)=0;然后我用MCor=corr(M,“pearson”,“pairwise”)计算了完整的corr矩阵;并用XYCor=MCor[compidx,missidx]得到了期望的结果;感谢您的帮助,感谢您的博客提供了鼓舞人心的内容。