统计基础 #

一、描述性统计 #

1.1 集中趋势 #

matlab
data = [12 15 18 20 22 25 28 30 32 35];

% 均值
mean_val = mean(data);          % 23.7

% 中位数
median_val = median(data);      % 23.5

% 众数
mode_val = mode(data);          % 12(无重复时返回最小值)

% 截尾均值(去除极端值)
trim_mean = trimmean(data, 10); % 去除10%的极端值

% 几何平均
geo_mean = geomean(data);

% 调和平均
harm_mean = harmmean(data);

1.2 离散程度 #

matlab
data = [12 15 18 20 22 25 28 30 32 35];

% 方差
var_val = var(data);            % 样本方差
var_val = var(data, 1);         % 总体方差

% 标准差
std_val = std(data);            % 样本标准差
std_val = std(data, 1);         % 总体标准差

% 极差
range_val = range(data);        % max - min = 23

% 四分位距
iqr_val = iqr(data);            % Q3 - Q1

% 变异系数
cv = std(data) / mean(data) * 100;

1.3 分位数 #

matlab
data = randn(1000, 1);

% 四分位数
q = quantile(data, [0.25 0.5 0.75]);

% 百分位数
p = prctile(data, [5 25 50 75 95]);

% 分位数
q25 = quantile(data, 0.25);

1.4 多维统计 #

matlab
% 二维矩阵
A = randn(100, 5);

% 按列计算
col_mean = mean(A);             % 每列均值
col_std = std(A);               % 每列标准差

% 按行计算
row_mean = mean(A, 2);          % 每行均值

% 全部计算
all_mean = mean(A(:));          % 所有元素均值
all_std = std(A(:));            % 所有元素标准差

二、相关分析 #

2.1 相关系数 #

matlab
x = randn(100, 1);
y = x + 0.5*randn(100, 1);

% 皮尔逊相关系数
r = corrcoef(x, y);
% r = [1.00  0.89
%      0.89  1.00]

% 只取相关系数
r_xy = r(1, 2);

% 相关系数矩阵
A = randn(100, 3);
R = corrcoef(A);

2.2 协方差 #

matlab
x = randn(100, 1);
y = x + 0.5*randn(100, 1);

% 协方差矩阵
C = cov(x, y);

% 协方差
cov_xy = C(1, 2);

2.3 Spearman相关 #

matlab
x = randn(100, 1);
y = x.^2 + 0.1*randn(100, 1);

% Spearman秩相关
rho = corr(x, y, 'Type', 'Spearman');

% Kendall秩相关
tau = corr(x, y, 'Type', 'Kendall');

三、分布函数 #

3.1 正态分布 #

matlab
% 概率密度函数
x = -4:0.01:4;
y = normpdf(x, 0, 1);    % 标准正态分布
plot(x, y);

% 累积分布函数
y = normcdf(x, 0, 1);
plot(x, y);

% 逆累积分布函数
p = 0.95;
x = norminv(p, 0, 1);     % 1.6449

% 随机数
r = normrnd(0, 1, [100, 1]);  % 100个标准正态随机数

3.2 其他分布 #

matlab
% t分布
x = -4:0.01:4;
y = tpdf(x, 10);          % 自由度为10

% 卡方分布
x = 0:0.01:20;
y = chi2pdf(x, 5);        % 自由度为5

% F分布
x = 0:0.01:5;
y = fpdf(x, 5, 10);       % 自由度5和10

% 均匀分布
r = unifrnd(0, 1, [100, 1]);

% 指数分布
r = exprnd(1, [100, 1]);  % 参数λ=1

四、假设检验 #

4.1 t检验 #

matlab
% 单样本t检验
data = randn(100, 1) + 0.5;
[h, p] = ttest(data, 0);  % 检验均值是否为0

% 双样本t检验
group1 = randn(50, 1);
group2 = randn(50, 1) + 0.5;
[h, p] = ttest2(group1, group2);

