【问题标题】:build design matrix python构建设计矩阵python
【发布时间】:2018-02-06 23:26:36
【问题描述】:

假设我有一个 RxC contingency table。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C - 2) 的矩阵 X,其中包含行的 R - 1“主效应” 以及列的 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),您省略了每行一级和每列一级。

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

【问题讨论】:

  • 你能解释一下R = C = 2是如何给你这个矩阵/数组的吗?
  • 可能想从列联表是什么开始,或者至少是一个链接。我们是程序员(无论如何我们中的一些人)而不是系统工程师。
  • 好点,进行了编辑
  • 例如,R=3, C=4 的预期输出是什么?我看不到如何从该维基百科链接中获得“主要效果”,尤其是不仅仅基于行数和列数。如果您只是想要一个空数组稍后将值放入,您可以创建np.empty((R, C, R + C - 2))
  • np.zeros((R*C, R + C - 2)) 怎么样? OP 可能还想查看stackoverflow.com/questions/29901436/…

标签: python numpy patsy


【解决方案1】:

以下应该有效:

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.]])

感谢大家的帮助!

【讨论】:

    【解决方案2】:

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

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

    示例 北美
    宾夕法尼亚
    PD
    不知道

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

    【讨论】:

    • 你能详细说明你的答案吗?例如,您应该提供一个示例,说明这些工具如何帮助解决问题,或者至少提供指向更多文档的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多