You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算含缺失值矩阵各列的正确标准差?(Stata/Mata)

问题:带缺失值的矩阵列标准差计算偏差问题

我通过以下Stata代码生成矩阵:

matrix A = (1,2\2,5\.,7\.,10\.,2\.,13)

需要计算该矩阵每一列的标准差(共两列)。尝试了如下Mata代码:

mata: st_matrix("testing", diagonal(sqrt(variance(st_matrix("A")))))
matrix list testing

但运行结果和MS Excel计算的标准差不一致,推测是缺失值或方差计算逻辑导致的问题,请问如何得到正确的列标准差?

解决方案

问题根源

  1. 自由度差异:Mata的variance()函数默认计算总体方差(除以观测数n),而Excel常用的STDEV.S函数计算的是样本方差(除以n-1),这是结果差异的核心原因。
  2. 缺失值处理:variance()会自动忽略缺失值,但需确保计算时使用有效观测数对应的自由度。

修正后的Mata代码

要得到和Excel一致的样本标准差,需在variance()中指定第2个参数为1(表示使用样本方差,自由度为n-1):

mata: 
    A = st_matrix("A")
    // 计算样本方差(自动忽略缺失值,自由度取n-1)
    col_vars = variance(A, 1)
    // 将标准差转为对角矩阵并输出到Stata矩阵
    st_matrix("col_stds", diagonal(sqrt(col_vars)))
end
matrix list col_stds

验证结果

针对示例矩阵:

  • 第一列有效观测值为[1,2],样本标准差为0.7071
  • 第二列有效观测值为[2,5,7,10,2,13],样本标准差为4.6904
    该结果与Excel的STDEV.S计算结果完全一致。

替代方案(无需Mata)

如果不想使用Mata,可将矩阵转为数据集后用Stata原生命令计算:

* 将矩阵转换为数据集
svmat A, names(col)
* 计算每列的样本标准差
summarize col1 col2, detail
* 提取标准差到矩阵
matrix col_stds = (r(sd_col1), r(sd_col2))'
matrix list col_stds
* 清理临时数据
drop col1 col2

内容的提问来源于stack exchange,提问作者Hosea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:09:59