在Maxima中通过gnuplot绘制线性回归与残差图
Maxima实现线性回归、回归线绘制及残差分析
以下是针对需求的完整解决方案,所有代码可直接在Maxima中运行,适配TeXmacs的使用场景:
1. 定义你的坐标数据
首先将表格数据定义为Maxima列表,每个元素是[x, y]形式的坐标对:
data: [[1, 2], [2, 3], [3, 5], [4, 7], [5, 8]]; // 替换成你的实际数据
2. 计算线性回归参数与R²值
加载Maxima内置统计模块,直接调用函数计算回归方程参数和拟合优度R²:
load(stats); // 加载统计工具包 // 计算线性回归系数,返回[a, b],对应回归方程 f(x) = a + b*x reg_coeffs: linear_regression(data); a: reg_coeffs[1]; // 截距项 b: reg_coeffs[2]; // 斜率项 // 计算相关系数r,再得到R²值 r: correlation_coefficient(data); r_squared: r^2;
运行后,a和b就是回归方程的参数,r_squared是拟合优度值。
3. 绘制原始数据+线性回归线
利用Maxima的plot2d同时绘制离散数据点和回归线,无需手动编写gnuplot命令:
// 定义回归函数 f(x) := a + b*x; // 自动获取数据的x范围 min_x: apply(min, map(first, data)); max_x: apply(max, map(first, data)); // 绘图:红色点是原始数据,蓝色线是回归线 plot2d( [[discrete, data], f(x)], [x, min_x - 0.5, max_x + 0.5], // x范围扩展一点,让图更美观 title="原始数据与线性回归线", pointsize=2, color=[red, blue], legend=["原始数据", "回归线"] );
4. 绘制残差图
残差是实际y值与回归预测y值的差值,以下代码生成残差分布并绘图:
// 计算每个数据点的残差 residuals: map(lambda([p], p[2] - f(p[1])), data); // 组合成[x, 残差]的坐标列表 residual_data: map(lambda([p, r], [p[1], r]), data, residuals); // 绘图:绿色点是残差,黑色水平线为残差0基准线 plot2d( [[discrete, residual_data], 0], [x, min_x - 0.5, max_x + 0.5], title="残差图", pointsize=2, color=[green, black], legend=["残差", "残差基准线"], ylabel="残差值" );
关键说明
- Maxima的
plot2d会自动调用gnuplot渲染图形,无需手动适配gnuplot语法,直接用Maxima的语法即可实现混合绘图。 - 所有计算过程依赖Maxima内置的统计函数,无需手动推导回归公式,适合数学基础薄弱的场景。
内容的提问来源于stack exchange,提问作者dotnetCarpenter
相关产品推荐
相关产品推荐

