1. 程式人生 > >R語言--統計(六)

R語言--統計(六)

1. 平均值、中位數和模式
  • Mean平均值
    I. 語法
    用於計算R中的平均值的基本語法是 -
    mean(x, trim = 0, na.rm = FALSE, ...)
    以下是所使用的引數的描述 -
    -- x是輸入向量。
    -- trim用於從排序向量的兩端丟棄一些觀察結果。
    -- na.rm用於從輸入向量中刪除缺失值。

示例:

# 建立向量
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5)
# 執行
result.mean <- mean(x)
print(result.mean)

列印結果:


3110861-864985be2e68d8e3.png
圖1.png

II. 修剪選項

# 建立向量
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5)
# 執行
result.mean <- mean(x)
print(result.mean)
# 修剪選項
result.mean <- mean(x, trim = 0.3)
print(result.mean)

列印結果:


3110861-3d309628f69a3987.png 圖2.png

III. NA選項

# NA選項--如果有缺失值,則平均函式返回NA
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5, NA)
result.mean <- mean(x)
print(result.mean)

result.mean <- mean(x, na.rm = TRUE)
print(result.mean)

列印結果:


3110861-bef50146f6a7e745.png 圖3.png
  • Median中位數
    I. 語法
    計算R語言中位數的基本語法是 -
    median(x, na.rm = FALSE)
    以下是所使用的引數的描述 -
    -- x
    是輸入向量。
    -- na.rm用於從輸入向量中刪除缺失值。

II. 示例

# 建立向量
x <- c(12, 7, 3, 4.2, 18, 2, 54, -21, 8, -5)
# 查詢中位數
median.result <- median(x)
print(median.result)

列印結果:


3110861-76345f3cd292429e.png 圖4.png
  • Mode模式
    I. 模式是一組資料中出現次數最多的值。
    II. 示例
# 建立函式
getmode <- function(v) {
    uniqv <- unique(v)
    uniqv[which.max(tabulate(match(v, uniqv)))]
}
# 建立向量
v <- c(2, 1, 2, 3, 1, 2, 3, 4, 1, 5, 5, 3, 2, 3)
# 計算模式
result <- getmode(v)
print(result)

# 建立字元向量
charv <- c("o", "it", "the", "it", "it")
# 獲取模式
result <- getmode(charv)
print(result)

列印結果:


3110861-daf9e029eb0bdabc.png 圖5.png
2. 線性迴歸
  • 方程
    線性迴歸的一般數學方程為 -
y = ax + b

以下是所使用的引數的描述 -
-- y是響應變數。
-- x是預測變數。
-- ab被稱為係數常數。

  • 建立迴歸步驟
1. 進行收集高度和相應重量的觀測值的樣本的實驗。
2. 使用R語言中的lm()函式建立關係模型。
3. 從建立的模型中找到係數,並使用這些建立數學方程
4. 獲得關係模型的摘要以瞭解預測中的平均誤差。 也稱為殘差。
5. 為了預測新人的體重,使用R中的predict()函式。
  • LM()函式
    此函式建立預測變數和響應變數之間的關係模型。
    語法
    線性迴歸中lm()函式的基本語法是 -
lm(formula,data)

以下是所使用的引數的說明 -
-- 公式是表示xy之間的關係的符號。
-- 資料是應用公式的向量。

  • 建立關係模型並獲取係數
# 建立關係模型並獲取係數
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 應用lm()函式
relation <- lm(y~x)
print(relation)

列印結果:


3110861-d7b8079f72540954.png 圖6.png

其中a=0.6746, b=-38.4551

  • 獲取相關的摘要
# 獲取相關摘要
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 應用lm()函式
relation <- lm(y~x)
print(summary(relation))

列印結果:


3110861-b00b1166a7f7059e.png 圖7.png
  • predict()函式
    語法
    線性迴歸中的predict()的基本語法是 -
    predict(object, newdata)
    以下是所使用的引數的描述 -
    -- object是已使用lm()函式建立的公式。
    -- newdata是包含預測變數的新值的向量。

  • 預測新人的體重

# 預測新人體重
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 應用lm()函式
relation <- lm(y~x)
# 身高170,預測體重
a <- data.frame(x = 170)
result <- predict(relation, a)
print(result)

列印結果:


3110861-c23d26ec3b78dea1.png 圖8.png
  • 以圖形方式視覺化迴歸
# 圖形方式視覺化迴歸
x <- c(151, 174, 138, 186, 128, 136, 179, 163, 152, 131)
y <- c(63, 81, 56, 91, 47, 57, 76, 72, 62, 48)
# 應用lm()函式
relation <- lm(y~x)
# 設定檔名
png(file = "linearregression.png")
# 繪製圖表
# 繪製點
plot(y, x, col = "blue", main = "Height & Weight Regression")
# 繪製線
abline(lm(x~y), cex = 1.3, pch = 16, xlab = "Weight in Kg", ylab = "Height in cm")

