用R語言做簡單線性回歸和指數線性回歸

2021-08-16 10:16:17 字數 2171 閱讀 5761

x

y

首先先計算他們的相關性:

cor(x,y)
值為 

0.964 

fit
coef(fit) ##檢視回歸函式係數
結果為:

(intercept)                x 

-2.082360e+05  1.494401e-02 

所謂線性回歸就是 y=a+bx 求a,b的值。結果中,a值就是intercept截距值,b值為第二個x系數值。

我們來畫個圖

plot(x,y, xlab="x value", ylab="y value") #打出x,y實際關係的散點圖  

abline(fit) #新增線性回歸線

當已知x值時,如何求y值呢? 用公式

y=a+bx=coef(fit)[1]+coef(fit)[2]*x  

即可。我們用實際數字驗證一下:

x_test

y_test

y_test為

[1] 69572.07 10796.75

但在實際觀測中,當x下降到14656891時,y不可能是10798。說明我們這個模型在最後回歸的時候斜率太大了,下降太快,不太符合實際。因此我們又建立了乙個非線性回歸,即用了指數回歸模型來估計。

指數模型為y=a*x^b。**如下:

x

yfit02

執行時很快發現我們的**報錯 「singular gradient

奇藝梯度」。是因為start要求對係數的估計需要盡量貼近真實值,也就是說要盡量在乙個數量級上。

但是不管你怎麼改,就會發現這個回歸特別難搞,各種報錯,是因為需要回歸的值都太大了。所以我找了個特別簡單有效的方法——————就是降級,哈哈!

把x和y從10e6下降到10e2,就會好算啦~比如在這個例子裡:

x

yfit02

plot(x,y) ##畫散點圖

lines(x,fitted(fit02)) ##新增回歸曲線

辣麼,如何已知x求y呢?

summary(fit02)
執行結果可以看到所有回歸曲線的引數:

formula: y ~ a * x^b

parameters:

estimate   std. error t   value    pr(>|t|)   

a 0.001638   0.002441   0.671  0.55015   

b 2.877748   0.489346   5.881  0.00981 **

---signif. codes:  0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1

residual standard error: 0.638 on 3 degrees of freedom

number of iterations to convergence: 25 

achieved convergence tolerance: 1.514e-06

這其中,係數a值就為引數中的a值0.001638,b值就為引數中的b值2.877748。求解如下:

x_test

x_test

y_test

結果為

y_test

[1] 7.361649 3.714399

因為y被降過級,因此實際答案應為

y_test

y_test

[1] 73616.49 37143.99

數值相對符合實際。不過還要用真實值檢驗。當有更多的樣本時,需要定時修正模型。

reference: 

R語言學習之簡單線性回歸

從許多方面來看,回歸分析都是統計學的核心。它其實是乙個廣義的概念,通指那些用乙個或多個 變數 也稱自變數或解釋變數 來 響應變數 也稱因變數 效標變數或結果變數 的方法。即通過已知的點來建立擬合模型,用給定的x值來 y值,找到一條合適的擬合曲線,算出合適的斜率和方差。只有乙個自變數的情況稱為簡單回歸...

用TensorFlow實現簡單線性回歸

使用tensorflow 構造乙個神經元,簡單的線性回歸網路。問題 現有一組有雜訊的樣本資料,共2000個,每乙個樣本 x 有 3 個特徵,對應乙個標籤 y 值。從資料樣本中學習 y w x b y w times x b y w x b 中的引數 首先我們來生成樣本資料,w real 和 b re...

r語言 面板資料回歸 R語言高階之廣義線性回歸

廣義線性回歸是一類常用的統計模型,在各個領域都有著廣泛的應用。今天我會以邏輯回歸和泊松回歸為例,講解如何在r語言中建立廣義線性模型。在r語言中我們通常使用glm 函式來構建廣義線性模型,glm實際上是generalized linear model 廣義線性模型 的首字母縮寫,它的具體形式如下所示 ...