7. 统计分析
统计分析是从数据里得到结论的过程:描述数据、做推断、检验假设、建模、预测。
7.1 统计分析的基本概念
7.1.1 数据类型
- 定量数据:可量化的数据,如年龄、收入等,进一步分为离散数据和连续数据。
- 定性数据:描述性质的数据,如性别、颜色等,进一步分为类别数据和有序数据。
7.1.2 描述性统计
描述性统计用于总结和描述数据集的基本特征。常见的描述性统计量包括:
均值(平均数):数据的算术平均值。
中位数:数据的中间值,将数据分成两半。
众数:数据中出现频率最高的值。
方差和标准差:度量数据的离散程度。
示例:
goimport ( "fmt" "math" ) func mean(data []float64) float64 { sum := 0.0 for _, v := range data { sum += v } return sum / float64(len(data)) } func stdDev(data []float64) float64 { m := mean(data) sum := 0.0 for _, v := range data { sum += (v - m) * (v - m) } return math.Sqrt(sum / float64(len(data))) } func main() { data := []float64{1, 2, 3, 4, 5} fmt.Println("均值:", mean(data)) fmt.Println("标准差:", stdDev(data)) }
7.2 概率分布
7.2.1 正态分布
正态分布(高斯分布)是最常见的连续概率分布,特征是钟形曲线。其参数为均值和标准差。
- 示例(使用Go的
gonum库):goimport ( "fmt" "gonum.org/v1/gonum/stat/distuv" ) func main() { normal := distuv.Normal{ Mu: 0, // 均值 Sigma: 1, // 标准差 } x := 1.0 fmt.Println("正态分布概率密度:", normal.Prob(x)) // 输出: 正态分布概率密度: 0.24197072451914337 }
7.2.2 其他分布
- 泊松分布:用于描述在固定时间或空间内发生的事件数。
- 指数分布:用于描述事件发生的时间间隔。
- 均匀分布:每个值出现的概率相等。
7.3 假设检验
7.3.1 单样本t检验
用于检验样本均值是否与已知的总体均值不同。常用于比较实验组和对照组的均值。
- 示例:go
import ( "fmt" "gonum.org/v1/gonum/stat" ) func main() { data := []float64{5.1, 5.2, 5.3, 5.4, 5.5} mean := stat.Mean(data, nil) sd := stat.StdDev(data, nil) fmt.Println("样本均值:", mean) fmt.Println("样本标准差:", sd) }
7.3.2 卡方检验
用于检验分类数据的分布是否与预期分布相符。常用于独立性检验和适合度检验。
- 示例(卡方检验需要统计库支持,Go语言库可能需要额外支持):go
// 需要使用第三方库
7.3.3 ANOVA(方差分析)
用于比较多个样本均值是否存在显著差异。常用于实验数据分析。
- 示例:go
// ANOVA 检验需要使用第三方库
7.4 回归分析
7.4.1 线性回归
线性回归用于建模一个因变量与一个或多个自变量之间的线性关系。回归方程为 ( y = \beta_0 + \beta_1 x )。
- 示例(线性回归模型):go
import ( "fmt" "gonum.org/v1/gonum/stat" ) func main() { x := []float64{1, 2, 3, 4, 5} y := []float64{2, 4, 6, 8, 10} // LinearRegression 返回截距 alpha 和斜率 beta alpha, beta := stat.LinearRegression(x, y, nil, false) fmt.Printf("回归方程: y = %.2fx + %.2f\n", beta, alpha) // 输出: 回归方程: y = 2.00x + 0.00 }
7.4.2 多元回归
多元回归用于建模多个自变量与因变量之间的关系。回归方程为 ( y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n )。
- 示例:go
// 多元回归需要使用更复杂的库
7.5 时间序列分析
7.5.1 自回归模型(AR)
自回归模型用于预测时间序列数据,根据自身历史值进行预测。
- 示例:go
// AR 模型需要更复杂的库
7.5.2 移动平均模型(MA)
移动平均模型用于平滑时间序列数据,减少噪声影响。
- 示例:go
// MA 模型需要更复杂的库
7.5.3 ARIMA模型
ARIMA(自回归积分滑动平均模型)用于时间序列预测,结合了自回归和移动平均模型,并包括差分操作。
- 示例:go
// ARIMA 模型需要更复杂的库
7.6 应用实例
商业分析用它做市场调查、客户行为分析和销售预测;医学研究用它做临床试验和药效评估;社会科学研究里做调查和政策评估。套路是同一套:先描述数据,再检验假设。
总结
这节用到的 Go 工具集中在 gonum:stat 包算均值、标准差和线性回归,distuv 包算正态分布的概率密度。卡方检验、ANOVA、多元回归和时间序列这几类,示例里只留了注释,要另找第三方库实现。