爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14300|回复: 4

[源程序] 超简单的线性趋势估计,有人问才发

[复制链接]

新浪微博达人勋

发表于 2019-5-30 21:47:36 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
% 关键在于求解回归系数b,回归常数a,相关系数r
clear; clc

% 载入数据
load('data1d');
% x = [31, 32, 33, 30, 35, 30, 37, 38, 39, 40, 41, 40, 43, 44, 40, 46]
x = data1d;
clear data1d;

% 定义样本长度n和t
n = length(x);
t = 1 : length(x);

% 计算x和t各自的均值
x_mean = mean(x);
t_mean = mean(t);

% 计算回归系数b(气候变量x的趋势倾向,其符号和大小表示x的总体变化趋势)
b = (dot(x, t) - 1\n * sum(x) * sum(t)) \ (sum(t.^2) - 1\n * (sum(t)).^2); % dot函数用于算点乘
% 计算回归常数a
a = x_mean - b * t_mean;
% 计算相关系数r(表示气候变量x与时间变量t之间线性相关的密切程度)
r = sqrt((sum(t.^2) - 1\n * (sum(t)).^2) \ (sum(x.^2) - 1\n * (sum(x)).^2));

% 计算x序列的回归计算值序列,x_r表示x_regression
x_r = zeros(1, n);
for i = 1 : n
    x_r(i) = a + b * t(i);
end

figure
plot(t, x);
hold on;
plot(t, x_r);

评分

参与人数 1金钱 +1 收起 理由
KAY1997 + 1 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-5-31 09:53:29 | 显示全部楼层
代码有误,右除/写成了左除\

% 关键在于求解回归系数b,回归常数a,相关系数r
clear; clc

% 载入数据
load('data1d');
x = data1d;
clear data1d;

% 定义样本长度n和t
n = length(x);
t = 1 : length(x);

% 计算x和t各自的均值
x_mean = mean(x);
t_mean = mean(t);

% 计算回归系数b(气候变量x的趋势倾向,其符号和大小表示x的总体变化趋势)
b = (dot(x, t) - 1/n * sum(x) * sum(t)) / (sum(t.^2) - 1/n * (sum(t)).^2); % dot函数用于算点乘
% 计算回归常数a
a = x_mean - b * t_mean;
% 计算相关系数r(表示气候变量x与时间变量t之间线性相关的密切程度)
r = sqrt((sum(t.^2) - 1/n * (sum(t)).^2) / (sum(x.^2) - 1/n * (sum(x)).^2));

% 计算x序列的回归计算值序列,x_r表示x_regression
x_r = zeros(1, n);
for i = 1 : n
    x_r(i) = a + b * t(i);
end

figure
plot(t, x);
hold on;
plot(t, x_r);
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2021-11-5 16:42:36 | 显示全部楼层
matlab刚入门,一前算趋势都是用Excel直接就出来了,非常感谢分享,自己琢磨不知道还走多久会
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-5 18:39:56 | 显示全部楼层
这个相关系数的求解貌似有点问题,不是一个0-1之间的数。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-11-5 19:49:55 | 显示全部楼层
f1=zeros(n,1);
f2=zeros(n,1);
f3=zeros(n,1);
for j=1:n
f1(j)=(x(j)-mean(x))*(y(j)-mean(y));
f2(j)=(x(j)-mean(x)).^2;
f3(j)=(y(j)-mean(y)).^2;
end
r=sum(f1)/(sqrt(sum(f2))*sqrt(sum(f3)));
我是用这个公式算的。希望能相互交流。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表