matlab正态分布卡方检验
时间: 2025-05-16 12:01:13 浏览: 37
### MATLAB中实现正态分布数据的卡方拟合优度检验
在MATLAB中进行正态分布的卡方拟合优度检验,可以通过以下几个方面来完成。首先需要定义分组区间并计算理论频率和观测频率之间的差异。以下是具体方法:
#### 数据准备
为了执行卡方拟合优度检验,需先获取样本数据,并通过极大似然估计法得到均值 \( \mu \) 和标准差 \( \sigma \)[^4]。
```matlab
% 假设我们有一组随机生成的数据作为示例
data = normrnd(5, 2, [1, 100]); % 随机生成一组服从 N(5, 2^2) 的数据
n = length(data); % 样本数量
```
#### 参数估计
利用 `mean` 和 `std` 函数分别求得样本均值和标准差作为正态分布参数的最大似然估计。
```matlab
mu_hat = mean(data);
sigma_hat = std(data);
fprintf('Sample Mean (mu): %.4f\n', mu_hat);
fprintf('Sample Std Deviation (sigma): %.4f\n', sigma_hat);
```
#### 定义分箱区间
将数据划分为若干个区间(bin),以便于后续比较观察频数与期望频数。
```matlab
num_bins = 10; % 设定分箱数目
edges = linspace(min(data), max(data), num_bins + 1); % 边界向量
observed_freq = histcounts(data, edges); % 计算各区间内的观察频数
```
#### 理论概率密度函数
根据所估计的参数构建对应的累积分布函数(CDF),进而得出每个区间的理论概率[^3]。
```matlab
cdf_values = normcdf(edges, mu_hat, sigma_hat); % 使用 CDF 获取边界处的概率值
expected_prob = diff(cdf_values); % 各区间上的理论概率
expected_freq = n * expected_prob; % 将概率转换成预期频数
```
#### 卡方统计量计算
按照公式逐项累加偏差平方除以其对应期望频数的结果,最终形成卡方统计量[^1]。
```matlab
chi_square_statistic = sum(((observed_freq - expected_freq).^2 ./ expected_freq));
degrees_of_freedom = num_bins - 1 - 2; % 自由度等于分箱数减去待估参数的数量再减一
p_value = 1 - chi2cdf(chi_square_statistic, degrees_of_freedom); % 查找 p-value
```
#### 输出结果解释
当所得 p 值大于显著水平(如 0.05)时,则接受原假设 H₀ ,表明该数据集可以视为来自指定的正态分布;反之则拒绝原假设[^2]。
```matlab
if p_value >= 0.05
fprintf('The data follows the specified normal distribution with a p-value of %.4f.\n', p_value);
else
fprintf('The data does not follow the specified normal distribution with a p-value of %.4f.\n', p_value);
end
```
以上就是在MATLAB环境下实施正态分布卡方拟合优度检验的过程概述。
阅读全文
相关推荐


















