首页 > 解决方案 > 是否可以使用 fitlm 为 Matlab 中的一个特定变量在多元线性回归中设置一个固定点?

问题描述

我正在使用函数 fitlm 在 Matlab 中进行多元线性回归,该函数看起来基本上像这样:

model = fitlm(data,'Y ~ x1*x2 + x1*x3 + x4','RobustOpts','off','Weights',w)

预测变量是分类的和双精度的。现在我知道如果 x3 == 0,那么 Y == 0。x3 和 Y 都是双倍的。是否可以将此信息添加到回归模型中?如果是,如何?

谢谢。

标签: matlablinear-regression

解决方案


不可能将你知道的当 x3=0 时 y=0 的知识合并到线性模型中,因为它与线性模型不一致。您可以通过制作非线性模型并对其进行拟合来整合您的知识,但您将无法使用 fitlm() 来拟合非线性模型。非线性模型可以用下面的函数来完成,其中p是我们要估计的参数向量:

%function declaration: predictive model 
function f = yPred(p)
global x1, x2, x3
if x3=0
    f=0;
else
    f=p(1)*x1*x2 + p(2)*x1*x3 + p(3)*x4+ p(4);
end
end

在初始化已知数据(y、x1、x2、x3 和 w)后,定义一个误差函数,也称为目标函数。一个常见的误差函数是预测 y 值和实际 y 值之间的平方误差的加权和。

% objective function = weighted sum squared error
objective = @(p) sum(w.*(y - yPred(p)).^2)); 

然后使用fmincon()(参见 Matlab 文档)来估计未知的 p。fmincon() 找到pEst最小化目标函数的值。您需要提供fmincon()的初始猜测pEst

pInit=[1 1 1 1];                          %initial guess
[pEst, wSSE] = fmincon(objective,pInit);  %pEst=estimate of p
                          %wSSE=value of the objective function at the minimum

在使用 fmincon() 尝试对 pInit 进行各种初始猜测时,这是一个好主意,以防误差表面具有不是全局最小值的局部最小值。


推荐阅读