天天看點

python計算置信區間

python 置信區間

置信區間是指由 樣本統計量 所構造的總體參數的估計區間。

這句話也就是說 ( 這裡統計量一般指均值 ) 利用樣本均值來估計總體均值的可靠程度, 這個"可靠程度"用"置信區間"來表示, 置信區間(是一個系數)取值範圍為: 0<置信區間<1; 這個置信區間就是用來描述真實的均值發生在某範圍的機率

當樣本量越大, 則越可靠.

置信區間計算公式:

ci = mean±stdN(ppf)( (1-α)/2 )

公式參數說明:

ci: 表示置信區間

mean: 表示樣本均值

std: 表示樣本标準差

N(ppf): 表示正态分布的百分點函數

α : 是顯著性水準

α的取值跟樣本量有關

python計算置信區間

其中,百分點函數ppf是累積分布函數cdf的反函數

常用的幾個置信區間的計算可以不用上述公式,而使用更簡單的公式

置信水準是指特定個體對待特定命題真實性相信的程度

通常使用 90%,95% 和 99% 作為置信區間的置信水準。這三個置信水準的臨界值分别為 1.64,1.98 和 2.32。

se是樣本标準誤, n是樣本個數

se = mean/pow(n,0.5)

置信區間算法:

ci = mean-se1.64 置信水準為0.9

ci = mean-se1.98 置信水準為0.95

ci = mean-se*2.32 置信水準為0.99

舉例來說,如果在一次大選中某人的支援率為55%,而置信水準(也稱為可信區間)0.95以上的置信區間是(50%,60%),那麼他的真實支援率有百分之九十五的機率落在百分之五十和百分之六十之間,是以他的真實支援率不足一半的可能性小于百分之2.5。 如例子中一樣,置信水準一般用百分比表示,是以置信水準0.95上的置信空間也可以表達為:95%置信區間。置信區間的兩端被稱為置信極限。對一個給定情形的估計來說,顯著性水準越高,所對應的置信區間就會越大。

但是; 重點來了, 在python裡可以直接調用函數求出置信區間

置信水準 = 可信區間 = 可信度 ;他們是同一個說法(其中可信度是為了友善了解,在案例中我用于替代置信水準的)

置信區間寬度 = 置信區間上極限 - 置信區間下極限

結論是:置信區間寬度越小,預測模型越精确;但是置信區間寬度小了,可信度也就越小了

"""  置信區間  """
 
    df = len(data) - 1
    alpha=    # 是設定的可信區間, 可以了解為可信度; 數值是百分數,取值範圍(0,1)
    ci = stats.t.interval(alpha, df, loc=np.mean(data), scale=stats.sem(data)) # ci是置信區間
      

  

案例: 對給出的樣本資料分析(所用檔案是csv格式的,無法導入)

import os
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from scipy import stats
import numpy as np

os.chdir(r"D:\python金融")
data = pd.read_csv("house_price_gr.csv",encoding=\'gbk\') # 檔案有中文,encoding= \'gbk\'

matplotlib.rcParams[\'axes.unicode_minus\']=False#解決儲存圖像時負号\'-\'顯示為方塊的問題
plt.rcParams[\'font.sans-serif\'] = [\'SimHei\'] # 指定預設字型

# print(data.shape[0]) # 檢視樣本數量

# 繪制直方圖 plt.hist(樣本資料,bins=柱子個數) ; 預設x軸是樣本數值, y軸是樣本數值的個數
# plt.hist(data.rate,bins=40)
# plt.show()

# 檢視均值,标準差,百分位數等
print(data.rate.describe())

alpha = 0.99
alpha_list = [] # 可信度清單
ci_width_list = [] # 置信區間寬度清單
ci_upper_limit = [] # 置信區間上極限
ci_lower_limit = [] # 置信區間下極限
for i in range(20): 
    print("alpha={}".format(alpha))
    # 均值的99%可信區間的置信區間
    """  置信區間  """
    df = len(data.rate) - 1
    ci = stats.t.interval(alpha, df, loc=np.mean(data.rate), scale=stats.sem(data.rate))
    # ci = stats.t.interval(alpha=0.99,df=len(data.rate)-1,loc=np.mean(data.rate),scale=stats.sem(data.rate))

    # 算出置信區間的寬度
    ci_element = ci

    ci_lower_limit.append(ci_element[0])
    ci_upper_limit.append(ci_element[1])
    # ci_element.append(ci)
    ci_width = ci_element[1] - ci_element[0] # 定義置信區間寬度
    ci_width_list.append(ci_width)
    print(ci_width)  # 輸出置信區間寬度

    alpha_list.append(alpha) # 添加到清單中
    alpha = alpha - 0.05
    print("置信區間={}".format(ci))
    print("  "*100)

print(ci_width_list)
print(alpha_list)
x=alpha_list # 設定可信度為x軸
# y=ci_width_list

plt.plot(x,ci_lower_limit,linestyle="dashdot",label="置信區間下極限")
plt.plot(x,ci_width_list,linestyle="dashdot",label = "置信區間寬度")
plt.plot(x,ci_upper_limit,linestyle="dashdot",label= "置信區間上極限")
plt.xlabel("可信度/百分數") # 可信度指的是可信區間, 為了方面了解,用可信度代替可信區間
plt.ylabel("置信區間/機關為變量的機關")
plt.title("可信度--置信區間寬度 圖")
plt.legend() # 顯示标簽
"""
可信度與置信區間圖說明:
例如:可信度=0.90,置信區間寬度=0.05, 置信區間上限=0.07,置信區間下限=0.02
則說明:發生在區間(0.02,0.07)這個範圍内的可能性為0.90

通過圖像得出: 置信區間寬度越越小,預測模型越精确;但是置信區間寬度小了,可信度也就越小了
"""
plt.show()
      

  

python計算置信區間
python計算置信區間

通過圖可以得出上述結論:

:置信區間寬度越小,預測模型越精确;但是置信區間寬度小了,可信度也就越小了

所有為了得到較高的可信度, 就必須得擴大置信區間寬度; 一般取可信度=0.95來計算

原文:https://blog.csdn.net/with_still_water/article/details/102511633