python計算置信區間


python 置信區間


置信區間是指由 樣本統計量 所構造的總體參數的估計區間。
這句話也就是說 ( 這里統計量一般指均值 ) 利用樣本均值來估計總體均值的可靠程度, 這個"可靠程度"用"置信區間"來表示, 置信區間(是一個系數)取值范圍為: 0<置信區間<1; 這個置信區間就是用來描述真實的均值發生在某范圍的概率
當樣本量越大, 則越可靠.

 

置信區間計算公式:

ci = mean±stdN(ppf)( (1-α)/2 )
公式參數說明:
ci: 表示置信區間
mean: 表示樣本均值
std: 表示樣本標准差
N(ppf): 表示正態分布的百分點函數
α : 是顯著性水平
α的取值跟樣本量有關

 

 


其中,百分點函數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()

  

 

 

 

 

 

通過圖可以得出上述結論:
:置信區間寬度越小,預測模型越精確;但是置信區間寬度小了,可信度也就越小了

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

 



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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM