r語言一元回歸模型專題及常見問題 - CSDN

2020-12-25 CSDN技術社區

轉載自:http://blog.fens.me/r-linear-regression/

前言

在我們的日常生活中,存在大量的具有相關性的事件,比如大氣壓和海拔高度,海拔越高大氣壓強越小;人的身高和體重,普遍來看越高的人體重也越重。還有一些可能存在相關性的事件,比如知識水平越高的人,收入水平越高;市場化的國家經濟越好,則貨幣越強勢,反而全球經濟危機,黃金等避險資產越走強。

如果我們要研究這些事件,找到不同變量之間的關係,我們就會用到回歸分析。一元線性回歸分析是處理兩個變量之間關係的最簡單模型,是兩個變量之間的線性相關關係。讓我們一起發現生活中的規律吧。

由於本文為非統計的專業文章,所以當出現與教課書不符的描述,請以教課書為準。本文力求用簡化的語言,來介紹一元線性回歸的知識,同時配合R語言的實現。

目錄

  1. 一元線性回歸介紹
  2. 數據集和數學模型
  3. 回歸參數估計
  4. 回歸方程的顯著性檢驗
  5. 殘差分析和異常點檢測
  6. 模型預測

1. 一元線性回歸介紹

回歸分析(Regression Analysis)是用來確定2個或2個以上變量間關係的一種統計分析方法。如果回歸分析中,只包括一個自變量X和一個因變量Y時,且它們的關係是線性的,那麼這種回歸分析稱為一元線性回歸分析。

回歸分析屬於統計學的基本模型,涉及統計學基礎,就會有一大堆的名詞和知識點需要介紹。

在回歸分析中,變量有2類:因變量 和 自變量。因變量通常是指實際問題中所關心的指標,用Y表示。而自變量是影響因變量取值的一個變量,用X表示,如果有多個自變量則表示為X1, X2, …, Xn。

回歸分析研究的主要步驟:

  1. 確定因變量Y 與 自變量X1, X2, …, Xn 之間的定量關係表達式,即回歸方程。
  2. 對回歸方程的置信度檢查。
  3. 判斷自變量Xn(n=1,2,…,m)對因變量的影響。
  4. 利用回歸方程進行預測。

本文會根據回歸分析的的主要步驟,進行結構梳理,介紹一元線性回歸模型的使用方法。

2. 數據集和數學模型

先讓我們通過一個例子開始吧,用一組簡單的數據來說明一元線性回歸分析的數學模型的原理和公式。找出下面數據集中Y與X的定量關係。

數據集為2016年3月1日,白天開盤的交易數據,為鋅的2個期貨合約的分鐘線的價格數據。數據集包括有3列,索引列為時間,zn1.Close為ZN1604合約的1分鐘線的報價數據,zn2.Close為ZN1605合約的1分鐘線的報價數據。

數據集如下:

zn1.Close zn2.Close2016-03-01 09:01:00 14075 141452016-03-01 09:02:00 14095 141602016-03-01 09:03:00 14095 141602016-03-01 09:04:00 14095 141652016-03-01 09:05:00 14120 141902016-03-01 09:06:00 14115 141802016-03-01 09:07:00 14110 141702016-03-01 09:08:00 14110 141752016-03-01 09:09:00 14105 141702016-03-01 09:10:00 14105 141702016-03-01 09:11:00 14120 141802016-03-01 09:12:00 14105 141702016-03-01 09:13:00 14105 141702016-03-01 09:14:00 14110 141752016-03-01 09:15:00 14105 141752016-03-01 09:16:00 14120 141852016-03-01 09:17:00 14125 141902016-03-01 09:18:00 14115 141852016-03-01 09:19:00 14135 141952016-03-01 09:20:00 14125 141902016-03-01 09:21:00 14135 142052016-03-01 09:22:00 14140 142102016-03-01 09:23:00 14140 142002016-03-01 09:24:00 14135 142052016-03-01 09:25:00 14140 142052016-03-01 09:26:00 14135 142052016-03-01 09:27:00 14130 14205

我們以zn1.Close列的價格為X,zn2.Close列的價格為Y,那麼試試找到自變量X和因變量Y的關係的表達式。

為了直觀起見,我們可以先畫出一張散點圖,以X為橫坐標,Y為縱坐標,每個點對應一個X和一個Y

# 數據集已存在df變量中> head(df) zn1.Close zn2.Close2016-03-01 09:01:00 14075 141452016-03-01 09:02:00 14095 141602016-03-01 09:03:00 14095 141602016-03-01 09:04:00 14095 141652016-03-01 09:05:00 14120 141902016-03-01 09:06:00 14115 14180# 分別給x,y賦值> x<-as.numeric(df[,1])> y<-as.numeric(df[,2])# 畫圖> plot(y~x+1)

從散點圖上發現 X和Y 的排列基本是在一條直線附近,那麼我們可以假設X和Y的關係是線性,可以用公式表式為。

Y = a + b * X + c

  • Y,為因變量
  • X,為自變量
  • a,為截距
  • b,為自變量係數
  • a+b*X, 表示Y隨X的變化而線性變化的部分
  • c, 為殘差或隨機誤差,是其他一切不確定因素影響的總和,其值不可觀測。假定c是符合均值為0方差為σ^2的正態分布 ,記作c~N(0,σ^2)

對於上面的公式,稱函數f(X) = a + b * X 為一元線性回歸函數,a為回歸常數,b為回歸係數,統稱回歸參數。X 為回歸自變量或回歸因子,Y 為回歸因變量或響應變量。如果(X1,Y1),(X2,Y2)…(Xn,Yn)是(X,Y)的一組觀測值,則一元線性回歸模型可表示為

Yi = a + b * X + ci, i= 1,2,...n其中E(ci)=0, var(ci)=σ^2, i=1,2,...n

通過對一元線性回歸模型的數學定義,接下來讓我們利用數據集做回歸模型的參數估計。

3. 回歸參數估計

對於上面的公式,回歸參數a,b是我們不知道的,我們需要用參數估計的方法來計算出a,b的值,而從得到數據集的X和Y的定量關係。我們的目標是要計算出一條直線,使直接線上每個點的Y值和實際數據的Y值之差的平方和最小,即(Y1實際-Y1預測)^2+(Y2實際-Y2預測)^2+ …… +(Yn實際-Yn預測)^2 的值最小。參數估計時,我們只考慮Y隨X的線性變化的部分,而殘差c是不可觀測的,參數估計法並不需要考慮殘差,對於殘差的分析在後文中介紹。

令公式變形為a和b的函數Q(a,b), 即 (Y實際-Y測試)的平方和,變成到(Y實際 – (a+b*X))的平方和。

公式一 回歸參數變形公式

通過最小二乘估計推導出a和b的求解公式,詳細的推導過程請參考文章一元線性回歸的細節

公式二 回歸參數計算公式

其中 x和y的均值,計算方法如下

公式三 均值計算公式

有了這個公式,我們就可以求出a和b兩個的回歸參數的解了。

接下來,我們用R語言來實現對上面數據的回歸模型的參數估計,R語言中可以用lm()函數來實現一元線性回歸的建模過程。

# 建立線性回歸模型> lm.ab<-lm(y ~ 1+x)# 列印參數估計的結果> lm.abCall:lm(formula = y ~ 1 + x)Coefficients:(Intercept) x -349.493 1.029

如果你想動手來計算也可以自己實現公式。

# x均值> Xm<-mean(x);Xm [1] 14034.82# y均值> Ym<-mean(y);Ym[1] 14096.76# 計算回歸係數> b <- sum((x-Xm)*(y-Ym)) / sum((x-Xm)^2) ;b[1] 1.029315# 計算回歸常數> a <- Ym - b * Xm;a[1] -349.493

回歸參數a和b的計算結果,與lm()函數的計算結果是相同的。有了a和b的值,我們就可以畫出這條近似的直接線。

計算公式為: Y= a + b * X = -349.493 + 1.029315 * X 

畫出回歸線。

> plot(y~x+1)> abline(lm.ab)

這條直線是我們用數據擬合出來的,是一個近似的值。我們看到有些點在線上,有些點不在線上。那麼要評價這條回歸線擬合的好壞,我們就需要對回歸模型進行顯著性檢驗。

4. 回歸方程的顯著性檢驗

