Skip to content

7. 统计分析 ​

统计分析是从数据里得到结论的过程:描述数据、做推断、检验假设、建模、预测。


7.1 统计分析的基本概念 ​

7.1.1 数据类型

  • 定量数据:可量化的数据,如年龄、收入等,进一步分为离散数据和连续数据。
  • 定性数据:描述性质的数据,如性别、颜色等,进一步分为类别数据和有序数据。

7.1.2 描述性统计

描述性统计用于总结和描述数据集的基本特征。常见的描述性统计量包括:

  • 均值(平均数):数据的算术平均值。

  • 中位数:数据的中间值,将数据分成两半。

  • 众数:数据中出现频率最高的值。

  • 方差和标准差:度量数据的离散程度。

  • 示例:

    go
    import (
        "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 库):
    go
    import (
        "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、多元回归和时间序列这几类,示例里只留了注释,要另找第三方库实现。

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang