R中具有共享参数的多个公式

时间:2012-09-25 13:52:54

标签: r formulas

我们正在尝试为R函数提供一种方法来处理一个模型,该模型具有多个响应,多个解释变量以及响应之间可能的共享参数。例如:

Y1 ~ X1 + X2 + X3
Y2 ~ X3 + X4

指定两个响应和四个解释变量。 X3出现在两者中,我们希望用户控制相关参数值是相同还是不同。即:

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()表示法计算映射矩阵。

这可能有更好的方法,所以我的问题是......有人知道吗?

2 个答案:

答案 0 :(得分:1)

有趣的问题(我希望所有包装作者提前担心他们将如何创建基本的Wilkinson-Rogers公式表示法的扩展......)

这样的东西
formula=list(Y1~X1+X2+X3,Y2~X3+X4,Y3~X3+X4,Y4~X3),
   shared=list(Y1+Y2~X3,Y2+Y3~X4,Y3+Y4~X3)

或者上面第二个例子的类似内容?

formula组件给出了方程列表。

shared组件只列出哪些响应变量共享指定预测变量的相同参数。它显然可以映射到逻辑或二进制表,但(至少对我来说 - 这肯定是在旁观者的眼中)它更直接。我认为上面的map解决方案很尴尬(在这种情况下)变量(例如X3)在两个不同的关系集中共享。

我想一些直截了当的规则,比如“按参数出现在公式列表中的顺序启动值” - 在这种情况下

X1, X2, X3(1), X4, X3(2)

没关系,但是提供一个辅助函数可能会很好,它可以告诉用户给定formula / shared规范的系数向量的名称(即顺序)...

从一些个人经验来看,我会说在公式中嵌入更多的幻想会导致痛苦...例如,原始的nlme语法与单独指定的随机效果相比,更容易处理具有随机效果和固定效果的新lme4样式语法混合在同一公式中......

另一种选择(我不太喜欢)(

 formula=list(Y1~X1+X2+X3,Y2~X3+X4,Y3~X3[2]+X4,Y4~X3[2])

其中新参数由某种标记指示([1]是隐式的)。

另请注意@Andrie在聊天室中建议用于结构方程建模的接口(semlavaan包)可能是有用的参考。

答案 1 :(得分:0)

在你提出的两种方法中,第二种方法看起来更自然,但G符号对我来说毫无意义。

第一个更容易理解,但我对map参数有两个建议的调整。

  1. 它应该采用逻辑值而不是数字。

  2. 考虑默认包含每个响应变量的所有自变量。