從回歸參數的公式二可知,在計算過程中並不一定要知道Y和X是否有線性相關的關係。如果不存相關關係,那麼回歸方程就沒有任何意義了,如果Y和X是有相關關係的,即Y會隨著X的變化而線性變化,這個時候一元線性回歸方程才有意義。所以,我們需要用假設檢驗的方法,來驗證相關性的有效性。

通常會採用三種顯著性檢驗的方法。

  • T檢驗法:T檢驗是檢驗模型某個自變量Xi對於Y的顯著性,通常用P-value判斷顯著性,小於0.01更小時說明這個自變量Xi與Y相關關係顯著。
  • F檢驗法:F檢驗用於對所有的自變量X在整體上看對於Y的線性顯著性,也是用P-value判斷顯著性,小於0.01更小時說明整體上自變量與Y相關關係顯著。
  • R^2(R平方)相關系統檢驗法:用來判斷回歸方程的擬合程度,R^2的取值在0,1之間,越接近1說明擬合程度越好。

在R語言中,上面列出的三種檢驗的方法都已被實現,我們只需要把結果解讀。上文中,我們已經通過lm()函數構建一元線性回歸模型,然後可以summary()函數來提取模型的計算結果。

> summary(lm.ab) # 計算結果Call:lm(formula = y ~ 1 + x)Residuals: Min 1Q Median 3Q Max -11.9385 -2.2317 -0.1797 3.3546 10.2766 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -3.495e+02 7.173e+01 -4.872 2.09e-06 ***x 1.029e+00 5.111e-03 201.390 < 2e-16 ***---Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1Residual standard error: 4.232 on 223 degrees of freedomMultiple R-squared: 0.9945, Adjusted R-squared: 0.9945 F-statistic: 4.056e+04 on 1 and 223 DF, p-value: < 2.2e-16

模型解讀:

  • Call,列出了回歸模型的公式。
  • Residuals,列出了殘差的最小值點,1/4分位點,中位數點,3/4分位點,最大值點。
  • Coefficients,表示參數估計的計算結果。
  • Estimate,為參數估計列。Intercept行表示常數參數a的估計值 ,x行表示自變量x的參數b的估計值。
  • Std. Error,為參數的標準差,sd(a), sd(b)
  • t value,為t值,為T檢驗的值
  • Pr(>|t|) ,表示P-value值,用於T檢驗判定,匹配顯著性標記
  • 顯著性標記,***為非常顯著,**為高度顯著, **為顯著,·為不太顯著,沒有記號為不顯著。
  • Residual standard error,表示殘差的標準差,自由度為n-2。
  • Multiple R-squared,為相關係數R^2的檢驗,越接近1則越顯著。
  • Adjusted R-squared,為相關係數的修正係數,解決多元回歸自變量越多,判定係數R^2越大的問題。
  • F-statistic,表示F統計量,自由度為(1,n-2),p-value:用於F檢驗判定,匹配顯著性標記。

通過查看模型的結果數據,我們可以發現通過T檢驗的截距和自變量x都是非常顯著,通過F檢驗判斷出整個模型的自變量是非常顯著,同時R^2的相關係數檢驗可以判斷自變量和因變量是高度相關的。

最後,我們通過的回歸參數的檢驗與回歸方程的檢驗,得到最後一元線性回歸方程為:

Y = -349.493 + 1.029315 * X

5. 殘差分析和異常點檢測

在得到的回歸模型進行顯著性檢驗後,還要在做殘差分析(預測值和實際值之間的差),檢驗模型的正確性,殘差必須服從正態分布N(0,σ^2)

我們可以自己計算數據殘差,並進行正態分布檢驗。

# 殘差> y.res<-residuals(lm.ab)# 列印前6條數據> head(y.res) 1 2 3 4 5 6 6.8888680 1.3025744 1.3025744 6.3025744 5.5697074 0.7162808 # 正態分布檢驗> shapiro.test(y.res)Shapiro-Wilk normality testdata: y.resW = 0.98987, p-value = 0.1164# 畫出殘差散點圖> plot(y.res)

對殘差進行Shapiro-Wilk正態分布檢驗,W接近1,p-value>0.05,證明數據集符合正態分布!關於正態分布的介紹,請參考文章常用連續型分布介紹及R語言實現。

同時,我們也可以用R語言的工具生成4種用於模型診斷的圖形,簡化自己寫代碼計算的操作。

