R 我可以为nls()或nnls()之类的回归系数创建条件吗?

R 我可以为nls()或nnls()之类的回归系数创建条件吗?,r,regression,linear-regression,R,Regression,Linear Regression,我最近一直在玩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

我最近一直在玩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
我想要一个函数来使用


constrainedcoefs如果您有如下输入数据

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))
这里我们要求它们的和为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)


当然,这种类型的回归似乎很不寻常,所以要非常小心根据模型拟合做出的推断。

谢谢!我想这和我想要的非常接近。nls()中的行部分a1*a1+a2*a2+(1-a1-a2)*A3非常特定于只有三列的dd。如果我想给nls()提供一个任意大小的dd,需要任意数量的系数,那该怎么办?然后你需要动态地构建你的公式和系数初始化向量。
nls(b~a1*A1+a2*A2+(1-a1-a2)*A3, dd, 
    lower=0, upper=1,algorithm="port", 
    start=c(a1=.3, a2=.3))
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