我们正在尝试为 R 函数提供一种方法来处理具有多个响应、多个解释变量以及响应之间可能共享参数的模型。例如:
Y1 ~ X1 + X2 + X3
Y2 ~ X3 + X4
指定两个响应和四个解释变量。X3 出现在两者中,我们希望用户控制关联的参数值是相同还是不同。IE:
Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b3 X3 + b4 X4
这是一个具有四个“b”参数的模型,或者
Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b4 X3 + b5 X4
具有五个参数的模型。
两种可能:
- 在一个公式中指定所有解释变量,并为解释提供一个矩阵映射响应。在这种情况下
Foo( Y1+Y2 ~ X1 + X2 + X3 + X4 + X5, map=cbind(c(1,1,1,0),c(0,0,1,1)))
将对应于第一种情况,并且
Foo( Y1+Y2 ~ X1 + X2 + X3 + X4 + X5, map=cbind(c(1,1,1,0,0),c(0,0,0,1,1)))
将是第二个。显然需要对 LHS 进行一些解析,或者它可能是cbind(Y1,Y2)
. 这种表示法的优点是每个参数可能还需要其他信息 - 起始值,先验等 - 并且排序由公式中的排序给出。
- 有多个公式和一个分组函数,它只添加一个属性,以便可以识别共享参数 - 这两个示例变为:
Foo( Y1 ~ X1+X2+G(X3,1), Y2 ~ G(X3,1)+X4)
其中 X3 参数在公式之间共享,并且
Foo( Y1 ~ X1+X2+X3, Y2 ~ X3+X4)
它具有独立的参数。的第二个参数G()
是一个分组 ID,它赋予了灵活共享模型参数的能力。
该功能的进一步解释G
如下所示:
Foo( Y1 + X1+X2+G(X3,1), Y2~G(X3,1)+G(X4,2), Y3~G(X3,3)+G(X4,2), Y4~G(X3,3))
将是一个模型,其中:
Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b3 X3 + b4 X4
Y3 = b5 X3 + b4 X4
Y4 = b5 X3
其中 X3 有两个独立的参数(G(X3,1) 和 G(X3,3))。如何处理引用不同解释变量的组是一个悬而未决的问题 - 假设模型有Y4~G(X3,2)
- 这似乎暗示了不同解释变量之间的共享参数,因为那里有一个G(X4,2)
。
这个符号对用户来说似乎更容易理解,但是如果你还必须指定起始值,那么起始值向量和它们对应的参数之间的映射就不再明显了。我怀疑在内部我们必须从G()
符号计算映射矩阵。
可能有更好的方法可以做到这一点,所以我的问题是......有人知道吗?