# 儲存檔案
dev.off()

效果:


3110861-bc3e4f0cdda0d854.png linearregression.png
3. 多重回歸
  • 方程
    多元迴歸的一般數學方程為 -
y = a + b1x1 + b2x2 +...bnxn

以下是所使用的引數的描述 -
-- y是響應變數。
-- a,b1,b2 ... bn是係數。
-- x1,x2,... xn是預測變數。

  • lm()函式
    此函式建立預測變數和響應變數之間的關係模型。
    語法
    lm()函式在多元迴歸中的基本語法是 -
lm(y ~ x1+x2+x3...,data)

以下是所使用的引數的描述 -
-- 公式是表示響應變數和預測變數之間的關係的符號。
-- 資料是應用公式的向量。

  • 建立關係模型並獲取係數
# 建立模型並獲取係數
input <- mtcars[,c("mpg", "disp", "hp", "wt")]
# 建立關係模型
model <- lm(mpg~disp+hp+wt, data = input)
# 顯示模型
print(model)
# 列印係數
cat("# # # # The Coefficient Values # # # ","
")
# 列印係數
a <- coef(model)[1]
print(a)
Xdisp <- coef(model)[2]
Xhp <- coef(model)[3]
Xwt <- coef(model)[4]
print(Xdisp)
print(Xhp)
print(Xwt)

列印結果:


3110861-f0461a812e1cac52.png 圖9.png
4. 邏輯迴歸
  • 邏輯迴歸
y = 1/(1+e^-(a+b1x1+b2x2+b3x3+...))

以下是所使用的引數的描述 -
-- y是響應變數。
-- x是預測變數。
-- a和b是作為數字常數的係數。
用於建立迴歸模型的函式是glm()函式。

  • 語法
    邏輯迴歸中glm()函式的基本語法是 -
glm(formula,data,family)

以下是所使用的引數的描述 -
-- formula是表示變數之間的關係的符號。
-- data是給出這些變數的值的資料集。
-- family是R語言物件來指定模型的細節。 它的值是二項邏輯迴歸。

  • 建立迴歸模型
# 建立迴歸模型
input <- mtcars[,c("am", "cyl", "hp", "wt")]
am.data = glm(formula = am ~ cyl + hp + wt, data = input, family = binomial)
print(summary(am.data))

列印結果:


3110861-692cbd17454db4e4.png 圖10.png
5. 標準分佈
  • 函式
dnorm(x, mean, sd)
pnorm(x, mean, sd)
qnorm(p, mean, sd)
rnorm(n, mean, sd)

以下是在上述功能中使用的引數的描述 -
-- x是數字的向量。
-- p是概率的向量。
-- n是觀察的數量(樣本大小)。
-- mean是樣本資料的平均值。 它的預設值為零。
-- sd是標準偏差。 它的預設值為1。

  • dnorm()
# dnorm() - 該函式給出給定平均值和標準偏差在每個點的概率分佈的高度。
x <- seq(-10, 10, .1)
y <- dnorm(x, mean = 2.5, sd = 0.5)
# 設定檔名
png(file = "dnorm.png")
# 繪製點
plot(x,y)
dev.off()

效果:


3110861-fb697d9b07ce9806.png dnorm.png
  • pnorm()
# pnorm() - 該函式給出正態分佈隨機數的概率小於給定數的值。 它也被稱為“累積分佈函式”。
x <- seq(-10, 10, .2)
y <- pnorm(x, mean = 2.5, sd = 2)
# 設定檔名
png(file = "pnorm.png")
# 繪製點
plot(x, y)
dev.off()

效果:


3110861-6720eb296b1f4016.png pnorm.png
  • qnorm
# qnorm() - 該函式採用概率值,並給出累積值與概率值匹配的數字。
x <- seq(0, 1, by = 0.02)
y <- qnorm(x, mean = 2, sd = 1)
# 設定檔名
png(file = "qnorm.png")
plot(x, y)
dev.off()

效果:


3110861-9fc5643c4ac67649.png qnorm.png
  • rnorm()
# rnorm() - 此函式用於生成分佈正常的隨機數。 它將樣本大小作為輸入,並生成許多隨機數。 我們繪製一個直方圖來顯示生成的數字的分佈。
y = rnorm(50)
png(file = "rnorm.png")
hist(y, main = "Normal Distribution")
dev.off()

效果:


3110861-22fcf178b2ad31d9.png rnorm.png
6. 二項分佈
  • 函式
dbinom(x, size, prob)
pbinom(x, size, prob)
qbinom(p, size, prob)
rbinom(n, size, prob)

以下是所使用的引數的描述 -
-- x是數字的向量。
-- p是概率向量。
-- n是觀察的數量。
-- size是試驗的數量。
-- prob是每個試驗成功的概率。

  • dbinom()
x = seq(0, 50, 1)
y = dbinom(x, 50, 0.5)
png(file = "dbinom.png")
plot(x, y)
dev.off()

效果:


3110861-5de9a82fee0f4913.png dbinom.png
  • pbinom()
# pbinom() - 此函式給出事件的累積概率。 它是表示概率的單個值。
x <- pbinom(26, 51, 0.5)
print(x)

列印結果:


3110861-150ffea00a3a80c7.png 圖11.png
  • qbinom()
# qbinom() - 該函式採用概率值,並給出累積值與概率值匹配的數字。
x <- qbinom(0.25, 51, 1/2)
print(x)

列印結果:


3110861-a808b2619584609b.png 圖12.png
  • rbinom()
# rbinom() - 該函式從給定樣本產生給定概率的所需數量的隨機值。
x <- rbinom(8, 150, .4)
print(x)

列印結果:


3110861-914dcf59ce61631b.png 圖13.png
7. 泊松分佈
  • 數學方程
log(y) = a + b1x1 + b2x2 + bnxn.....

以下是所使用的引數的描述 -

  • y是響應變數。
  • a和b是數字係數。
  • x是預測變數。
    用於建立泊松迴歸模型的函式是glm()函式。
  • glm()語法
glm(formula,data,family)

以下是在上述功能中使用的引數的描述 -
-- formula是表示變數之間的關係的符號。
-- data是給出這些變數的值的資料集。
-- family是R語言物件來指定模型的細節。 它的值是“泊松”的邏輯迴歸。

  • 建立迴歸
# 建立迴歸模型
# 內建的資料集“warpbreaks”
output <- glm(formula = breaks ~ wool + tension,
        data = warpbreaks,
        family = poisson
    )
print(summary(output))

列印結果:


3110861-7a82a18f94256886.png 圖14.png
8. 協方差分析
  • 模型與分類變數和預測變數之間的相互作用
# 模型與分類變數和預測變數之間的相互作用
result <- aov(mpg~hp*am, data = mtcars)
print(summary(result))

列印結果:


3110861-d5b5ab1fcbf3e80e.png 圖15.png
  • 沒有分類變數和預測變數之間相互作用的模型
# 沒有分類變數和預測變數之間相互作用的模型
result <- aov(mpg~hp+am, data = mtcars)
print(summary(result))

列印結果:


3110861-06563c18609f5375.png 圖16.png
  • 比較兩個模型
# 比較兩個模型
input <- mtcars
result1 <- aov(mpg~hp*am, data = input)
result2 <- aov(mpg~hp+am, data = input)
# 比較兩個模型
print(anova(result1, result2))

列印結果:


3110861-eac637daf5abd3ed.png 圖17.png
9. 時間序列分析
  • 語法
timeseries.object.name <-  ts(data, start, end, frequency)

以下是所使用的引數的描述 -
-- data是包含在時間序列中使用的值的向量或矩陣。
-- start以時間序列指定第一次觀察的開始時間。
-- end指定時間序列中最後一次觀測的結束時間。
-- frequency指定每單位時間的觀測數。
除了引數“data”,所有其他引數是可選的。

  • 單時間序列
# 單時間序列
rainfall <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)
# 轉換為時間序列物件
rainfall.timeseries <- ts(rainfall, start = c(2012, 1), frequency = 12)
print(rainfall.timeseries)
# 設定圖片
png(file = "rainfall.png")
# 繪圖
plot(rainfall.timeseries)
# 儲存圖片
dev.off()

