日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用Python学分析 - 单因素方差分析

發布時間:2025/3/20 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Python学分析 - 单因素方差分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單因素方差分析(One-Way Analysis of Variance)
判斷控制變量是否對觀測變量產生了顯著影響

分析步驟

  • 建立檢驗假設
  • - H0:不同因子水平間的均值無差異
      - H1:不同因子水平間的均值有顯著差異
      - 【注意】有差異,有可能是所有因子水平間都存在差異,也有可能只有兩個因子水平間的均值存在差異

  • 計算檢驗統計量F值
  • F = MSA / MSE
      MSA = SSA / ( k - 1 ) MSA:組間均方, 對總體方差的一個估計
      MSE = SSE / ( n - k ) MSE:組內均方,不論H0是否為真,MSE都是總體方差的一個無偏估計
      SST = SSA + SSE SST:總誤差平方和,反映全部觀測值的離散情況
    SSA:組間誤差平方和,也稱水平項誤差平方和,反映各因子水平(總體)的樣本均值之間的差異程度
    SSE: 組內誤差平方和

  • 確定P值

  • 方差分析表

  • 根據給定的顯著性水平,并作出決策

  • 根據F值進行假設檢驗
      根據選定的顯著性水平,F值大于臨界值時,將拒絕原假設
      根據P值進行假設檢驗

  • 進一步分析

    方差齊性檢驗

    多重比較檢驗

  • - 確定控制變量的不同水平對觀測變量的影響程度
      - 哪個水平的作用明顯區別于其他水平
      - 哪個水平的作用是不顯著
      - 等等

    【python分析:用ols模塊進行計算】

    # 引入數據 import pandas as pd data_value = { '無促銷':[23,19,17,26,28,23,24,30],'被動促銷':[26,22,20,30,36,28,30,32],'主動促銷':[30,23,25,32,48,40,41,46]}# 因變量 da = pd.DataFrame( data_value ).stack() da.columns = ['水平','觀測值']# ols模塊進行分析from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm formula = '{} ~ {}'.format(da.columns[1], da.columns[0]) model = ols( formula, da ).fit() anovat = anova_lm(model) print(anovat)

    輸出結果:

    【python分析:用自定義函數進行計算】

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯的視頻學習教程和PDF電子書! ''' def ANOVA_oneway( df, a = 0.05 ):from scipy.stats import f'''進行單因素方差分析輸入值:df - pd.DataFrame,第一列為水平,第二列為觀測值;a - 顯著性水平,默認為0.05返回類型:字典返回值:方差分析相關數據'''res = { 'SSA':0, 'SST':0 }mu = df[df.columns[1]].mean()da = df.groupby( df.columns[0] ).agg( {df.columns[1]:['mean','count']})da.columns = ['mean','count']res['df_A'] = len(list(da.index)) - 1 # 自由度# 組間誤差平方和for row in da.index:res['SSA'] += (da.loc[row,'mean'] - mu )**2 * da.loc[row,'count']# 總誤差平方和for e in df[df.columns[1]].values:res['SST'] += (e - mu )**2 res['SSE'] = res['SST'] - res['SSA'] # 組內誤差平方和res['df_E'] = len(df) - res['df_A'] - 1 # 殘差自由度res['df_T'] = len(df) - 1 # 總和自由度res['MSA'] = res['SSA'] / res['df_A'] # 組間均方res['MSE'] = res['SSE'] / res['df_E'] # 組內均方res['F'] = res['MSA'] / res['MSE'] # F值res['p_value'] = 1 - f(res['df_A'],res['df_E'] ).cdf( res['F']) #p值res['a'] = ares['F_alpha'] = f(res['df_A'],res['df_E'] ).ppf( 1-a ) # 基于顯著性水平a的F臨界值 return resdef print_ANOVA_oneway( d, maxedg = 90 ):'''打印單因素方差分析表輸入值:d - dict字典,包含分析表所需要的數據; maxedg - 打印輸出時裝飾分隔符的最大長度'''title = '【單因素方差分析表】'print( title.center( maxedg ))print( '=' * maxedg )print( '{:^12s}|{:^16s}|{:^6s}|{:^16s}|{:^12s}|{:^10s}|'.format('誤差來源','平方和','自由度','均方和','F','p值'))print( '-' * maxedg )print( '{:8s}|{:>18,.4f} |{:>8d} |{:>18,.4f} |{:>11.6f} |{:>10.3%} |'.format( '組間(因子影響)',d['SSA'],d['df_A'],d['MSA'],d['F'],d['p_value']))print( '{:10s}|{:>18,.4f} |{:>8d} |{:>18,.4f} |'.format( '組內(誤差)',d['SSE'],d['df_E'],d['MSE']))print( '{:14s}|{:>18,.4f} |{:>8d} |'.format( '總和',d['SST'],d['df_T']))print( '-' * maxedg )print('備注:顯著性水平為 {:.2%} 時,F的臨界值是 {:.6f}。'.format(d['a'],d['F_alpha']))p = 0.95 # 設定置信度水平 maxedg = 93 # 設定輸出時裝飾分隔符的最大長度 # 計算并輸出單因素方差分析表 res = ANOVA_oneway( da, a = 1-p ) print_ANOVA_oneway( res, maxedg = maxedg )

    總結

    以上是生活随笔為你收集整理的用Python学分析 - 单因素方差分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。