% 配对t检验
before = randn(30, 1);
after = before + 0.3 + 0.1*randn(30, 1);
[h, p] = ttest(after - before, 0);

4.2 正态性检验 #

matlab
data = randn(100, 1);

% Shapiro-Wilk检验
[h, p] = swtest(data);

% Jarque-Bera检验
[h, p] = jbtest(data);

% Kolmogorov-Smirnov检验
[h, p] = kstest(data);

4.3 方差分析 #

matlab
% 单因素方差分析
group1 = randn(30, 1);
group2 = randn(30, 1) + 0.5;
group3 = randn(30, 1) + 1;
[p, tbl, stats] = anova1([group1, group2, group3]);

% 双因素方差分析
% 使用anova2函数

五、回归分析 #

5.1 线性回归 #

matlab
% 数据
x = (1:100)';
y = 2*x + 3 + 10*randn(100, 1);

% 最小二乘拟合
p = polyfit(x, y, 1);     % 一次多项式
y_fit = polyval(p, x);

% 使用regress
X = [ones(size(x)), x];
[b, bint, r, rint, stats] = regress(y, X);

% 绘图
scatter(x, y);
hold on;
plot(x, y_fit, 'r-', 'LineWidth', 2);
hold off;

5.2 多元回归 #

matlab
% 数据
X = randn(100, 3);
y = 2*X(:,1) + 3*X(:,2) - X(:,3) + randn(100, 1);

% 回归
X_with_intercept = [ones(100,1), X];
[b, bint, r, rint, stats] = regress(y, X_with_intercept);

% 使用fitlm
mdl = fitlm(X, y);
disp(mdl);

六、实用示例 #

6.1 数据摘要 #

matlab
function summary = data_summary(data)
% DATA_SUMMARY 生成数据摘要
    
    summary.count = length(data);
    summary.mean = mean(data);
    summary.std = std(data);
    summary.min = min(data);
    summary.q25 = quantile(data, 0.25);
    summary.median = median(data);
    summary.q75 = quantile(data, 0.75);
    summary.max = max(data);
    summary.iqr = summary.q75 - summary.q25;
    summary.skewness = skewness(data);
    summary.kurtosis = kurtosis(data);
    
    % 打印摘要
    fprintf('数据摘要\n');
    fprintf('================\n');
    fprintf('样本数: %d\n', summary.count);
    fprintf('均值: %.4f\n', summary.mean);
    fprintf('标准差: %.4f\n', summary.std);
    fprintf('最小值: %.4f\n', summary.min);
    fprintf('Q1: %.4f\n', summary.q25);
    fprintf('中位数: %.4f\n', summary.median);
    fprintf('Q3: %.4f\n', summary.q75);
    fprintf('最大值: %.4f\n', summary.max);
end

6.2 相关矩阵可视化 #

matlab
function plot_correlation_matrix(data, labels)
% PLOT_CORRELATION_MATRIX 绘制相关矩阵热力图
    
    R = corrcoef(data);
    
    figure;
    imagesc(R);
    colormap('parula');
    colorbar;
    
    % 设置坐标轴
    set(gca, 'XTick', 1:length(labels), 'YTick', 1:length(labels));
    set(gca, 'XTickLabel', labels, 'YTickLabel', labels);
    
    % 添加数值
    for i = 1:size(R, 1)
        for j = 1:size(R, 2)
            text(j, i, sprintf('%.2f', R(i,j)), ...
                 'HorizontalAlignment', 'center', ...
                 'Color', 'w');
        end
    end
    
    title('相关系数矩阵');
end

七、总结 #

本章学习了:

  1. 描述性统计:均值、中位数、方差、标准差
  2. 相关分析:相关系数、协方差
  3. 分布函数:正态分布、t分布等
  4. 假设检验:t检验、正态性检验
  5. 回归分析:线性回归、多元回归

下一章将学习数据导入导出。

最后更新:2026-03-27