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

Spa*_*man 8 r formulas

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

Y1 ~ X1 + X2 + X3
Y2 ~ X3 + X4
Run Code Online (Sandbox Code Playgroud)

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

Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b3 X3 + b4 X4
Run Code Online (Sandbox Code Playgroud)

这是一个带有四个'b'参数的模型,或者

Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b4 X3 + b5 X4
Run Code Online (Sandbox Code Playgroud)

具有五个参数的模型.

两种可能性:

  • 在一个公式中指定所有解释变量,并提供矩阵映射对解释的响应.在这种情况下

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)))
Run Code Online (Sandbox Code Playgroud)

将是第二个.显然,需要对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))
Run Code Online (Sandbox Code Playgroud)

将是一个模型,其中:

Y1 = b1 X1 + b2 X2 + b3 X3
Y2 = b3 X3 + b4 X4
Y3 = b5 X3 + b4 X4
Y4 = b5 X3
Run Code Online (Sandbox Code Playgroud)

其中X3有两个独立的参数(G(X3,1)和G(X3,3)).如何处理一个引用不同解释变量的组是一个悬而未决的问题 - 假设该模型具有Y4~G(X3,2)- 似乎意味着不同解释变量之间的共享参数,因为那里有一个G(X4,2).

这种表示法似乎更容易让用户理解,但是如果你还必须指定起始值,则起始值的向量与它们对应的参数之间的映射不再明显.我怀疑在内部我们必须从G()符号计算映射矩阵.

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

Ben*_*ker 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)
Run Code Online (Sandbox Code Playgroud)

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

formula组件给出了方程列表。

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

我猜想一些简单的规则,例如“按照参数在公式列表中出现的顺序的起始值”——在这种情况下

X1, X2, X3(1), X4, X3(2)
Run Code Online (Sandbox Code Playgroud)

没问题,但最好提供一个辅助函数,告诉用户给定formula/shared规范的系数向量的名称(即顺序)......

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

另一种选择(我也不喜欢)是

 formula=list(Y1~X1+X2+X3,Y2~X3+X4,Y3~X3[2]+X4,Y4~X3[2])
Run Code Online (Sandbox Code Playgroud)

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

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