f值 mse p值 ssr 線性回歸 - CSDN

2020-11-21 CSDN技術社區

回歸分析--多元回歸

介紹一下多元回歸分析中的統計量

  • 總觀測值
  • 總自變量
  • 自由度:回歸自由度 ,殘差自由度 
  • SST總平方和                 
  • SSR回歸平方和             
  • SSE殘差平方和             
  • MSR均方回歸               
  • MSE均方殘差               
  • 判定係數R_square        
  • 調整的判定係數Adjusted_R_square   
  • 復相關係數Multiple_R      
  • 估計標準誤差    
  • F檢驗統計量     
  • 回歸係數抽樣分布的標準誤差  
  • 各回歸係數的t檢驗統計量    
  • 各回歸係數的置信區間   
  • 對數似然值(log likelihood)

       

       

  • AIC準則   
  • BIC準則   

案例分析及python實踐

# 導入相關包import pandas as pdimport numpy as npimport mathimport scipyimport matplotlib.pyplot as pltfrom scipy.stats import t

# 構建數據columns = {'A':"分行編號", 'B':"不良貸款(億元)", 'C':"貸款餘額(億元)", 'D':"累計應收貸款(億元)", 'E':"貸款項目個數", 'F':"固定資產投資額(億元)"}data={"A":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25], "B":[0.9,1.1,4.8,3.2,7.8,2.7,1.6,12.5,1.0,2.6,0.3,4.0,0.8,3.5,10.2,3.0,0.2,0.4,1.0,6.8,11.6,1.6,1.2,7.2,3.2], "C":[67.3,111.3,173.0,80.8,199.7,16.2,107.4,185.4,96.1,72.8,64.2,132.2,58.6,174.6,263.5,79.3,14.8,73.5,24.7,139.4,368.2,95.7,109.6,196.2,102.2], "D":[6.8,19.8,7.7,7.2,16.5,2.2,10.7,27.1,1.7,9.1,2.1,11.2,6.0,12.7,15.6,8.9,0,5.9,5.0,7.2,16.8,3.8,10.3,15.8,12.0], "E":[5,16,17,10,19,1,17,18,10,14,11,23,14,26,34,15,2,11,4,28,32,10,14,16,10], "F":[51.9,90.9,73.7,14.5,63.2,2.2,20.2,43.8,55.9,64.3,42.7,76.7,22.8,117.1,146.7,29.9,42.1,25.3,13.4,64.3,163.9,44.5,67.9,39.7,97.1] }df = pd.DataFrame(data)X = df[["C", "D", "E", "F"]]Y = df[["B"]]

# 構建多元線性回歸模型from sklearn.linear_model import LinearRegressionlreg = LinearRegression()lreg.fit(X, Y)x = Xy_pred = lreg.predict(X)y_true = np.array(Y).reshape(-1,1)coef = lreg.coef_[0]intercept = lreg.intercept_[0]