列印結果:


3110861-0b09eae8a6763759.png 圖18.png

效果:


3110861-6691d51af213cfa1.png rainfall.png
  • 不同的時間間隔
    ts()函式中的頻率引數值決定了測量資料點的時間間隔。 值為12表示時間序列為12個月。 其他值及其含義如下 -
    -- 頻率= 12指定一年中每個月的資料點。
    -- 頻率= 4每年的每個季度的資料點。
    -- 頻率= 6每小時的10分鐘的資料點。
    -- 頻率= 24 * 6將一天的每10分鐘的資料點固定。
  • 多時間序列
# 多時間序列
rainfall1 <- c(799,1174.8,865.1,1334.6,635.4,918.5,685.5,998.6,784.2,985,882.8,1071)
rainfall2 <- c(655,1306.9,1323.4,1172.2,562.2,824,822.4,1265.5,799.6,1105.6,1106.7,1337.8)
# 轉換為矩陣
combined.rainfall <- matrix(c(rainfall1, rainfall2), nrow = 12)
# 轉換為時間序列
rainfall.timeseries <- ts(combined.rainfall, start = c(2012, 1), frequency = 12)
print(rainfall.timeseries)
# 設定檔名
png(file = "rainfall_combined.png")
# 繪製點
plot(rainfall.timeseries, main = "Multiple Time Series")
# 儲存檔案
dev.off()

