ABAP-简单线性回归的案例
【摘要】 * 数据类型定义TYPES: BEGIN OF ty_data, x TYPE f, " 自变量 y TYPE f, " 因变量 END OF ty_data.DATA: lt_data TYPE TABLE OF ty_data, " 样本数据存储 ls_data LIKE LINE OF lt_data...
* 数据类型定义
TYPES: BEGIN OF ty_data,
x TYPE f, " 自变量
y TYPE f, " 因变量
END OF ty_data.
DATA: lt_data TYPE TABLE OF ty_data, " 样本数据存储
ls_data LIKE LINE OF lt_data.
* 统计计算变量
DATA: lv_x_sum TYPE f, " X总和
lv_y_sum TYPE f, " Y总和
lv_x_avg TYPE f, " X平均值
lv_y_avg TYPE f, " Y平均值
lv_n TYPE i, " 数据点数量
lv_covariance TYPE f, " 协方差
lv_variance TYPE f, " 方差
lv_b TYPE f, " 斜率
lv_a TYPE f. " 截距
* 示例数据:(X)与(Y)的对应关系
lt_data = VALUE #(
( x = 202501 y = 200 )
( x = 202502 y = 250 )
( x = 202503 y = 300 )
( x = 202504 y = 350 )
( x = 202505 y = 400 ) ).
* 获取数据点数量
lv_n = lines( lt_data ).
IF lv_n < 2.
WRITE: / '至少需要两个数据点'.
RETURN.
ENDIF.
* 计算X/Y总和
LOOP AT lt_data INTO ls_data.
lv_x_sum = lv_x_sum + ls_data-x.
lv_y_sum = lv_y_sum + ls_data-y.
ENDLOOP.
* 计算平均值
lv_x_avg = lv_x_sum / lv_n.
lv_y_avg = lv_y_sum / lv_n.
* 计算协方差和方差
LOOP AT lt_data INTO ls_data.
lv_covariance = lv_covariance + ( ls_data-x - lv_x_avg ) * ( ls_data-y - lv_y_avg ).
lv_variance = lv_variance + ( ls_data-x - lv_x_avg ) ** 2.
ENDLOOP.
* 计算回归系数
IF lv_variance = 0.
WRITE: / '错误:X方差为零,无法计算回归系数'.
RETURN.
ENDIF.
lv_b = lv_covariance / lv_variance. " 斜率 = 协方差 / X方差
lv_a = lv_y_avg - lv_b * lv_x_avg. " 截距 = Y平均值 - 斜率*X平均值
* 结果输出
WRITE: / '线性回归方程: Y = ', lv_a, ' + ', lv_b, ' * X'.
WRITE: / '-------------------------------------------'.
WRITE: / '统计指标:'.
WRITE: / |数据点数量: { lv_n }|.
WRITE: / |X平均值: { lv_x_avg NUMBER = ENVIRONMENT }|.
WRITE: / |Y平均值: { lv_y_avg NUMBER = ENVIRONMENT }|.
WRITE: / |协方差: { lv_covariance NUMBER = ENVIRONMENT }|.
WRITE: / |方差: { lv_variance NUMBER = ENVIRONMENT }|.
WRITE: / |斜率 (b): { lv_b NUMBER = ENVIRONMENT }|.
WRITE: / |截距 (a): { lv_a NUMBER = ENVIRONMENT }|.
* 可选:预测示例(预测X=202506时的Y值)
DATA(lv_prediction) = lv_a + lv_b * 202506.
WRITE: / '-------------------------------------------'.
WRITE: / '预测应用:当X=202506 时,Y预测值 =', |{ lv_prediction NUMBER = ENVIRONMENT }|.
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)