如何创建正交数组?

时间:2016-06-16 06:01:53

标签: arrays algorithm statistics combinatorics black-box-testing

假设我们有以下三个因素:

因子A:5个可能的值
因子B:4个可能的值
因子C:2个可能的值

如何为这些构建Orthogonal array

我不理解的主要是制作组合。我记得我们过去常常关注' 11112222' 11221122' 12121212'这种组合,但似乎每个人都有不同的方法来填充数组中的值。 有没有标准方法?

2 个答案:

答案 0 :(得分:3)

没有一种简洁的算法可以生成正交数组。相反,在许多不同的数学领域中发现了各种各样的结构,以及一些用于修改正交数组以某种方式改变其参数的技术。例如,请参阅http://www.itl.nist.gov/div898/handbook/pri/section3/pri33a.htmhttp://www.win.tue.nl/~aeb/preprints/oa3.pdf。许多统计软件包都有一个正交数组设计实用程序,它使用这些规则和已知正交数组列表来尝试找到一个满足给定要求的正交数组。

在你的情况下,我现在找不到比http://www.york.ac.uk/depts/maths/tables/l25.htm使用25次运行设计的六个五级因子更接近的情况。你当然可以丢弃三列。你在哪里有例如设计中的五个级别和实验中只有4个(或2个)级别我倾向于不断重新标记,例如{1,2,3,4,5} - > {1,2,3,4,4}和{1,2,3,4,5} => {1,2,1,2,1}但我不清楚它对实验性质的影响。

答案 1 :(得分:0)

正交数组的计算在计算上可能是昂贵的,因此通常以库的形式提供设计。

R包DOE.base具有oa.design()函数,该函数检索具有给定数量的因子和因子水平的设计。例如,要检索具有3个因子以及3、4和5级的设计,请使用以下命令。

library(DOE.base)
oa.design(nlevels=c(3,4,5))

在这种情况下,返回的设计是具有60次运行的完全因子分解。这仍然是一个正交数组,但是比具有相同因子水平的替代方案要昂贵得多。

要获取每个具有5个级别的3个因子的正交数组,请使用:

oa.design(nlevels=c(5,5,5))

   A B C
1  1 5 4
2  2 1 5
3  3 4 5
4  3 5 2
5  5 2 4
6  3 3 3
7  5 5 5
8  5 4 3
9  2 5 3
10 5 1 2
11 4 1 3
12 5 3 1
13 4 4 4
14 1 1 1
15 1 2 3
16 3 2 1
17 2 3 4
18 4 3 2
19 4 5 1
20 3 1 4
21 1 3 5
22 1 4 2
23 4 2 5
24 2 2 2
25 2 4 1

输入3个因子(每4个级别)返回一个16游程的正交数组,输入3个因子(每3个级别)返回一个9游程的正交数组。

或者,Python软件包OApackage在PyPi(https://pypi.org/project/OApackage/)中可用。

有关更多信息,请参见: