使用 R 创建完全对立的绘图
Create fully antithetic draws using R
假设我有矩阵 d
,它是二维(列)采样过程的两种不同实现(行)的结果。我想开发一个函数,从这个原始矩阵创建完全对立的绘图。
c1 <- c(0.1, 0.6);c2 <- c(0.3, 0.8);d <- rbind(c1,c2)
# [,1] [,2]
# c1 0.1 0.6
# c2 0.3 0.8
也就是说,比如第一次实现(c(0.1, 0.6)
)我想得到这个随机抽取的二维镜像,生成了4种(2^2)
可能的组合为如下:
d1_anthi = matrix(
c( d[1,1] , d[1,2],
1 - d[1,1], d[1,2],
d[1,1] , 1 - d[1,2],
1 - d[1,1], 1 - d[1,2]), nrow=2,ncol=4)
t(d1_anthi)
# [,1] [,2]
# [1,] 0.1 0.6
# [2,] 0.9 0.6
# [3,] 0.1 0.4
# [4,] 0.9 0.4
同理,对于第二种,实现结果如下:
d2_anthi = matrix(
c( d[2,1] , d[2,2],
1 - d[2,1], d[2,2],
d[2,1] , 1 - d[2,2],
1 - d[2,1], 1 - d[2,2]), nrow=2, ncol=4)
t(d2_anthi)
# [,1] [,2]
# [1,] 0.3 0.8
# [2,] 0.7 0.8
# [3,] 0.3 0.2
# [4,] 0.7 0.2
因此,我想要锁定的对象是这样的:
anthi_draws <- rbind(t(d1_anthi),t(d2_anthi))
# [,1] [,2]
# [1,] 0.1 0.6 <- original first realization
# [2,] 0.9 0.6
# [3,] 0.1 0.4
# [4,] 0.9 0.4
# [5,] 0.3 0.8 <- original second realization
# [6,] 0.7 0.8
# [7,] 0.3 0.2
# [8,] 0.7 0.2
最后,我想创建一个函数,给定一个随机数矩阵,它能够创建这个扩展的对立矩阵。比如下图中我在三个维度上抽样,那么每次原始抽取的总抽取次数是2^3 = 8.
特别是,我在创建取决于原始采样维度(矩阵列)的完整组合时遇到了问题。我打算使用 expand.grid()
但我无法使用它创建完整的组合。欢迎任何提示或帮助来创建这样的功能。提前谢谢你。
你可以试试这个
do.call(
rbind,
apply(
d,
1,
function(x) {
expand.grid(data.frame(rbind(x, 1 - x)))
}
)
)
这给出了
X1 X2
c1.1 0.1 0.6
c1.2 0.9 0.6
c1.3 0.1 0.4
c1.4 0.9 0.4
c2.1 0.3 0.8
c2.2 0.7 0.8
c2.3 0.3 0.2
c2.4 0.7 0.2
假设我有矩阵 d
,它是二维(列)采样过程的两种不同实现(行)的结果。我想开发一个函数,从这个原始矩阵创建完全对立的绘图。
c1 <- c(0.1, 0.6);c2 <- c(0.3, 0.8);d <- rbind(c1,c2)
# [,1] [,2]
# c1 0.1 0.6
# c2 0.3 0.8
也就是说,比如第一次实现(c(0.1, 0.6)
)我想得到这个随机抽取的二维镜像,生成了4种(2^2)
可能的组合为如下:
d1_anthi = matrix(
c( d[1,1] , d[1,2],
1 - d[1,1], d[1,2],
d[1,1] , 1 - d[1,2],
1 - d[1,1], 1 - d[1,2]), nrow=2,ncol=4)
t(d1_anthi)
# [,1] [,2]
# [1,] 0.1 0.6
# [2,] 0.9 0.6
# [3,] 0.1 0.4
# [4,] 0.9 0.4
同理,对于第二种,实现结果如下:
d2_anthi = matrix(
c( d[2,1] , d[2,2],
1 - d[2,1], d[2,2],
d[2,1] , 1 - d[2,2],
1 - d[2,1], 1 - d[2,2]), nrow=2, ncol=4)
t(d2_anthi)
# [,1] [,2]
# [1,] 0.3 0.8
# [2,] 0.7 0.8
# [3,] 0.3 0.2
# [4,] 0.7 0.2
因此,我想要锁定的对象是这样的:
anthi_draws <- rbind(t(d1_anthi),t(d2_anthi))
# [,1] [,2]
# [1,] 0.1 0.6 <- original first realization
# [2,] 0.9 0.6
# [3,] 0.1 0.4
# [4,] 0.9 0.4
# [5,] 0.3 0.8 <- original second realization
# [6,] 0.7 0.8
# [7,] 0.3 0.2
# [8,] 0.7 0.2
最后,我想创建一个函数,给定一个随机数矩阵,它能够创建这个扩展的对立矩阵。比如下图中我在三个维度上抽样,那么每次原始抽取的总抽取次数是2^3 = 8.
特别是,我在创建取决于原始采样维度(矩阵列)的完整组合时遇到了问题。我打算使用 expand.grid()
但我无法使用它创建完整的组合。欢迎任何提示或帮助来创建这样的功能。提前谢谢你。
你可以试试这个
do.call(
rbind,
apply(
d,
1,
function(x) {
expand.grid(data.frame(rbind(x, 1 - x)))
}
)
)
这给出了
X1 X2
c1.1 0.1 0.6
c1.2 0.9 0.6
c1.3 0.1 0.4
c1.4 0.9 0.4
c2.1 0.3 0.8
c2.2 0.7 0.8
c2.3 0.3 0.2
c2.4 0.7 0.2