我希望尽量减少使用普通最小二乘法与约束,所有系数之和必须等于5.我怎样才能做到这一点R中的简单线性函数Y = x1 + x2 + x3 + x4 + x5
所有参数的约束?我所见过的所有软件包似乎都允许对各个系数进行约束,但我无法弄清楚如何设置影响系数的单个约束。我没有被绑定到OLS。如果这需要迭代方法,那也没有问题。最小化与R中
最小化与R中
回答
基本的数学如下:我们先从
mu = a0 + a1*x1 + a2*x2 + a3*x3 + a4*x4
,我们想找到a0
- a4
到mu
和我们的响应变量之间y
减少SSQ。
如果我们更换(说)C-a1-a2-a3
最后一个参数(比如a4
)兑现了约束,我们结束了一个新的线性方程组
mu = a0 + a1*x1 + a2*x2 + a3*x3 + (C-a1-a2-a3)*x4
= a0 + a1*(x1-x4) + a2*(x2-x4) + a3*(x3-x4) + C*x4
的(注意,a4
已经消失了...... !)
像这样(未经)实现它在R.
原始数据帧:
d <- data.frame(y=runif(20), x1=runif(20), x2=runif(20), x3=runif(20), x4=runif(20))
创建转换后的版本,其中所有,但最后一列有最后一列“扫地出门”,例如
x1 -> x1-x4; x2 -> x2-x4; ...
dtrans <- data.frame(y=d$y, sweep(d[,2:4], 1, d[,5], "-"), x4=d$x4)
重命名为
tx1
,tx2
,...尽量避免混淆:names(dtrans)[2:4] <- paste("t",names(dtrans[2:4]),sep="")
加总系数约束:
constr <- 5
现在安装与模型偏移:
lm(y~tx1+tx2+tx3,offset=constr*x4,data=dtrans)
使这个更一般化并不难。
这需要比简单地指定一个约束至罐装优化方案多一点思考和操作。另一方面,(1)它可以很容易地包装在一个方便的功能; (2)这是多比调用通用的优化更有效,因为这个问题仍然是线性的(实际上一个尺寸比你开始与一个小)。甚至可以用大数据完成(例如biglm
)。 (实际上,它发生,我认为如果这是一个线性模型,你甚至不需要偏移,虽然使用偏移意味着你不必计算a0=intercept-C*x4
完成后。)
我对你的第一句话有点困惑。你指的约束'x4'等于'5-x1-x2-x3';我正在考虑限制*系数*,而不是变量本身。我将如何设置约束'a4 = 5-a1-a2-a3'? – eykanal 2012-04-04 11:31:00
抱歉,错字(现在已修复) - 但其余部分应该是正确的,我认为 – 2012-04-04 12:22:59
我认为接下来的方程式可能还需要进行修正......不应该是'y = a0 + a1 *(x1 x4)+ a2 *(x2-x4)+ a3 *(x3-x4)+ C * x4是'y = a0 +(a1-a4)* x1 + ... +(a3-a4)* x3' ? – eykanal 2012-04-04 12:41:03
既然你说你是开放给其他的办法,这也可以在二次规划的角度来解决(QP):
最小化二次目标:误差平方的总和,
受线性约束:你的权重之和必须为5
假设X是n乘5矩阵,Y是长度(n)的矢量,这将解决您的最佳权重:
library(limSolve)
lsei(A = X,
B = Y,
E = matrix(1, nrow = 1, ncol = 5),
F = 5)
- 1. [R优化最小值
- 2. R:查找与最小值
- 3. R:等渗回归最小化
- 4. 使用nlminb R函数最小化
- 5. 与最小化的动画
- 6. “最小化所有”与NSBorderlessWindowMask
- 7. 优化与R中
- 8. 在android中最大化和最小化
- 9. R - 从最大到最小
- 10. 最小化/最大化div
- 11. [R融化小类
- 12. R中的优化(最大化)
- 13. R中的多元非线性最小化
- 14. googleVis最小化R标记中的文本和表格
- 15. 找到最小化R中差异总和的恒定线
- 16. 删除最小化和最大化按钮与glfw
- 17. 最小化Javascript
- 18. 查找最大与R中
- 19. 最小化与钨数学参数
- 20. L1范数最小化与Gurobi
- 21. 向量化与R中的并行化
- 22. 找到与R中每行最小值对应的列名称
- 23. 最小化QTextEdit在QTreeWidgetItem中的大小
- 24. 最小化SQLite库大小
- 25. 最小化ExtJS的大小
- 26. 优化TSQL与R
- 27. Python中的最小 - 最大规范化
- 28. R:返回最小正数
- 29. 加权最小二乘 - R
- 30. 最小化最大成本
如果系数必须总和为5,那么你可以删除最后一个参数并将其设置为'5-sum(p [1:4])'......你可以设想自己做微积分,表达式... – 2012-04-03 19:48:29
@BenBolker谢谢你的建议。这将如何工作?如果我将方程式表示为'Y〜x1 + x2 + x3 + x4 + x5',那么我如何向最小化函数表明我想保留'x5'的参数设置为'5-sum(x [1: 4])'?我不能只求解'Y〜x1 + x2 + x3 + x4',因为(在我看来)是一个完全不同的优化问题。 – eykanal 2012-04-03 19:55:45
目前我认为这个问题是不明确的。假设(为了简单起见)'n = 3'和'sum(p)= C'。原始的线性问题(没有约束)是不适当的,因为如果x是正数,我们可以通过将系数设置为大负数来使'a1 * x1 + a2 * x2 + a3 * x3'尽可能小,反之亦然,对(a1 + a2 + a3 = C)施加约束将其转化为较低维度,但仍存在不适合的问题,即最小化a1 *(x1-x3)+ a2 *(x2-x3)+ C * x3 )'。小心澄清问题......? (也许你的意思是你想要拟合线性*最小二乘*问题) – 2012-04-03 20:05:25