# 自定義函數def log_like(y_true, y_pred): """ y_true: 真實值 y_pred:預測值 """ sig = np.sqrt(sum((y_true - y_pred)**2)[0] / len(y_pred)) # 殘差標準差δ y_sig = np.exp(-(y_true - y_pred) ** 2 / (2 * sig ** 2)) / (math.sqrt(2 * math.pi) * sig) loglik = sum(np.log(y_sig)) return loglikdef param_var(x): """ x:只含自變量寬表 """ n = len(x) beta0 = np.ones((n,1)) df_to_matrix = x.as_matrix() concat_matrix = np.hstack((beta0, df_to_matrix)) # 矩陣合併 transpose_matrix = np.transpose(concat_matrix) # 矩陣轉置 dot_matrix = np.dot(transpose_matrix, concat_matrix) # (X.T X)^(-1) inv_matrix = np.linalg.inv(dot_matrix) # 求(X.T X)^(-1) 逆矩陣 diag = np.diag(inv_matrix) # 獲取矩陣對角線,即每個參數的方差 return diagdef param_test_stat(x, Se, intercept, coef, alpha=0.05): n = len(x) k = len(x.columns) beta_array = param_var(x) beta_k = beta_array.shape[0] coef = [intercept] + list(coef) std_err = [] t_Stat = [] P_value = [] t_intv = [] coefLower = [] coefupper = [] for i in range(beta_k): se_belta = np.sqrt(Se**2 * beta_array[i]) # 回歸係數的抽樣標準誤差 t = coef[i] / se_belta # 用於檢驗回歸係數的t統計量, 即檢驗統計量t p_value = scipy.stats.t.sf(np.abs(t), n-k-1)*2 # 用於檢驗回歸係數的P值(P_value) t_score = scipy.stats.t.isf(alpha/2, df = n-k-1) # t臨界值 coef_lower = coef[i] - t_score * se_belta # 回歸係數(斜率)的置信區間下限 coef_upper = coef[i] + t_score * se_belta # 回歸係數(斜率)的置信區間上限 std_err.append(round(se_belta, 3)) t_Stat.append(round(t,3)) P_value.append(round(p_value,3)) t_intv.append(round(t_score,3)) coefLower.append(round(coef_lower,3)) coefupper.append(round(coef_upper,3)) dict_ = {"coefficients":list(map(lambda x:round(x, 4), coef)), 'std_err':std_err, 't_Stat':t_Stat, 'P_value':P_value, 't臨界值':t_intv, 'Lower_95%':coefLower, 'Upper_95%':coefupper} index = ["intercept"] + list(x.columns) stat = pd.DataFrame(dict_, index=index) return stat

# 自定義函數(計算輸出各回歸分析統計量)def get_lr_stats(x, y_true, y_pred, coef, intercept, alpha=0.05): n = len(x) k = len(x.columns) ssr = sum((y_pred - np.mean(y_true))**2)[0] # 回歸平方和 SSR sse = sum((y_true - y_pred)**2)[0] # 殘差平方和 SSE sst = ssr + sse # 總平方和 SST msr = ssr / k # 均方回歸 MSR mse = sse / (n-k-1) # 均方殘差 MSE R_square = ssr / sst # 判定係數R^2 Adjusted_R_square = 1-(1-R_square)*((n-1) / (n-k-1)) # 調整的判定係數 Multiple_R = np.sqrt(R_square) # 復相關係數 Se = np.sqrt(sse/(n - k - 1)) # 估計標準誤差 loglike = log_like(y_true, y_pred)[0] AIC = 2*(k+1) - 2 * loglike # (k+1) 代表k個回歸參數或係數和1個截距參數 BIC = -2*loglike + (k+1)*np.log(n) # 線性關係的顯著性檢驗 F = (ssr / k) / (sse / ( n - k - 1 )) # 檢驗統計量F (線性關係的檢驗) pf = scipy.stats.f.sf(F, k, n-k-1) # 用於檢驗的顯著性F,即Significance F Fa = scipy.stats.f.isf(alpha, dfn=k, dfd=n-k-1) # F臨界值 # 回歸係數的顯著性檢驗 stat = param_test_stat(x, Se, intercept, coef, alpha=alpha) # 輸出各回歸分析統計量 print('='*80) print('df_Model:{} df_Residuals:{}'.format(k, n-k-1), '\n') print('loglike:{} AIC:{} BIC:{}'.format(round(loglike,3), round(AIC,1), round(BIC,1)), '\n') print('SST:{} SSR:{} SSE:{} MSR:{} MSE:{} Se:{}'.format(round(sst,4), round(ssr,4), round(sse,4), round(msr,4), round(mse,4), round(Se,4)), '\n') print('Multiple_R:{} R_square:{} Adjusted_R_square:{}'.format(round(Multiple_R,4), round(R_square,4), round(Adjusted_R_square,4)), '\n') print('F:{} pf:{} Fa:{}'.format(round(F,4), pf, round(Fa,4))) print('='*80) print(stat) print('='*80) return 0

輸出結果如下:

對比statsmodels下ols結果:

參考資料:

【1】https://www.zhihu.com/question/328568463

