编写的函数如下:
DCSIS<-function(x,y)
{
x=t(t(x));
y=t(t(y));
n<-nrow(x);
p<-ncol(x);
m<-nrow(y);
if (m!=n)
print("Error:matrix of x and y do not match")
source("dcov.r") 这是自己编写的另一个函数,运行正常,没有问题
dcov3=dcov(y,y);
w=rep(0,p);
for (k in 1:p)
{ dcov1=dcov(x[,k],y);
dcov2=dcov(x[,k],x[,k]);
w[k]=dcov1/sqrt(dcov2)/sqrt(dcov3);}
}直接调用函数得到w是NULL
n = 100;
p = 2000;
library("mvtnorm")
x<-rmvnorm(n,rep(0,p),diag(p));
beta<-c(1,1,1,rep(0,p-3));
y=x%*%beta+rnorm(n);
source("DCSIS.r")
w=DCSIS(x,y);
直接具体求解,得到的w是正常的结果
n = 100;
p = 2000;
library("mvtnorm")
x<-rmvnorm(n,rep(0,p),diag(p));
beta<-c(1,1,1,rep(0,p-3));
y=x%*%beta+rnorm(n);
source("dcov.r")
dcov3=dcov(y,y);
w=rep(0,p);
for (k in 1:p)
{ dcov1=dcov(x[,k],y);
dcov2=dcov(x[,k],x[,k]);
w[k]=dcov1/sqrt(dcov2)/sqrt(dcov3);}