RStudio_R 語言_基本計算

四則運算

跟我們平時所用的加(+)、減(-)、乘(*)和除(/)一樣

大家可以參考下列範例

x = 2 + 4  
y = x - 6
z = (y + 4 ) * x
z / x

四則運算

餘數和商數

計算餘數所使用的符號是"%%",可計算出除法運算中的餘數。

整除所使用的符號是"%/%",是指除法運算中只保留整數部分

``` R

計算9除以6的餘數

9 %% 6

計算12除3的商數

12 %/% 3 # ```

次方或平方根

次方的符號是"**"或"^",平方根是使用函數sqrt()。

平方根的計算也可以0.5次方替代

#計算2的平方
2 ** 2

#計算2的3次方
2 ^ 3

R的次方或平方根

絕對值

絕對值的函數名稱是abs(),不論函數內的值是正或負,結果皆顯示正數。

R的絕對值

> ### R的指數與對數

exp(x)是指自然數e的x次方,其中e的近似值是2.718282。

對數有2種類型。

1.以自然數e為底的對數,,語法是log(x)

2.以一般數y的對數,語法是log( x,y )

指數與對數

R的科學符號 e

與我們常看到的顯示方法很像,在這須注意數字與e不可空格,不然會發生Error錯誤

科學符號

pi 為系統預設值,但也是可以將其取代乘其他數字

假設不小心更改到,只需要利用函數 rm()去除變數即可

三角函數

R語言支援三角函數,有許多例如,sin(), cos() , tan() , asin() , acos() , atan() , sinh() , cosh() , tanh() , asinh() , acos() , atan()

四捨五入

四捨五入範例,第二項也可以填入負值設定為百位數

近似函數

R 語言中有3個求取近似值得函數

floor(x)   #可得到小於等於 x 的最近整數, floor(12.3) 得到 12, floor(-12.3) 得到 -13

ceiling(x)  #可得到大於等於 x 的最近整數, ceiling(12.3) 得到 13, ceiling(-12.3) 得到 -12

trunc(x)     #可直接取得整數trunc(12.3)得到 12, trunc(-12.3) 得到 -12

階乘 n!

在數學中,正整數的階乘是所有小於及等於該數的正整數的乘積

factorial(x) 可以返回 x 的階乘

例如factorial(5) = 5 * 4 * 3 * 2 * 1 = 120

無限大 Infinity

R 語言可以處理無限大的值,使用代號值 Inf

如果是負無限大則是 -Inf

也可以將某一個數字除以 0 就可獲得無限大

若是要查詢某一變數是否為無限大的數值

可以利用 is.infinite(x)來判斷

如果 x 是無限大則傳回邏輯值 TRUE 否則傳回 FALSE

Not a Number(NaN)

可以解釋為非數字或稱無定義數字

例如無限大除以無限大

若是有NaN值用於計算結果都會是NaN

Not Available (缺失值,NA)

常稱為缺失值或遺漏值(Missing Value)

一樣利用 is.na 我們就可以判斷是否有缺失的數值

而詳細的處理方式可以參考下面連結

>R筆記–(10)遺漏值處理(Impute Missing Value) >[name=skydome20][time=Wed, Jun 06, 2016 11:16 AM]

在進行資料科學相關活動時一定會遇到數據中有缺失值的問題

若是有缺失值對於之後資料整理(或稱資料清洗)上會有困難

如果沒有好的資料對於後續的分析就可能會有很大的偏差

下面我們先以一個簡單數列來測試

na.test <- c(1,2,3,NA,5,6,NA)
is.na(na.test)
可以看到回傳一堆 TRUE and FALSE 

這時我們可以利用sum()計算遺漏值的個數

