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 廣義線性模型 的首字母縮寫,它的具體形式如下所示 ...