我最近一直在玩R的回归功能/包。我想知道,有没有办法可以强制我的回归系数与特定值相加?我理解强制系数可能会造成不合适,但我仍然在寻找一种方法。
抱歉,我没有太多代码,因为我没有成功这样做,但我正在尝试这样的事情:
b
[,1]
[1,] 2
[2,] 6
[3,] 4
[4,] 7
[5,] 8
A
[,1] [,2] [,3]
[1,] 2 3 4
[2,] 7 5 5
[3,] 5 5 3
[4,] 7 8 9
[5,] 8 9 9
我想要一个函数来使用A
为b创建一个模型constrainedcoefs< - function(A,b,coefsum){
适合< - nnls(A,b)
理想情况下
sum(coef(fit)) = coefsum
有没有人知道强制coef(fit)之和为某种用户定义值的方法?或具有此功能的包。我只找到了允许我定义上限和下限的包以及关于获得coef(fit)= 1的方法的一些讨论。
答案 0 :(得分:2)
如果您有输入数据,如
dd <- structure(list(b = c(2L, 6L, 4L, 7L, 8L), A1 = c(2L, 7L, 5L,
7L, 8L), A2 = c(3L, 5L, 5L, 8L, 9L), A3 = c(4L, 5L, 3L, 9L, 9L
)), .Names = c("b", "A1", "A2", "A3"), class = "data.frame", row.names = c(NA,
-5L))
您可以尝试将nls
与
nls(b~a1*A1+a2*A2+(1-a1-a2)*A3, dd,
lower=0, upper=1,algorithm="port",
start=c(a1=.3, a2=.3))
这里我们要求它们总和为1,所以我们实际上只有两个自由参数。一旦我们知道a1
和a2
,我们就可以找出a3
。然后我们使用“端口”算法,它允许我们指定上限和下限,以确保值不低于0或高于1.我得到的数据
Nonlinear regression model
model: b ~ a1 * A1 + a2 * A2 + (1 - a1 - a2) * A3
data: dd
a1 a2
0.7647 0.0000
residual sum-of-squares: 1.059
所以参数是(0.7647,0.0000,0.2353)
当然,这种类型的回归似乎很不寻常,所以要非常小心你根据模型拟合做出的推论。