我们正在尝试为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()
表示法计算映射矩阵。
这可能有更好的方法,所以我的问题是......有人知道吗?
答案 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在聊天室中建议用于结构方程建模的接口(sem
,lavaan
包)可能是有用的参考。
答案 1 :(得分:0)
在你提出的两种方法中,第二种方法看起来更自然,但G
符号对我来说毫无意义。
第一个更容易理解,但我对map
参数有两个建议的调整。
它应该采用逻辑值而不是数字。
考虑默认包含每个响应变量的所有自变量。