多变量R函数的简化
我试图实现以下模型: 然而,我的代码是相当混乱的,因为所有的Z和我们,我正在寻找一些编码技巧,使我的代码尽可能简短和简单多变量R函数的简化,r,R,我试图实现以下模型: 然而,我的代码是相当混乱的,因为所有的Z和我们,我正在寻找一些编码技巧,使我的代码尽可能简短和简单 model = function(N,t1,t2){ Z1 = rnorm(N,0,1) Z2 = rnorm(N,0,1) Z3 = rnorm(N,0,1) Z4 = rnorm(N,0,1) U1 = runif(N,0,1) U2 = runif(N,0,1) T = (U2+t2*U1)/(1+t2) X1 = (Z1+t1*U1)/
model = function(N,t1,t2){
Z1 = rnorm(N,0,1)
Z2 = rnorm(N,0,1)
Z3 = rnorm(N,0,1)
Z4 = rnorm(N,0,1)
U1 = runif(N,0,1)
U2 = runif(N,0,1)
T = (U2+t2*U1)/(1+t2)
X1 = (Z1+t1*U1)/(1+t1)
X2= (Z2+t1*U1)/(1+t1)
X3= (Z3+t1*U1)/(1+t1)
X4= (Z4+t1*U1)/(1+t1)
eps = rnorm(100,0,1)
Y = 2*X1 + 3*T*X2 + X3*(T+1)^2+ 4*X4*sin(2*pi*T)/(2-2*sin(2*pi*T))+eps
X = cbind(X1,X2,X3,X4)
return(list(X = X, Y = Y))}
也许下面的代码简化了一点
model = function(N,t1,t2){
Z <- matrix(rnorm(4*N),nrow = N)
U <- matrix(runif(2*N),nrow = N)
W <- tcrossprod(U, rbind(c(t2, 1))) / (1+t2)
X <- (Z + t1*U[,1])/(1+t1)
eps <- rnorm(N)
M <- cbind(2,3*W,(W+1)**2,4*sin(2*pi*W)/(2-sin(2*pi*W)))
Y <- M*X + eps
return(list(X = X, Y = Y))
}
也许下面的代码简化了一点
model = function(N,t1,t2){
Z <- matrix(rnorm(4*N),nrow = N)
U <- matrix(runif(2*N),nrow = N)
W <- tcrossprod(U, rbind(c(t2, 1))) / (1+t2)
X <- (Z + t1*U[,1])/(1+t1)
eps <- rnorm(N)
M <- cbind(2,3*W,(W+1)**2,4*sin(2*pi*W)/(2-sin(2*pi*W)))
Y <- M*X + eps
return(list(X = X, Y = Y))
}
对于某些M,Y的表达式是否可以转换为矩阵积X%*%M?@MichaelChirico是的,这是可能的,但最好使用M*X而不是M%*%X%*%M不能满足维度一致性要求M%*%X`可能需要构造一个巨大的块矩阵并重塑乘积,这不像使用*那么简单。对于某些M,Y的表达式可以转换为矩阵乘积X%*%M吗?@MichaelChirico是的,这是可能的,但最好使用M*X而不是M%*%X%*%M不能满足维度一致性M%*%X`可能需要构造一个巨大的块矩阵并重塑产品,这不像使用它那么容易*