constrOptimを使用して、線形重回帰の二乗誤差の合計を最適化しようとしています。メインの方程式はD = Beta1*Xa+Beta2*Xb+Beta3*Xc+Beta4*Xd
で、インポートされた.csvファイルのD,Xa,Xb,Xc,Xd
で、Beta
は見つかった係数で、2次誤差を最小にする必要があります。constroptim関数の結果が正しくない
これまでのところ、私はDS、第Xa、Xbを、Xcの、XDは、objfunctionを作成した行列 'C' とベクトル 'd' を作成 function(Beta1,Beta2,Beta3,Beta4)'sum(E²)'=(sum(D) - sum(Beta1*Xa+Beta2*Xb+Beta3*Xc+Beta4*Xd))^2)
=各列を名前、Rにfile.csvになりインポートベータ版を< = 0に制限する制約を設定します。実行可能な領域を見つける方法はわかりませんが、関数の初期値を使用しています。
> Tabela= read.table("Simulacao.csv", header=T, sep= ";")
> Tabela
D A B C D.1
1 -1 1 -1 0 0
2 4 0 0 1 -1
3 4 1 0 -1 0
4 0 0 1 0 -1
5 -2 1 0 0 -1
> Ds= Tabela[,1]
> Xa= Tabela[,2]
> Xb= Tabela[,3]
> Xc= Tabela[,4]
> Xd= Tabela[,5]
> simulaf= function(x1,x2,x3,x4) {
+ Ds= Tabela[,1]
+ Xa= Tabela[,2]
+ Xb= Tabela[,3]
+ Xc= Tabela[,4]
+ Xd= Tabela[,5]
+ J=sum(Ds)
+ H=sum(x1*Xa+x2*Xb+x3*Xc+x4*Xd)
+ sx=(J-H)^2
+ return(sx)
+ }
> s= function(x) {simulaf(x[1],x[2],x[3],x[4])}
> d= c(0,0,0,0)
> C= matrix(c(-1,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,-1),nrow=4,ncol=4,byrow=T)
> constrOptim(c(-1,-1,-1,-1),s,NULL,C,d)
$par
[1] -0.2608199 -0.8981110 -1.1095961 -1.9274866
私が期待した結果は次のようになります。:ここで
がコードである
$par
[1] -0.125 0 -0.5 -0.875
これを研究した後、私の結論は私が悪いの初期値を使用していますので、それができるということです、パラメータ化の問題(それが必要な理由を理解していない)または単にそれが正しくプログラムされていない場合
これを修正するには何が必要ですか?