我正在做一项教育作业,用R语言软件从一个围巾设计中产生一个关联矩阵。我发现了一个与问题相关的网页http://wiki.math.yorku.ca/index.php/R:_Incidence_matrix。但它产生的是数据矩阵,而不是关联矩阵。有没有人可以帮我解决R语言代码。获得箱体设计矩阵的代码为:
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 按列考虑设计矩阵,按行生成关联矩阵。例如,x的第一列是
0
1
6
3 现在查看所需关联矩阵(IM)的第一行。
1 1 0 1 0 0 1 0 在x的第一位是0,所以把1放在IM的第一位。
在x的第二位是1,所以在IM的第二位也是1。
这里x的列缺少2,所以把0放在IM的第三位。
X包含3,因此将1放在第4位,4和5缺少在一行中放置两个0。
X在第7位有6个put 1,在IM的第8位有7个缺少put 0。
取x的第二列和IM的类似填充的第二行。如果存在特定的数字(0到7),则放入1或0。
我希望,我现在对每个人都说得很清楚。
发布于 2012-12-06 15:42:55
为了使x矩阵不同于在一列中有两个相同的项,我得到了这个逻辑:
x[4,1] <- 1
t( apply(x, 2, function(z){ ret <- numeric(8)
for( i in seq_along(z) ){ret[z[i]+1] <- ret[z[i]+1]+ 1}
ret}) )
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 0 1 0 0 0 0
[2,] 0 1 1 0 1 0 0 1
[3,] 1 0 1 1 0 1 0 0
[4,] 0 1 0 1 1 0 1 0
[5,] 0 0 1 0 1 1 0 1
[6,] 1 0 0 1 0 1 1 0
[7,] 0 1 0 0 1 0 1 1
[8,] 1 0 1 0 0 1 0 1https://stackoverflow.com/questions/13736847
复制相似问题