# 畫圖,回車展示下一張> plot(lm.ab) Hit to see next plot: # 殘差擬合圖Hit to see next plot: # 殘差QQ圖Hit to see next plot: # 標準化的殘差對擬合值 Hit to see next plot: # 標準化殘差對槓桿值

圖1,殘差和擬合值對比圖

對殘差和擬合值作圖,橫坐標是擬合值,縱坐標是殘差。殘差和擬合值之間,數據點均勻分布在y=0兩側,呈現出隨機的分布,紅色線呈現出一條平穩的曲線並沒有明顯的形狀特徵,說明殘差數據表現非常好。

圖2,殘差QQ圖

殘差QQ圖,用來描述殘差是否符合正態分布。圖中的數據點按對角直線排列,趨於一條直線,並被對角直接穿過,直觀上符合正態分布。對於近似服從正態分布的標準化殘差,應該有 95% 的樣本點落在 [-2,2] 區間內。

圖3,標準化殘差平方根和擬合值對比圖

對標準化殘差平方根和擬合值作圖,橫坐標是擬合值,縱坐標是標準化後的殘差平方根。與殘差和擬合值對比圖(圖1)的判斷方法類似,數據隨機分布,紅色線呈現出一條平穩的曲線,無明顯的形狀特徵。

圖4,標準殘差和槓桿值對比圖

對標準化殘差和槓桿值作圖,虛線表示的cooks距離等高線,通常用Cook距離度量的回歸影響點。本圖中沒有出現紅色的等高線,則說明數據中沒有特別影響回歸結果的異常點。

如果想把把4張圖畫在一起進行展示,可以改變畫布布局。

> par(mfrow=c(2,2))
> plot(lm.ab)

 

看到上面4幅中,每幅圖上都有一些點被特別的標記出來了,這些點是可能存在的異常值點,如果要對模型進行優化,我們可以從這些來入手。但終於本次殘差分析的結果已經很好了,所以對於異常點的優化,可能並不能明顯的提升模型的效果。

從圖中發現,索引編號為27和192的2個點在多幅圖中出現。我們假設這2個點為異常點,從數據中去掉這2個點,再進行顯著性檢驗和殘差分析。

# 查看27和192> df[c(27,192),] zn1.Close zn2.Close2016-03-01 09:27:00 14130 142052016-03-01 14:27:00 14035 14085# 新建數據集,去掉27和192> df2<-df[-c(27,192),]

回歸建模和顯著性檢驗。

> x2<-as.numeric(df2[,1])> y2<-as.numeric(df2[,2])> lm.ab2<-lm(y2 ~ 1+x2)> summary(lm.ab2)Call:lm(formula = y2 ~ 1 + x2)Residuals: Min 1Q Median 3Q Max -9.0356 -2.1542 -0.2727 3.3336 9.5879 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -3.293e+02 7.024e+01 -4.688 4.83e-06 ***x2 1.028e+00 5.004e-03 205.391 < 2e-16 ***---Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1Residual standard error: 4.117 on 221 degrees of freedomMultiple R-squared: 0.9948, Adjusted R-squared: 0.9948 F-statistic: 4.219e+04 on 1 and 221 DF, p-value: < 2.2e-16

對比這次的顯著性檢驗結果和之前結果,T檢驗,F檢驗 和 R^2檢驗,並沒有明顯的效果提升,結果和我預想的是一樣的。所以,通過殘差分析和異常點分析,我認為模型是有效的。

6. 模型預測

最後,我們獲得了一元線性回歸方程的公式,就可以對數據進行預測了。比如,對給定X=x0時,計算出y0=a+b*x0的值,並計算出置信度為1-α的預測區間。

當X=x0,Y=y0時,置信度為1-α的預測區間為

我們可以用R語言的predict()函數來計算預測值y0,和相應的預測區間。程序算法如下。

> new<-data.frame(x=14040)> lm.pred<-predict(lm.sol,new,interval="prediction",level=0.95)# 預測結果> lm.pred fit lwr upr1 14102.09 14093.73 14110.44

當x0=14040時,在預測區間為0.95的概率時,y0的值為 14102,預測區間為[14093.73,14110.44]。

我們通過圖形來表示。

> plot(y~x+1)> abline(lm.ab,col='red')> points(rep(newX$x,3),y=lm.pred,pch=19,col=c('red','blue','green'))

