title: DALS001-數(shù)據(jù)準(zhǔn)備(Getting Started)
date: 2019-07-21 12:0:00
type: "tags"
tags:
- R包
categories: - 生物統(tǒng)計(jì)
前言
本書(shū)是《Data Analysis for the Life Sciences》這本書(shū)的讀書(shū)筆記。

此書(shū)一共分了10部分,分別為:
- 數(shù)據(jù)準(zhǔn)備(Getting Started)
- 統(tǒng)計(jì)推斷(Inference)
- 數(shù)據(jù)挖掘(Exploratory Data Analysis)
- 矩陣代數(shù)(Matrix Algebra)
- 線性模型(Linear Models)
- 高維數(shù)據(jù)推斷(Inference For high Dimensional Data)
- 統(tǒng)計(jì)模型(Statistical Models)
- 距離與降低(Distance and Dimension Reduction)
- 基礎(chǔ)機(jī)器學(xué)習(xí)(Basic Machine Learning)
- 批次效應(yīng)(Batch Effects)
由于這本書(shū)是為生命科學(xué)相關(guān)專業(yè)而寫(xiě)的,考慮到相關(guān)專業(yè)學(xué)生數(shù)理功底太弱,書(shū)中并沒(méi)涉及很復(fù)雜的數(shù)學(xué)與統(tǒng)計(jì)學(xué)知識(shí),還是很好理解的。
R語(yǔ)言包與原始數(shù)據(jù)準(zhǔn)備
這本書(shū)中涉及到的統(tǒng)計(jì)學(xué)原理與案例分析都是通過(guò)R語(yǔ)言實(shí)現(xiàn)的,作者也把相應(yīng)的腳本與數(shù)據(jù)放到了Github上。
這里先安裝幾個(gè)R包,如下所示:
library(devtools)
install_github("genomicsclass/dagdata")
dir <- system.file(package = "dagdata")
list.files(dir)
加載原始數(shù)據(jù) ,如下所示:
> dir <- system.file(package = "dagdata")
> list.files(dir)
[1] "data" "DESCRIPTION" "extdata" "help" "html" "Meta"
[7] "NAMESPACE" "script"
上面的代碼使用了到幾個(gè)包與命令,其中devtool包中的install_github()函數(shù)用于直接從Github下載相應(yīng)包,以前的筆記中已經(jīng)說(shuō)明了這個(gè)包的用法《R語(yǔ)言筆記之包的操作與內(nèi)置數(shù)據(jù)集》。
另外還有兩個(gè)函數(shù),其中system.file()函數(shù)的功能是:發(fā)現(xiàn)包的完整路徑名,例如上面的變量dir的輸出就是如下所示:
> dir
[1] "C:/Users/20161111/Documents/R/win-library/3.5/dagdata"
list.files()函數(shù)的功能是列出相應(yīng)路徑下的文件,如下所示:
> list.files(dir)
[1] "data" "DESCRIPTION" "extdata" "help" "html" "Meta"
[7] "NAMESPACE" "script"
使用list.files()函數(shù)還能繼續(xù)列舉出目錄下一層目錄中的內(nèi)容,例如現(xiàn)在我們列出extdata這個(gè)目錄中的內(nèi)容,如下所示:
> list.files(file.path(dir,"extdata"))
[1] "admissions.csv" "astronomicalunit.csv"
[3] "babies.txt" "femaleControlsPopulation.csv"
[5] "femaleMiceWeights.csv" "mice_pheno.csv"
[7] "msleep_ggplot2.csv" "README"
[9] "spider_wolff_gorb_2013.csv"
其中這里面用到file.path()函數(shù),它的功能是將字符串連接起來(lái),形成路徑,如下所示:
> file.path(dir,"extdata")
[1] "C:/Users/20161111/Documents/R/win-library/3.5/dagdata/extdata"
現(xiàn)在加載原始數(shù)據(jù),如下所示:
filename <- file.path(dir,"extdata/femaleMiceWeights.csv")
dat <- read.csv(filename)
# input raw data
head(dat)
str(dat)
數(shù)據(jù)如下所示:
> head(dat)
Diet Bodyweight
1 chow 21.51
2 chow 28.14
3 chow 24.04
4 chow 23.45
5 chow 23.68
6 chow 19.79
> str(dat)
'data.frame': 24 obs. of 2 variables:
$ Diet : Factor w/ 2 levels "chow","hf": 1 1 1 1 1 1 1 1 1 1 ...
$ Bodyweight: num 21.5 28.1 24 23.4 23.7 ...
從數(shù)據(jù)我們可以知道,這是一個(gè)數(shù)據(jù)框,有2列,第1列是小鼠的包含情況,分別是chow(正常組),hf(高脂組,就是high fat的縮寫(xiě)),第2列的體重,從常識(shí)可以知道,單位是g(一只標(biāo)準(zhǔn)的小鼠體重是18-22g)。
以上是原始數(shù)據(jù)的下載過(guò)程,涉及到的知識(shí)點(diǎn)為:R包的下載與加載,另外,也可以通過(guò)downloader包來(lái)下載原始數(shù)據(jù),整個(gè)操作如下所示:
install.packages("downloader")
url <- "https://raw.githubusercontent.com/genomicsclass/dagdata/master/inst/extd\
ata/femaleMiceWeights.csv"
filename <- "femaleMiceWeights.csv"
download(url, destfile=filename)
這一過(guò)程不再演示,跟前面的目的是一樣,都是下載原始數(shù)據(jù)。
有了原始數(shù)據(jù)后,現(xiàn)在過(guò)程一下數(shù)據(jù),我們捏造chow組的小鼠數(shù)據(jù),如下所示:
library(dplyr)
chow <- filter(dat, Diet =="chow")
# Extract chow gropu from raw data of dat
head(chow)
str(chow)
結(jié)果如下所示:
> chow <- filter(dat, Diet =="chow")
> str(chow)
'data.frame': 12 obs. of 2 variables:
$ Diet : Factor w/ 2 levels "chow","hf": 1 1 1 1 1 1 1 1 1 1 ...
$ Bodyweight: num 21.5 28.1 24 23.4 23.7 ...
僅提取chow組的體重,如下所示:
chowVals <- select(chow, Bodyweight)
head(chowVals)
str(chowVals)
結(jié)果如下所示:
> head(chowVals)
Bodyweight
1 21.51
2 28.14
3 24.04
4 23.45
5 23.68
6 19.79
> str(chowVals)
'data.frame': 12 obs. of 1 variable:
$ Bodyweight: num 21.5 28.1 24 23.4 23.7 ...
> class(chowVals)
[1] "data.frame"
> # OR perform as following:
> # chowVals <- filter(dat, Diet=="chow") %>% select(Bodyweight)
從上面結(jié)果可以看出來(lái),chowVals是一個(gè)數(shù)據(jù)框,現(xiàn)在我們將其轉(zhuǎn)換為數(shù)字向量:
chowVals <- unlist(chowVals)
str(chowVals)
class(chowVals)
如下所示:
> str(chowVals)
Named num [1:12] 21.5 28.1 24 23.4 23.7 ...
- attr(*, "names")= chr [1:12] "Bodyweight1" "Bodyweight2" "Bodyweight3" "Bodyweight4" ...
> class(chowVals)
[1] "numeric"
數(shù)學(xué)術(shù)語(yǔ)與符號(hào)
作者在書(shū)中提到,他會(huì)盡量避免使用數(shù)學(xué)術(shù)語(yǔ)與數(shù)學(xué)符號(hào),但是,有一些太常見(jiàn)的數(shù)據(jù)符號(hào)是大家常見(jiàn)的,需要知道。
希臘字母
是希臘字母中的S的寫(xiě)法,表示相加,例如
表示未知無(wú)數(shù),相當(dāng)于m,即mean;
表示標(biāo)準(zhǔn)差,相當(dāng)于s,即standard difference;
表示隨機(jī)誤差,相當(dāng)于error;
表示效應(yīng),即effect。
無(wú)窮(Infinity)
書(shū)中指出,我們經(jīng)常使用的統(tǒng)計(jì)學(xué)結(jié)果是一種漸進(jìn)結(jié)果(asymptotic results)。這個(gè)漸進(jìn)結(jié)果指的是一種近似(approximation),也就是說(shuō)隨著數(shù)據(jù)點(diǎn)數(shù)目的增大,這個(gè)結(jié)果只能接近,無(wú)法完全相等,只有當(dāng)數(shù)據(jù)點(diǎn)的數(shù)目是無(wú)窮()時(shí),數(shù)字最接近,看下面的一個(gè)案例:
> onethird <- function(n) sum(3/10^c(1:n))
> 1/3 - onethird(4)
[1] 3.333333e-05
> 1/3 - onethird(10)
[1] 3.333334e-11
> 1/3 - onethird(16)
[1] 0
在這個(gè)案例中,我們就看到了,0.3的1到n次方的和是接近1/3的。
積分(Integrals)
積分在統(tǒng)計(jì)學(xué)也是比較常用的一個(gè)手段,有的時(shí)候要計(jì)算某個(gè)統(tǒng)計(jì)學(xué)分布的概率分布例如下面的這個(gè)曲線:

這個(gè)曲線是一個(gè)概率密度曲線,右下角的灰色面積占整個(gè)曲線下面積的比例,就是相應(yīng)的概率(后面會(huì)講),那么通過(guò)積分的手段來(lái)計(jì)算面積的分公式就是: