matlab - 是否可以使用 fitlm 为 Matlab 中的一个特定变量在多元线性回归中设置一个固定点?
问题描述
我正在使用函数 fitlm 在 Matlab 中进行多元线性回归,该函数看起来基本上像这样:
model = fitlm(data,'Y ~ x1*x2 + x1*x3 + x4','RobustOpts','off','Weights',w)
预测变量是分类的和双精度的。现在我知道如果 x3 == 0,那么 Y == 0。x3 和 Y 都是双倍的。是否可以将此信息添加到回归模型中?如果是,如何?
谢谢。
解决方案
不可能将你知道的当 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 进行各种初始猜测时,这是一个好主意,以防误差表面具有不是全局最小值的局部最小值。
推荐阅读
- python-3.x - 如何在 Python 中的不同列表中添加大量列表项
- ruby-on-rails - rails 验证检查的顺序/优先级
- mobile - 水平嵌套列表视图
- c# - .NET Core 创建没有作业的进程
- python - 从字符串数组替换 s 子字符串 - Python
- tensorflow - 如何在 Tensorflow 中实现最大平均差异(MMD)?
- html - 在 html 输入字段中使用什么模式来验证法国数字格式?
- javascript - 将图像上传到 Web 服务器的最佳实践
- anylogic - 如何匹配轮班边缘的资源可用性
- c++ - Sorting ques how to access the private vector values