其中,紅色點為y0的值,藍色點為預測區間最小值,綠色點為預測區間最大值。

相關焦點

  • 的方法 線性回歸方程檢驗專題及常見問題 - CSDN
    相關係數的檢驗當已求得r值時,這個r值是真正刻畫了兩個變量之間的線性關係呢,還是僅僅由於樣本的偶然相關而引起的?僅憑相關係數的大小,不能直接說明變量之間是否存在線性相關,通過對r的檢驗,確定樣本是否抽自一個總體相關係數為0的總體,可以解答這個問題。
  • 對抗學習專題及常見問題 - CSDN
    那麼就是通過反覆加減對抗樣本製作時用的梯度,不斷詢問目標模型這些樣本的分類,從而使得雖然替代模型本身準確率不高,但梯度cost gradient sign matrix與其相關性高,做對抗樣本時輕鬆搞死原模型。而防禦方法對這種黑盒攻擊反而更沒有什麼用,因為原本模型裡的梯度只是被遮蔽mask了而不是消失。
  • spss多元線性回歸模型專題及常見問題 - CSDN
    多元線性回歸,主要是研究一個因變量與多個自變量之間的相關關係,跟一元回歸原理差不多,區別在於影響因素(自變量)更多些而已,例如:一元線性回歸方程 為: 代表隨機誤差, 其中隨機誤差分為:可解釋的誤差 和 不可解釋的誤差,隨機誤差必須滿足以下四個條件,多元線性方程才有意義(一元線性方程也一樣)1:服成正太分布,即指:隨機誤差
  • eviews線性回歸模型專題及常見問題 - CSDN
    掌握多元線性回歸模型的估計方法、掌握多重共線性模型的識別和修正。多元線性回歸模型,並識別和修正多重共線性。普通最小二乘法、簡單相關係數檢驗法、綜合判斷法、逐步回歸法。最小二乘估計的原理、t檢驗、F檢驗、擬合優度R方值。
  • t值 線性回歸專題及常見問題 - CSDN
    線性回歸 用線性回歸找到最佳擬合直線回歸的目的是預測數值型數據,根據輸入寫出一個目標值的計算公式,這個公式就是回歸方程(regression equation),變量前的係數(比如一元一次方程)稱為回歸係數(regression weights)。
  • spss 方法 線性回歸專題及常見問題 - CSDN
    案例來源:中華護理雜誌2018年7期一.案例北京市社區失能老年人的照護需求及其影響因素。點擊統計,出現如下對話框,回歸係數欄選擇估算值,殘差欄選擇得賓-沃森,另外還要勾選模型擬合和共線性診斷。該表格可以用來檢驗模型的統計學意義,由結果可得F=22.563,P<0.001,因此應該拒絕原假設,認為回歸模型通過了置信水平為0.05的F檢驗,即所擬合的方程具有統計學意義。(3)模型摘要
  • python 預測股票專題及常見問題 - CSDN
    0:,股票名字1:6.980>,今日開盤價2:6.960>,昨日收盤價3:7.010>,當前價格4:7.070>,今日最高價5:6.950>,今日最低價6:7.010>,競買價,即「買一」報價7:7.020>,競賣價,即「賣一」報價8:121033256>,成交的股票數,由於股票交易以一百股為基本單位,所以在使用時,通常把該值除以一百9:
  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • R語言從入門到精通:Day12--R語言統計--回歸分析
    回歸分析在現代統計學中非常重要,本次教程內容安排如下:  首先:看一看如何擬合和解釋回歸模型,然後回顧一系列鑑別模型潛在問題的方法,並學習如何解決它們;  其次:我們將探究變量選擇問題(對於所有可用的預測變量,如何確定哪些變量包含在最終的模型中?)
  • android 監聽屏幕鎖屏專題及常見問題 - CSDN
    > 鎖屏聽音樂(音頻),沒有鎖屏看視頻Android系統亮屏、鎖屏、屏幕解鎖事件(解決部分手機亮屏後未解鎖即進入resume狀態)- http://blog.csdn.net/oracleot/article/details/20378453Android 實現鎖屏的較完美方案- https://segmentfault.com/a/1190000003075989
  • 語言模型上
    比如我們要講到的語言模型n-gram就是一個這樣的簡化。N-gram實際應用舉例說了這麼N-gram語言模型的背景知識,咱們再來看看N-gram語言模型在自然語言處理中有哪些常見應用。PS:此部分以原理介紹為多,具體的技術實現細節請參考文中連結或者google。
  • cdn助力專題及常見問題 - CSDN
    本次騰訊雲大學大咖分享《騰訊雲計算人才加速計劃》專題之《CDN邊緣智能助力5G》邀請騰訊雲專家工程師 廖龍 將與大家共探技術與產業發展變化下如何引領時代。本課程主要有三章:5G元年,探索與思考,未來展望。5G元年在過去十年,整個中國網際網路的發展迅速。
  • reply shell專題及常見問題 - CSDN
    #if例子3if [ $n1 -eq 0 ]#if(($n1==0))then echo "輸入的是偶數"else echo "輸入的是基數"fi#for循環例子1#while read linefor i in `cat ip.txt`do echo -e "\033[32m scp -r
  • html5 平板電腦專題及常見問題 - CSDN
    Even if you skipped ancient sumerian language class at college, you can probably already guess that we're looking at some kind of table of data.
  • 華為雲智能專題及常見問題 - CSDN
    舉例來說,為了提升海量數據的實時處理能力,GaussDB(DWS)實時數倉增強了線性擴展能力,單節點每秒可以處理60萬條以上的數據;採用具有最廣泛開發者生態的數據分析語言,不管是流處理,還是實時分析,處理性能都會有數倍提升;GaussDB(DWS)的使用更簡單,減輕了程式設計師在開發、使用和運維等方面的工作量;GaussDB(DWS
  • 華為雲工業網際網路專題及常見問題 - CSDN
    再次,應該實事求是的宣傳功效,解決客戶實際問題,筆者很認同這一點,事實上核心的技術是要來解決實際問題的,而不是用來造概念或做秀的。最後是需要堅持開放的平臺,積極汲取全世界產業界先進的工具和能力。全中國擁有41個工業大類、191個中類和525個小類的工業企業,是全世界唯一擁有聯合國產業分類中全部工業門類的國家。而每類工業企業都有自己獨特的工業know-how和行業知識。
  • 基於R軟體實現多元線性回歸
    線性關係無疑是最簡單的類型,儘管實際中變量間關係並非線性這樣簡單,但由於線性關係比較直觀且易於理解,大多數實際分析中我們更期望首選將問題簡化為線性模型去解釋。簡單線性回歸初步探索變量間關係因此,不妨首先站在單個預測變量與響應變量角度上,通過一元線性回歸初步觀察每個環境因素和物種豐度的線性關係。
  • t值判斷顯著性專題及常見問題 - CSDN
    「 ggplot2中的顯著性標記」生活科學哥-R語言科學 2020-08-01  5:36最近由於工作的原因,有一段時間沒更新了,今天是周末,早上就是沒睡著,起來寫點東西,今天來講一講顯著性的標記。提出問題  顯著性值p是一個很常見的事。比如我們在對比兩組或者是多組數據時,對於兩組而言,會做Two Sample T Test,然後給出一個p值,判斷兩者差異的顯著性。在ggplot2中,兩組數據對比時,我們常用的,就是boxplot,那麼,如何在作出兩組或者多組的boxplot的同時,標記出顯著性的數據呢?
  • 有現狀 需求分析專題及常見問題 - CSDN
    另一方面也反映了目前應屆生培養中存在的問題,學校應該培養學生的理論知識和實踐能力。2017級9001元一月 2015級11522一月 騰訊、阿里巴巴、華為、今日頭條、京東等一系列大公司對於軟體行業人才需求都是極為龐大的,只要你擁有實力,那裡就會給你施展拳腳的機會。
  • 微信鬥圖表情包專題及常見問題 - CSDN
    參考:用python爬取鬥圖網列印從用戶哪裡獲得的消息,會發現,接收表情包返回的是一行文本信息:【收到不支持的消息類型,暫無法顯示】於是我們稍微改一改之前的代碼,對這行文本進行判斷,只要接收到這行消息,參考爬取代碼從鬥圖網隨機爬取一個表情包下載下來,再傳入臨時素材庫,獲取mediaid,再生成圖片消息發送給用戶就可以了。