2016-06-09 39 views
0

我想创建一个算法,它将创建在2^k析因设计中添加两个运行的所有可能组合。我见过很多组合的例子,但他们没有一个真正解决这个具体问题。这个算法的结果应该是k个列的矩阵,并且(2^k选择1)+(2^k选择2)+ 1个行数以给出2个组合的正确数目。因此,对于2^2设计,我们将有2列和11行(4 + 6 + 1),我在下面设计了这个矩阵,以显示它应该是什么样子。每对行(1,2)(2,3)(3,4)等应该是不同的(我知道现在不是)。这并不需要是超级有效,或者在一个特定的语言,但宁愿R,我只需要努力做到这一点的最后所以要弄清楚什么样的方法可以用来做这个算法组合帮助创建增量析因设计

Run A B 
1 -1 -1 
2 -1 -1 
3 1 -1 
4 1 -1 
5 -1 1 
6 -1 1 
7 1 1 
8 1 1 
9 -1 -1 
10 -1 1 
11 1 1 
+0

为什么行1和行2分开?如果每行有四列,那么它会不会更容易/更清晰? – David

+0

感谢您的建议David。如果每一行有四列,那么表格将代表四因子阶乘(A,B,C,D)。但是,如果有方法确保这四列中的元素在所有行中都不相同,则可以执行一些矩阵操作以将其置于正确的格式中。 – JoseBatAbi

+0

在你的例子中,第6行和第7行与第10行和第11行相同。 –

回答

0

有效的方法(只比组合总数多一行)并失败。我决定采取一种方法来生成所有组合的格式,其中行(1 & 2),(3 & 4)等是两种不同的组合。这里是R中的代码,如果任何人有兴趣

numFactors <- 2 
org <- gen.factorial(2,numFactors) 
orgRow <- nrow(org) 
x <- c(seq(1,orgRow)) 
z <- (x*2) 
numARow <- sum(z) ##Double the total combinations 
aug <- matrix(data = NA, nrow = numARow, ncol = numFactors) 
j <- 1 
k <- 1 
output <- list() 
for (i in 1:(numARow/2)) { ##This wil create all possible 2 combinations in the style of 1&2,3&4... 
    l <- (2*i) - 1 ## 1, 3, 5 .... 
    first <- org[j,] 
    if (k != j) { 
    second <- org[k,] 
    k <- k +1 
    } 
    if (k == j) { 
    second <- org[k,] 
    k <- k +1 
    } 
    output[[i]] <- rbind(first,second) 
    if (k == (orgRow+1)) { 
    j <- j + 1 
    k <- j 
     } 
}