【R語言進行數據挖掘】迴歸分析

一、線性迴歸
線性迴歸就是使用下面的預測函數預測將來觀測量:git

其中,x1,x2,...,xk都是預測變量(影響預測的因素),y是須要預測的目標變量(被預測變量)。函數

線性迴歸模型的數據來源於澳大利亞的CPI數據,選取的是2008年到2011年的季度數據。3d

rep函數裏面的第一個參數是向量的起始時間,從2008-2010,第二個參數表示向量裏面的每一個元素都被4個小時間段。

year <- rep(2008:2010, each=4)
quarter <- rep(1:4, 3)
cpi <- c(162.2, 164.6, 166.5, 166.0,orm

  • 166.2, 167.0, 168.6, 169.5,
  • 171.0, 172.1, 173.3, 174.0)blog

    plot函數中axat=「n」表示橫座標刻度的標註是沒有的

    plot(cpi, xaxt="n", ylab="CPI", xlab="")事件

    繪製橫座標軸

    axis(1, labels=paste(year,quarter,sep="Q"), at=1:12, las=3)
    接下來,觀察CPI與其餘變量例如‘year(年份)’和‘quarter(季度)’之間的相關關係。ip

cor(year,cpi)
cor(quarter,cpi)
輸出以下:ci

cor(quarter,cpi)
[1] 0.3738028
cor(year,cpi)
[1] 0.9096316
cor(quarter,cpi)
[1] 0.3738028
由上圖可知,CPI與年度之間的關係是正相關,而且很是緊密,相關係數接近1;而它與季度之間的相關係數大約爲0.37,只是有着微弱的正相關,關係並不明顯。文檔

而後使用lm()函數創建一個線性迴歸模型,其中年份和季度爲預測因素,CPI爲預測目標。it

創建模型fit

fit <- lm(cpi ~ year + quarter)
fit
輸出結果以下:

Call:
lm(formula = cpi ~ year + quarter)

Coefficients:
(Intercept) year quarter
-7644.488 3.888 1.167

由上面的輸出結果能夠創建如下模型公式計算CPI:

其中,c0、c1和c2都是模型fit的參數分別是-7644.48八、3.888和1.167。所以2011年的CPI能夠經過如下方式計算:

(cpi2011 <-fit$coefficients[[1]] + fit$coefficients[[2]]*2011 +

  • fit$coefficients[[3]]*(1:4))
    輸出的2011年的季度CPI數據分別是174.441七、175.608三、176.7750和177.9417。

模型的具體參數能夠經過如下代碼查看:

查看模型的屬性

attributes(fit)
$names
[1] "coefficients" "residuals" "effects" "rank" "fitted.values"
[6] "assign" "qr" "df.residual" "xlevels" "call"
[11] "terms" "model"
$class
[1] "lm"

模型的參數

fit$coefficients

觀測值與擬合的線性模型之間的偏差,也稱爲殘差

residuals(fit)
1 2 3 4 5 6 7
-0.57916667 0.65416667 1.38750000 -0.27916667 -0.46666667 -0.83333333 -0.40000000
8 9 10 11 12
-0.66666667 0.44583333 0.37916667 0.41250000 -0.05416667
除了將數據代入創建的預測模型公式中,還能夠經過使用predict()預測將來的值。

輸入預測時間

data2011 <- data.frame(year=2011, quarter=1:4)
cpi2011 <- predict(fit, newdata=data2011)

設置散點圖上的觀測值和預測值對應點的風格(顏色和形狀)

style <- c(rep(1,12), rep(2,4))
plot(c(cpi, cpi2011), xaxt="n", ylab="CPI", xlab="", pch=style, col=style)

標籤中sep參數設置年份與季度之間的間隔

axis(1, at=1:16, las=3,

  • labels=c(paste(year,quarter,sep="Q"), "2011Q1", "2011Q2", "2011Q3", "2011Q4"))
    預測結果以下:

上圖中紅色的三角形就是預測值。

二、Logistic迴歸

Logistic迴歸是經過將數據擬合到一條線上並根據簡歷的曲線模型預測事件發生的機率。能夠經過如下等式來創建一個Logistic迴歸模型:

其中,x1,x2,...,xk是預測因素,y是預測目標。令

,上面的等式被轉換成:

使用函數glm()並設置響應變量(被解釋變量)服從二項分佈(family='binomial,'link='logit')創建Logistic迴歸模型,更多關於Logistic迴歸模型的內容能夠經過如下連接查閱:

· R Data Analysis Examples - Logit Regression
· 《LogisticRegression (with R)》
三、廣義線性模型

廣義線性模型(generalizedlinear model, GLM)是簡單最小二乘迴歸(OLS)的擴展,響應變量(即模型的因變量)能夠是正整數或分類數據,其分佈爲某指數分佈族。其次響應變量指望值的函數(鏈接函數)與預測變量之間的關係爲線性關係。所以在進行GLM建模時,須要指定分佈類型和鏈接函數。這個創建模型的分佈參數包括binomaial(兩項分佈)、gaussian(正態分佈)、gamma(伽馬分佈)、poisson(泊松分佈)等。

廣義線性模型能夠經過glm()函數創建,使用的數據是包‘TH.data’自帶的bodyfat數據集。

data("bodyfat", package="TH.data")
myFormula <- DEXfat ~ age + waistcirc + hipcirc + elbowbreadth + kneebreadth

設置響應變量服從正態分佈,對應的鏈接函數服從對數分佈

bodyfat.glm <- glm(myFormula, family = gaussian("log"), data = bodyfat)

預測類型爲響應變量

pred <- predict(bodyfat.glm, type="response")
plot(bodyfat$DEXfat, pred, xlab="Observed Values", ylab="Predicted Values")
abline(a=0, b=1)
預測結果檢驗以下圖所示:

由上圖可知,模型雖然也有離羣點,可是大部分的數據都是落在直線上或者附近的,也就說明模型創建的比較好,能較好的擬合數據。

四、非線性迴歸

若是說線性模型是擬合擬合一條最靠近數據點的直線,那麼非線性模型就是經過數據擬合一條曲線。在R中可使用函數nls()創建一個非線性迴歸模型,具體的使用方法能夠經過輸入'?nls()'查看該函數的文檔。

相關文章
相關標籤/搜索