【2】https://blog.csdn.net/qq_38998213/article/details/83480147

相關焦點

  • f p 線性回歸專題及常見問題 - CSDN
    線性回歸用\(X=(x_1, x_2, ...,x_n)^T \in \mathbb{R}^{n\times p}\)表示數據,用\(y=(y_1, y_2, ...,y_n)^T \in \mathbb{R}^{n}\)表示標籤。
  • 線性回歸中+t值的含義_線性回歸 y截距p值的計算 - CSDN
    線性回歸模型的基本特性就是:模型是參數的線性函數。最簡單的線性回歸模型當然是模型是參數的線性函數的同時,也是輸入變量的線性函數,或者叫做線性組合。一般線性回歸對於一個一般的線性模型而言,其目標就是要建立輸入變量和輸出變量之間的回歸模型。該模型是既是參數的線性組合,同時也是輸入變量的線性組合。
  • f檢驗的p值大於 - CSDN
    F值和t值就是這些統計檢定值,與它們相對應的概率分布,就是F分布和t分布。統計顯著性(sig)就是出現目前樣本這結果的機率。2,統計學意義(P值或sig值)結果的統計學意義是結果真實程度(能夠代表總體)的一種估計方法。專業上,p值為結果可信程度的一個遞減指標,p值越大,我們越不能認為樣本中變量的關聯 是總體中各變量關聯的可靠指標。
  • f檢驗求p值 - CSDN
    F值和t值就是這些統計檢定值,與它們相對應的概率分布,就是F分布和t分布。統計顯著性(sig)就是出現目前樣本這結果的機率。2,統計學意義(P值或sig值)結果的統計學意義是結果真實程度(能夠代表總體)的一種估計方法。專業上,p值為結果可信程度的一個遞減指標,p值越大,我們越不能認為樣本中變量的關聯 是總體中各變量關聯的可靠指標。
  • 值 多元線性回歸模型專題及常見問題 - CSDN
    多元線性回歸模型通常用來研究一個應變量依賴多個自變量的變化關係,如果二者的以來關係可以用線性形式來刻畫,則可以建立多元線性模型來進行分析。1.模型簡介1.1模型的結構多元線性回歸模型通常用來描述變量y和x之間的隨機線性關係,即:
  • t值 線性回歸專題及常見問題 - CSDN
    線性回歸 用線性回歸找到最佳擬合直線回歸的目的是預測數值型數據,根據輸入寫出一個目標值的計算公式,這個公式就是回歸方程(regression equation),變量前的係數(比如一元一次方程)稱為回歸係數(regression weights)。
  • 逐步回歸分析調整後r2和模型的顯著性f值_多元線性回歸方程的顯著...
    第1列的常量、廣告費用,分別為回歸模型中的常量與自變量X,第2列的B分別為常量a(截距)、回歸係數b(斜率),據此可以寫出簡單線性回歸模型:Y=377+14.475X,第5,6列分別是回歸係數t校驗和相應的顯著性(P值),顯著性(P值)同樣與顯著性水平α進行比較,本例中回歸係數顯著性(P值)=0.000<0.01,說明回歸係數b具有極其顯著的統計學意義,即因變量「銷售量」和自變量
  • 多元線性回歸預測spss - CSDN
    回歸一直是個很重要的主題。因為在數據分析的領域裡邊,模型重要的也是主要的作用包括兩個方面,一是發現,一是預測。而很多時候我們就要通過回歸來進行預測。關於回歸的知識點也許不一定比參數檢驗,非參數檢驗多,但是複雜度卻絕對在其上。回歸主要包括線性回歸,非線性回歸以及分類回歸。本文主要討論多元線性回歸(包括一般多元回歸,含有虛擬變量的多元回歸,以及一點廣義差分的知識)。
  • 回歸模型中f檢驗公式 - CSDN
    【回歸方程無法解釋的】6、自由度【p回歸係數的個數】RSS殘差平方和的自由度 dfr  = n -p -1SSR回歸平方和的自由度 dfm= p 總平方和的自由都           dft = n -1dft = dfr + drm========================================
  • 正態分布 線性回歸 - CSDN
    採用最小二乘法進行線性回歸時,需要滿足特定的條件:正態性:一定範圍內,給定任意x值,對應的y均服從正態分布獨立:即誤差項間不存在相關,一般時間序列數據會存在自相關線性:因變量和自變量有線性關係同方差性:即模型誤差項的方差相等。
  • r語言的p值檢驗 - CSDN
    matrix(rnorm(1000* 6, 0, 3), 6) rvar = apply(rdata, 2, var) mean(rvar)結果1: [1] 8輸入2: var(rvar)結果2: [1] 32=2*81/5輸入3: library(ggplot2)p1
  • 多元線性回歸t檢驗專題及常見問題 - CSDN
    多元線性回歸模型通常用來研究一個應變量依賴多個自變量的變化關係,如果二者的以來關係可以用線性形式來刻畫,則可以建立多元線性模型來進行分析。1.t檢驗t檢驗是對單個變量係數的顯著性檢驗,一般看p值; 如果p值小於0.05表示該自變量對因變量解釋性很強。
  • 回歸分析t檢驗公式_線性回歸t檢驗公式 - CSDN
    【回歸方程無法解釋的】6、自由度【p回歸係數的個數】RSS殘差平方和的自由度 dfr  = n -p -1SSR回歸平方和的自由度 dfm= p 總平方和的自由都           dft = n -1dft = dfr + drm========================================
  • spss 方法 線性回歸專題及常見問題 - CSDN
    本文收集整理關於spss多元線性回歸結果解讀的相關議題,使用內容導航快速到達。內容導航:Q1:請高手幫忙分析下SPSS的多元線性回歸結果吧~急啊~~~你的回歸方法是直接進入法擬合優度R方等於0.678,表示自變量可以解釋因變量的67.8%變化,說明擬合優度還可以。
  • spss多元線性回歸專題及常見問題 - CSDN
    本文收集整理關於spss多元線性回歸結果解讀的相關議題,使用內容導航快速到達。內容導航:Q1:請高手幫忙分析下SPSS的多元線性回歸結果吧~急啊~~~你的回歸方法是直接進入法擬合優度R方等於0.678,表示自變量可以解釋因變量的67.8%變化,說明擬合優度還可以。
  • f t 線性回歸專題及常見問題 - CSDN
    1、標準化對於多元線性回歸需要對各個自變量進行標準化,排除單位的影響。標準化方法:即將原始數據減去相應變量的均數後再除以該變量的標準差,而標準化得到的回歸方程稱為標準化回歸方程,相應得回歸係數為標準化回歸係數。
  • 線性回歸,最小回歸直線和F測驗
    線性回歸和最小回歸直線    我們先對一個散點圖隨便增加一個直線,然後計算出數據中散點到直線對應點的距離,將它們的平方加和得到一個平方差
  • 線性回歸:簡單線性回歸詳解
    【導讀】本文是一篇專門介紹線性回歸的技術文章,討論了機器學習中線性回歸的技術細節。線性回歸核心思想是獲得最能夠擬合數據的直線。
  • 這些線性回歸知識是底線!
    無論面試的工作領域是數據科學、數據分析、機器學習或者是量化研究,都有可能會遇到涉及線性回歸的具體問題。要想熟練掌握線性回歸,需要了解以下知識。註:本文僅涉及理論而非代碼。,但在開始介紹之前還是要回顧下線性回歸的公式和假設。
  • R 語言 lasso回歸
    接下來以線性回歸為例介紹其在R語言中的實現,當然在logistic回歸、cox回歸也是可用lasso的。實例數據R包(glmnet)我們用交叉驗證來確定lamda的值,在這裡我們隨便指定使用longley$Employed,nfolds = 4,family = "gaussian", alpha = 1)在這裡對應於mse最小的lamda即為我們最終採用的lamda,lambda.min就是所求,大小約為0.097plot(cv_lasso) sprintf('Best lambda for LASSO: %f