列印結果:


3110861-dc71031ec0f63279.png 圖19.png

效果:


3110861-a694da5fdf910950.png rainfall_combined.png
10. 非線性最小二乘
  • 語法
nls(formula, data, start)

以下是所使用的引數的描述 -
-- formula是包括變數和引數的非線性模型公式。
-- data是用於計算公式中變數的資料框。
-- start是起始估計的命名列表或命名數字向量。

  • 示例
# 非線性最小二乘法
xvalues <- c(1.6,2.1,2,2.23,3.71,3.25,3.4,3.86,1.19,2.21)
yvalues <- c(5.19,7.43,6.94,8.11,18.75,14.88,16.06,19.12,3.21,7.58)
# 設定圖片
png(file = "nls.png")
# 繪圖
plot(xvalues, yvalues)
# 取假設值並適合模型。
model <- nls(yvalues ~ b1 * xvalues^2 + b2, start = list(b1 = 1, b2 = 3))
# 繪製圖表
new.data <- data.frame(xvalues = seq(min(xvalues), max(xvalues), len = 100))
lines(new.data$xvalues, predict(model, newdata = new.data))
# 儲存檔案
dev.off()
# 獲取model平法和
print(sum(resid(model)^2))
# 獲得所選系數值的置信區間。
print(confint(model))

列印結果:


3110861-2c22f3c35c20c364.png 圖20.png

效果圖:


3110861-472d5aa445522b94.png nls.png
11. 決策樹
  • 安裝包
# 安裝包 -- party包中用於建立和分析決策樹的函式ctree()
install.packages("party", repos="https://cran.cnr.berkeley.edu/")
  • 語法
ctree(formula, data)

以下是所使用的引數的描述 -
-- formula是描述預測變數和響應變數的公式。
-- data是所使用的資料集的名稱。

  • 建立決策樹
# 建立決策樹
library(party)
# 建立輸入資料幀
input.data <- readingSkills[c(1:105),]
# 設定檔名
png(file = "decision_tree.png")
# 建立樹
output.tree <- ctree(
        nativeSpeaker ~ age + shoeSize + score,
        data = input.data
    )
# 繪圖
plot(output.tree)
# 儲存檔案
dev.off()

列印結果:


3110861-81a10c26797415e5.png 圖21.png

效果:


3110861-2c68aeed9034d82c.png decision_tree.png
12. 隨機森林演算法
  • 安裝包
# 安裝包 -- randomForest具有函式randomForest(),用於建立和分析隨機森林。
install.packages("randomForest", repos="https://cran.cnr.berkeley.edu/")
  • 語法
randomForest(formula, data)

以下是所使用的引數的描述 -
formula是描述預測變數和響應變數的公式。
data是所使用的資料集的名稱。

  • 建立森林
library(party)
library(randomForest)

# 建立森林
output.forest <- randomForest(nativeSpeaker ~ age + shoeSize + score, data = readingSkills)
print(output.forest)
print(importance(output.forest, type = 2))

列印結果:


3110861-0fcbf78d78bfabcb.png 圖22.png
13. 生存分析
  • 語法
Surv(time,event)
survfit(formula)

以下是所使用的引數的描述 -
-- time是直到事件發生的跟蹤時間。
-- event指示預期事件的發生的狀態。
-- formula是預測變數之間的關係。

  • 應用生存分析
# 應用函式
library("survival")
# 建立生存物件
survfit(Surv(pbc$time, pbc$status == 2) ~ 1)
# 設定檔名
png(file = "survival.png")
# 繪製圖
plot(survfit(Surv(pbc$time, pbc$status == 2) ~ 1))
# 儲存
dev.off()

列印結果:


3110861-d1c49a002c64178f.png 圖23.png

效果圖:


3110861-187162b239c07d21.png survival.png
14. 卡方檢驗
  • 語法
chisq.test(data)

以下是所使用的引數的描述 -
-- data是以包含觀察中變數的計數值的表的形式的資料。

  • 卡方校驗
# 卡方檢驗
library("MASS")
# 建立資料幀
car.data <- data.frame(Cars93$AirBags, Cars93$Type)
# 建立表
car.data = table(Cars93$AirBags, Cars93$Type)
print(car.data)
# 卡方校驗
print(chisq.test(car.data))

列印結果:


3110861-0f2e6423b6ca89ba.png 圖24.png

程式碼下載