构建设计矩阵 python

build design matrix python

假设我有一个 RxC contingency table。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C − 2) 的矩阵 X,其中包含行的 R − 1 个“主效应” 和 columns.For 示例的 C − 1 “主效应”,如果您有 R=C=2 (R = [0, 1], C = [0, 1]) 并且只有主效应,则有参数化设计矩阵 (X) 的多种方法,但下面是一种方法:

1 0
0 1
1 0
0 0

请注意,这是 4 x 2 = RC x (R + C - 2),您省略了每行的一个级别和每列的一个级别。

如何在 Python 中对 R 和 C 的任何值执行此操作,即 R = 3,C = 4([0 1 2] 和 [0 1 2 3])?我只有 R 和 C 的值,但我可以使用它们来使用 np.arange(R)np.arange(C).

构造数组

以下应该有效:

R = 3
C = 2

ir = np.zeros((R, C))
ir[0, :] = 1
ir = ir.ravel()

mat = []
for i in range(R):
    mat.append(ir)
    ir = np.roll(ir, C)

ic = np.zeros((R, C))
ic[:, 0] = 1
ic = ic.ravel()

for i in range(C):
    mat.append(ic)
    ic = np.roll(ic, R)

mat = np.asarray(mat).T

结果是:

array([[ 1.,  0.,  0.,  1.,  0.],
       [ 1.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  1.,  0.],
       [ 0.,  1.,  0.,  0.,  1.],
       [ 0.,  0.,  1.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  1.]])

感谢大家的帮助!

使用 LabelBinarizer 或 One-Hot Encoding 创建设计矩阵

由于他的所有标签都在相似的列中,我们可以使用具有 LabelBinarizer/One 热编码的 sklearns 预处理包,它将同一列中的标签转换为多个列,将 1 放在它出现的索引处

例子 不适用
PA
PD
不适用

在 LabelBinarizer 之后
NA PA PD
1 0 0
0 1 0
0 0 1
1 0 0