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

歡迎訪問 生活随笔!

生活随笔

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

python

【教男朋友用python做计量】03.利用python进行假设检验(1)

發(fā)布時間:2023/12/20 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【教男朋友用python做计量】03.利用python进行假设检验(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第三節(jié) 利用python進行T檢驗、F檢驗


文章目錄

  • 第三節(jié) 利用python進行T檢驗、F檢驗
  • 前言
  • 一、數(shù)據(jù)準備
  • 二、t檢驗
    • 1. t檢驗回顧
    • 2. 利用statsmodels進行t檢驗
      • 2.1 R矩陣的方式傳參
      • 2.2 利用字符串傳參
  • 三、F檢驗
  • 總結及全部代碼
      • t檢驗
      • F檢驗


前言

FBI WARNING:

之前講了怎么用statsmodels進行簡單的OLS回歸,以及如何輸出回歸的參數(shù)(例如:系數(shù),標準差,P值等等),可以發(fā)現(xiàn)其實這個庫還挺強大,用來做計量也蠻方便的。所以就繼續(xù)往下學習,那么就來到了如何利用statsmodels做t檢驗和F檢驗。這篇文章比較詳細基礎,甚至廢話有點多,可以說是手把手教你用statsmodels做假設檢驗了,如果寶貝你還不會的話,我就先倒立洗個頭(ノへ ̄、)。**注意:**如果有基礎不想看廢話的直接跳到最后的總結!!!


一、數(shù)據(jù)準備

先生成數(shù)據(jù),進行初步的OLS回歸,這一個步驟你已經(jīng)很熟悉啦~無非就是import 一下,然后ols() 再fit(),忘記的話看我之前的文章哦。

import pandas as pd import numpy as np import statsmodels.api as sm import statsmodels.formula.api as smf #準備需要的包 #生成數(shù)據(jù) df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"]) df.head(5) Y X1 X2 X3 0 5 1 8 1 1 2 1 8 5 2 1 8 7 8 3 2 6 8 9 4 6 6 3 6

數(shù)據(jù)準備好之后就可以進行OLS回歸了:

#OLS回歸 regression=smf.ols(formula="Y~X1+X2+X3",data=df) model=regression.fit()

二、t檢驗

1. t檢驗回顧

t檢驗是對單個變量進行的顯著性檢驗,首先要計算t,然后和臨界值比較,看t值是落在拒絕域還是接受域。原假設:H0:βk^=β0H_0:\hat{\beta_k}=\beta_0H0?:βk?^?=β0?的t統(tǒng)計量為:
tk=βk^?β0Se(βk)^~t(n?K)t_k=\frac{\hat{\beta_k}-\beta_0}{Se(\hat{\beta_k)}}~t(n-K)tk?=Se(βk?)^?βk?^??β0??t(n?K)
其中,Se(βk^)Se(\hat{\beta_k})Se(βk?^?)為估計值βk^\hat{\beta_k}βk?^?的標準誤。
t檢驗的原假設示例:

  • H0:β1=0H_0:\beta_1=0H0?:β1?=0
  • H0:β1=β2H_0:\beta_1=\beta_2H0?:β1?=β2?
  • H0:β2=1H_0:\beta_2=1H0?:β2?=1

2. 利用statsmodels進行t檢驗

接下來,我們直接用fit()下面的t_test()方法進行t檢驗,官方的t_test()方法說明如下:

在傳參這里,可以用傳入關于原假設的array,也可以傳入原假設的字符串,或者是元組??偠灾褪窃蹅円言蹅兊脑僭O告訴這個方法,那么怎么表達原假設呢~

2.1 R矩陣的方式傳參

基本思想就是構造原假設 H0:Rβ=0H_0:R\beta=0H0?:Rβ=0,其中β\betaβ為系數(shù)向量,然后把RRR作為參數(shù)輸入給t_test()函數(shù)。

  • 舉個例子說明,假設我們這里有四個解釋變量(包含了常數(shù)項),系數(shù)分別是:β0,β1,β2,β3\beta_0,\beta_1,\beta_2,\beta_3β0?,β1?,β2?,β3?
    如果我們的原假設是:H0:β1=0H_0:\beta_1=0H0?:β1?=0,那么R=[0,1,0,0]R=[0,1,0,0]R=[0,1,0,0],這樣RRR乘以β\betaβ向量之后剛好就是:
    [0,1,0,0][β0β1β2β3]=β1=0[0,1,0,0]\begin{bmatrix} \beta_0\\ \beta_1\\ \beta_2\\ \beta_3\\ \end{bmatrix}=\beta_1=0[0,1,0,0]?????β0?β1?β2?β3???????=β1?=0
    這樣的話RRR矩陣就可以包含我們?nèi)我獾脑僭O,如果原假設H0:β1=β2H_0:\beta_1=\beta_2H0?:β1?=β2?,那么R=[0,1,?1,0]R=[0,1,-1,0]R=[0,1,?1,0],因為:
    [0,1,?1,0][β0β1β2β3]=β1?β2=0[0,1,-1,0]\begin{bmatrix} \beta_0\\ \beta_1\\ \beta_2\\ \beta_3\\ \end{bmatrix}=\beta_1-\beta_2=0[0,1,?1,0]?????β0?β1?β2?β3???????=β1??β2?=0

  • 還可以一次性弄多個原假設,一次性分別進行t檢驗,比如原假設分別是:
    H0:β1=0H0:β2=β3H_0:\beta_1=0\\H_0:\beta_2=\beta_3H0?:β1?=0H0?:β2?=β3?要滿足Rβ=[0;0]R\beta=[0;0]Rβ=[0;0],則:
    R=(0100001?1)?(0100001?1)(β0β1β2β3)=(β1β2?β3)=(00)R=\begin{pmatrix} 0& 1 & 0 &0 \\ 0& 0&1 &-1 \\ \end{pmatrix}\Rightarrow \begin{pmatrix} 0& 1 & 0 &0 \\ 0& 0&1 &-1 \\ \end{pmatrix}\begin{pmatrix} \beta_0\\ \beta_1\\ \beta_2\\ \beta_3\\ \end{pmatrix}=\begin{pmatrix} \beta_1\\ \beta_2-\beta_3\\ \end{pmatrix}=\begin{pmatrix} 0\\ 0\\ \end{pmatrix}R=(00?10?01?0?1?)?(00?10?01?0?1?)?????β0?β1?β2?β3???????=(β1?β2??β3??)=(00?)
    其實這部分的知識你也知道,書上也有,但我還是忍不住廢話一下了哈哈哈哈。接下來就可以代碼實現(xiàn)了:

  • 如果H0:β1=0H_0:\beta_1=0H0?:β1?=0

    #構造R R1=np.zeros(4) #包含了常數(shù)項 R1[1]=1 #[0,1,0,0] #t檢驗,model是剛剛我們已經(jīng)進行OLS回歸得到的結果 model.t_test(R1)

    輸出結果:

  • 如果H0:β2=β3H_0:\beta_2=\beta_3H0?:β2?=β3?

    #H0:X2=X3 R2=np.array([0,0,1,-1]) model.t_test(R2)

    輸出結果:

  • 如果一次性進行多個t檢驗,H0:β1=0;H0:β2=β3H_0:\beta_1=0;\space \space \space H_0:\beta_2=\beta_3H0?:β1?=0;???H0?:β2?=β3?

    R3=np.array(([0,1,0,0],[0,0,1,-1])) model.t_test(R3)

    輸出結果:
    可以看到這里一次性進行了兩個t檢驗,輸出兩個結果,和上面單獨檢驗輸出的結果相對應。值得注意的是,statsmodels給的方法用array的方式原假設默認都是等于0的,如果想要構造H0:β1=1H_0:\beta_1=1H0?:β1?=1這種就不能用array的方式了(我翻譯官方文檔理解出來是這樣的,如果不對的話當我沒說)。
    那想要構造非0的原假設,應該怎么辦呢?statsmodels還給出了另一種簡便的方法,就是直接把原假設輸入進去就行了,也就是利用字符串傳參。