sum(is.na(na.test))```

缺失值處理

在處理遺漏值時簡單可以直接移除資料或是用平均值來填補遺漏值

但這樣的做法並不推薦:前者會讓資料減少,後者不會產生任何資訊

因此在缺失值處理上推薦==k-Nearest Neighbours==或==mice套件==

來填補遺漏值。其中,mice的全名為Multivariate Imputation via Chained Equations。

兩者的概念相同,都是先==模擬遺漏值==後進行==填補(impute)==


我們利用R內建數據集iris來進行測試

R內建的鳶尾花(iris)資料集是非常著名的生物資訊資料集之一

取自美國加州大學歐文分校的機械學習資料庫

資料的筆數為150筆,共有五個欄位:

1. 花萼長度(Sepal Length):計算單位是公分 2. 花萼寬度(Sepal Width):計算單位是公分 3. 花瓣長度(Petal Length) :計算單位是公分 4. 花瓣寬度(Petal Width):計算單位是公分 5. 類別(Class):可分為Setosa,Versicolor和Virginica三個品種

# 安裝missForest套件
install.packages("missForest") 
require(missForest)

# 在iris資料內,隨機產生10%的遺漏值
iris.na.test <- prodNA(iris, noNA = 0.1)

#查看前6筆數據
head(iris.na.test)

直接移除有缺失值的資料

# 移除有遺漏值的資料
rm.iris.na.test <- iris.na.test[complete.cases(iris.na.test), ]

上面指令是利用complete.cases(iris.na.test)取得每一列數據中是否有缺失值

再利用中括號 [] 來指定元素的索引(index)回傳

但這麼做並不太好,因為會造成資訊損失(information loss)

使用平均數填補遺漏值

# 以下用平均數,來填補某一欄位的遺漏值
# 先建立一個初始資料集
mean.iris.na.test <- iris.na.test

# 取得第一欄位的平均數,na.rm = T 則是忽略缺失值計算
mean.row1 <- mean(mean.iris.na.test[, 1], na.rm = T)           

# 用第一欄位的平均數,填補第一欄位的遺漏值
na.rows <- is.na(mean.iris.na.test[, 1])

# 用第一欄位的平均數,填補第一欄位的遺漏值
mean.iris.na.test [na.rows, 1] <- mean.row1

K-Nearest Neighbours填補遺漏值

K-Nearest Neighbours(KNN演算法,又譯K-近鄰演算法)

最近鄰居法採用向量空間模型來分類,概念為相同類別的案例

彼此的相似度高,而可以藉由計算與已知類別案例之相似度

來評估未知類別案例可能的分類

下面兩張圖可以很清楚了解KNN的原理 >擷取至[Machine Learning] kNN分類演算法 >

# 安裝DMwR套件

install.packages("DMwR") 
require(DMwR)

imputeData <- knnImputation(iris.na.test)

head(imputeData)

使用上非常簡單

Multivariate Imputation by Chained Equations (鍊式方程的多元插補,MICE)

mice即是基於多重填補法構造的

基本思想是對於一個具有缺失值的變量

用其他變量的數據對這個變量進行擬合

再用擬合的預測值對這個變量的缺失值進行填補

在MICE裡面,提供了很多資料探勘的模型(linear regression, logistic regression, cart, random forest, boostrap……),來針對遺漏值進行預測!

概念很簡單:現在我們有欄位V1,V2,V3……Vn,每個欄位裡面都有遺漏值。

當我們要填補V1的遺漏值時,就先把V2,V3……Vn的欄位當作自變數(X)

把V1當作應變數(Y),並且進行建模,然後用預測的結果來填補V1的遺漏值。

同理,針對V2,就用V1,V3……Vn建模,然後用預測的結果來填補V2的遺漏值。

(由於這個函式,背後有使用Gibbs sampling(一種抽樣手法)。

即使使用某個模型進行遺漏值填補,也會因為抽樣手法,造成最後填補的結果有些許不同)

# 安裝 mice 套件
install.packages("mice")
require(mice)

mice.iris.na.test <- mice(iris.na.test,
                  m = 3,           # 產生三個被填補好的資料表
                  maxit = 50,      # max iteration
                  method = "cart", # 使用CART決策樹,進行遺漏值預測
                  seed = 188)      # set.seed(),令抽樣每次都一樣

complete(mice.iris.na.test, 1) # 1st data
complete(mice.iris.na.test, 2) # 2nd data
complete(mice.iris.na.test, 3) # 3rd data

參考文章

>R筆記–(10)遺漏值處理(Impute Missing Value) >[name=skydome20] >Missing Value Treatment | 遺失值處理 | 統計 R語言 >[name=果醬珍珍 Jam Lee] >R语言处理缺失数据的高级方法 >[name=feng_lilan] >[R语言中的缺失值处理] (https://blog.csdn.net/u011596455/article/details/79608969) >[name=HuFeiHu-Blog] >>Data prep and pattern[name=Selva Prabhakaran]

今天先分享到這邊希望大家都有收穫

網站所有文章皆為 H.B. Liu 撰寫,歡迎分享但勿轉製

也可以到粉專私訊我

喜歡我分享的內容也可以按讚追蹤一下我的粉專

幫我分享給所~~~有的朋友 \o/

有所錯誤歡迎指教

<

留言

這個網誌中的熱門文章

Excel_統計_簡單線性回歸_檢量線

軟體分享_Imagej_顆粒計算_孔隙率計算_孔徑分布

分享_最美的心智圖軟體_Coggle_完整教學