我希望儘量減少使用普通最小二乘法與約束,所有係數之和必須等於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