2.2 利用字符串傳參

這是一個簡單粗暴的方法,不想構造R矩陣的話,直接看這里:

  • 如果 H0:β1=0H_0:\beta_1=0H0?:β1?=0

    #H0:X1=0 model.t_test("X1=0") #我這里數(shù)據(jù)集變量名給的是X1,X2,具體輸入什么要看你自己數(shù)據(jù)集的變量名是啥

    輸出結果:
    可以發(fā)現(xiàn)和用array的方法一樣,那這樣的話直接用字符串就好了,想做什么原假設都可以,等于0或者等于其他數(shù)直接輸入就是:

    #H0: X1=0; X2=X3 model.t_test("X1=0,X2=X3") #model.t_test("X1=1,X2=1")

    輸出結果,和輸入R矩陣的結果其實一樣:
    這個方法是不是還蠻簡單?現(xiàn)在再來看整個流程可能更直觀一點:

    #導入包 import pandas as pd import numpy as np import statsmodels.formula.api as smf #生成數(shù)據(jù) df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"]) #OLS regression=smf.ols(formula="Y~X1+X2+X3",data=df) model=regression.fit() #t檢驗 H0:X1=0,X2=X3 ttest=model.t_test("X1=0,X2=X3") print(ttest) # 使用R矩陣的方法 R=np.array([[0,1,0,0],[0,0,1,-1]]) ttest2=model.t_test(R) print(ttest2)

    輸出結果:

