R中是否有二次多元多项式回归函数?若无,MATLAB中如何实现?
二次多元多项式回归在R和MATLAB中的实现方式
在R语言中的实现
R并没有专门针对“二次多元多项式回归”的专属内置函数,但其实我们可以借助基础的线性回归函数lm()轻松实现——因为二次多元多项式回归本质是线性回归的扩展,只需要把二次项和变量间的交互项纳入回归公式即可。
有两种常用的写法:
方法一:利用公式展开式
如果你的自变量是x1、x2,因变量是y,直接用公式(x1 + x2)^2就行,R会自动将其展开为包含一次项、二次项和交互项的完整多项式形式:# 假设数据存储在数据框df中 model <- lm(y ~ (x1 + x2)^2, data = df) summary(model)这个公式等价于手动写
y ~ x1 + x2 + I(x1^2) + I(x2^2) + x1:x2,其中I()用来表示数学上的平方运算,避免被R的公式解析规则误解。方法二:使用
poly()函数
如果你想更灵活地控制多项式项,可以用poly()生成指定次数的多项式特征,记得设置raw=TRUE来使用原始多项式(而非正交多项式):model <- lm(y ~ poly(x1, 2, raw=TRUE) + poly(x2, 2, raw=TRUE) + x1:x2, data = df) summary(model)
在MATLAB中的实现
MATLAB提供了几种便捷的方式来实现二次多元多项式回归:
方法一:使用
fitlm(推荐,语法直观)fitlm是MATLAB中用于线性模型拟合的高级函数,支持直接通过公式指定多项式项。假设你有一个包含y、x1、x2的表格tbl:% 创建拟合模型 mdl = fitlm(tbl, 'y ~ x1 + x2 + x1^2 + x2^2 + x1*x2'); % 查看模型结果 disp(mdl);如果你想简化写法,也可以用类似R的公式展开:
'y ~ (x1 + x2)^2',MATLAB同样会自动展开所有必要的项。方法二:使用
regress函数(更底层,可控性强)
如果你习惯手动构造设计矩阵,可以用regress函数。步骤如下:% 假设x1、x2是列向量,y是因变量列向量 n = length(y); % 构造设计矩阵:常数项 + 一次项 + 二次项 + 交互项 X = [ones(n,1), x1, x2, x1.^2, x2.^2, x1.*x2]; % 执行回归 b = regress(y, X); % 输出系数,b(1)是截距,b(2)-b(3)是一次项系数,b(4)-b(5)是二次项系数,b(6)是交互项系数 disp('回归系数:'); disp(b);
内容的提问来源于stack exchange,提问作者Shashank Shekhar
相关产品推荐
相关产品推荐

