8

我们正在尝试为 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()符号计算映射矩阵。

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

4

2 回答 2

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 来自聊天室的建议,即为结构方程建模 ( sem,lavaan包) 设计的界面可能是有用的参考。

于 2012-09-25T15:20:14.357 回答
0

在您提出的两种方法中,第二种具有几个公式的想法看起来更自然,但G符号对我来说毫无意义。

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

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

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

于 2012-09-25T14:16:34.040 回答