三、F檢驗

F檢驗可以知道回歸系數(shù)聯(lián)合的線性假設是否同時成立,即:
H0:Rβ=rH_0:R\beta=rH0?:Rβ=r
如果用statsmodels進行F檢驗的話,和上面的t檢驗步驟差不多,只不過方法是f_test(),所以這里直接代碼演示了:

  • 如果H0:β1=β2=β3=0H_0:\beta_1=\beta_2=\beta_3=0H0?:β1?=β2?=β3?=0

    #F檢驗 ##傳入字符串 ftest=model.f_test("X1=X2=X3=0") print(ftest) ##傳入矩陣 R_f=np.eye(4) #np.identity(4) R_f=R_f[1:,:] ftest2=model.f_test(R_f) print(ftest2) #輸出的分別是F值,P值,自由度

    兩個方法輸出的值一樣:

  • 獲取F檢驗的參數(shù):

    #獲取f值 print(ftest.fvalue) #獲取p值 print(ftest.pvalue) #獲取兩個自由度 print(ftest.df_denom) print(ftest.df_num)

總結及全部代碼

以上就是利用statsmodels進行t檢驗和F檢驗的內(nèi)容,我甚至寫得廢話有點多了,官方文檔這里很直觀:

  • F檢驗
  • 檢驗

為了更好你運行代碼,這里我把兩個檢驗的全部的代碼放在這里了,復制之后去運行一下吧~

t檢驗

#導入包 import pandas as pd import numpy as np import statsmodels.formula.api as smf #生成數(shù)據(jù) df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"]) #OLS regression=smf.ols(formula="Y~X1+X2+X3",data=df) model=regression.fit() #t檢驗 H0:X1=0,X2=X3 ttest=model.t_test("X1=0,X2=X3") print(ttest) # 使用R矩陣的方法 R=np.array([[0,1,0,0],[0,0,1,-1]]) ttest2=model.t_test(R) print(ttest2)

F檢驗

#導入包 import pandas as pd import numpy as np import statsmodels.formula.api as smf #生成數(shù)據(jù) df=pd.DataFrame(np.random.randint(1,10,(30,4)),columns=["Y","X1","X2","X3"]) #OLS regression=smf.ols(formula="Y~X1+X2+X3",data=df) model=regression.fit() #F檢驗 ##傳入字符串 ftest=model.f_test("X1=X2=X3=0") print(ftest) ##傳入矩陣 R_f=np.eye(4) #np.identity(4) R_f=R_f[1:,:] ftest2=model.f_test(R_f) print(ftest2) #輸出的分別是F值,P值,自由度

這節(jié)就到這里啦,之后再寫寫別的檢驗方法。如果有筆誤的話純屬是我手殘了,好啦好啦,寶貝學會了嗎~溜溜球ヾ(′ _ ` )??‘-’?

總結

以上是生活随笔為你收集整理的【教男朋友用python做计量】03.利用python进行假设检验(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。