来自constroptim功能的错误结果

时间:2017-09-11 01:42:53

标签: r optimization

我尝试使用constrOptim来优化线性多元回归中的平方误差之和。主要等式应为D = Beta1*Xa+Beta2*Xb+Beta3*Xc+Beta4*Xd,其中D,Xa,Xb,Xc,Xd来自导入的.csv文件,Beta s是我想要找到的系数,最小化二次误差。

到目前为止,我将file.csv导入R,将每列命名为Ds,Xa,Xb,Xc,Xd,创建了objfunction = function(Beta1,Beta2,Beta3,Beta4)'sum(E²)'=(sum(D) - sum(Beta1*Xa+Beta2*Xb+Beta3*Xc+Beta4*Xd))^2)

创建了矩阵' C'和矢量' d'配置应将Beta限制为< = 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

在对此进行研究之后,我的结论是,可能是因为我使用了错误的初始值,参数化问题(不理解为什么需要它)或者它是否仅仅是我编程的它不正确。

我需要做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:1)

误差平方和的公式是

sum((y - yhat)^2)

(sum(y) - sum(yhat))^2

其中yhat是预测值。

另外,如果你唯一的限制是估计的测试版应该是负面的(这有点奇怪,通常你希望它们是积极的但是没关系),那么你就不需要constrOptim。常规optim(method="L-BFGS-B")nlminb将适用于所谓的框限制。

相关问题