我正在从事教育任务,以使用 R 语言软件从 BIB 设计中生成发生率矩阵。我找到了一个与问题相关的网页http://wiki.math.yorku.ca/index.php/R:_Incidence_matrix 。但它产生数据矩阵而不是发生矩阵。任何人都可以帮我解决R语言代码。获取 BIB 设计矩阵的代码为:
b=4 # Number of Blocks
t=8 # Number of Column
z=c(1,2,3) # Shift
m=NULL
y=c(0)
w=c(y,cumsum(z) %%t) # cumsum() is for the running totals
p=seq(from=0, to=t-1, by=1)
l=NULL
for(i in 1:b)
{
for(j in 1:t)
{
l=c(l,rep((w[i]+p[j]+t)%% t))
}
}
#"BIB design" it has 4 rows (blocks b) and 8 column (treatments t)
x= matrix(c(l),nrow=b,ncol=t,byrow = TRUE)
print (x)
0 1 2 3 4 5 6 7
1 2 3 4 5 6 7 0
3 4 5 6 7 0 1 2
6 7 0 1 2 3 4 5
(通常可以在任何 t 处理和 b 块大小下生成)使用上述设计矩阵 x (4*8)。我需要以下发生矩阵(8 * 8)
1 1 0 1 0 0 1 0
0 1 1 0 1 0 0 1
1 0 1 1 0 1 0 0
0 1 0 1 1 0 1 0
0 0 1 0 1 1 0 1
0 1 0 0 1 0 1 1
1 0 1 0 0 1 0 1
考虑 Design Matrix Column wise 并生成 Incidence Matrix Row wise。例如 x 的第一列是
0
1
6
3
现在查看所需的发生矩阵 (IM) 的第一行。
1 1 0 1 0 0 1 0
x 的第 1 位是 0,所以将 1 放在 IM 的第 1 位。
在 x 的第 2 位是 1,所以也将 1 放在 IM 的第 2 位。
这里 x 列中缺少 2,因此将 0 放在 IM 的第 3 位。
x 包含 3,因此将 1 放在第 4 位,4 和 5 丢失,连续放置两个 0。
X 有 6 把 1 放在第 7 位,7 把 0 放在 IM 的第 8 位。
取 x 的第 2 列并以类似方式填充 IM 的第 2 行。如果存在特定数字(0 到 7),则输入 1,否则输入 0。
我希望,我现在对每个人都说清楚。