美文网首页Data Analysis for the Life Sciences
DALS001-数据准备(Getting Started)

DALS001-数据准备(Getting Started)

作者: backup备份 | 来源:发表于2019-07-28 13:00 被阅读0次

    title: DALS001-数据准备(Getting Started)
    date: 2019-07-21 12:0:00
    type: "tags"
    tags:

    • R包
      categories:
    • 生物统计

    前言

    本书是《Data Analysis for the Life Sciences》这本书的读书笔记。

    image

    此书一共分了10部分,分别为:

    • 数据准备(Getting Started)
    • 统计推断(Inference)
    • 数据挖掘(Exploratory Data Analysis)
    • 矩阵代数(Matrix Algebra)
    • 线性模型(Linear Models)
    • 高维数据推断(Inference For high Dimensional Data)
    • 统计模型(Statistical Models)
    • 距离与降低(Distance and Dimension Reduction)
    • 基础机器学习(Basic Machine Learning)
    • 批次效应(Batch Effects)

    由于这本书是为生命科学相关专业而写的,考虑到相关专业学生数理功底太弱,书中并没涉及很复杂的数学与统计学知识,还是很好理解的。

    R语言包与原始数据准备

    这本书中涉及到的统计学原理与案例分析都是通过R语言实现的,作者也把相应的脚本与数据放到了Github上。

    这里先安装几个R包,如下所示:

    library(devtools)
    install_github("genomicsclass/dagdata")
    dir <- system.file(package = "dagdata")
    list.files(dir)
    

    加载原始数据 ,如下所示:

    > dir <- system.file(package = "dagdata")
    > list.files(dir)
    [1] "data"        "DESCRIPTION" "extdata"     "help"        "html"        "Meta"       
    [7] "NAMESPACE"   "script"   
    

    上面的代码使用了到几个包与命令,其中devtool包中的install_github()函数用于直接从Github下载相应包,以前的笔记中已经说明了这个包的用法《R语言笔记之包的操作与内置数据集》

    另外还有两个函数,其中system.file()函数的功能是:发现包的完整路径名,例如上面的变量dir的输出就是如下所示:

    > dir
    [1] "C:/Users/20161111/Documents/R/win-library/3.5/dagdata"
    

    list.files()函数的功能是列出相应路径下的文件,如下所示:

    > list.files(dir)
    [1] "data"        "DESCRIPTION" "extdata"     "help"        "html"        "Meta"       
    [7] "NAMESPACE"   "script" 
    

    使用list.files()函数还能继续列举出目录下一层目录中的内容,例如现在我们列出extdata这个目录中的内容,如下所示:

    > 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()函数,它的功能是将字符串连接起来,形成路径,如下所示:

    > file.path(dir,"extdata")
    [1] "C:/Users/20161111/Documents/R/win-library/3.5/dagdata/extdata"
    

    现在加载原始数据,如下所示:

    filename <- file.path(dir,"extdata/femaleMiceWeights.csv")
    dat <- read.csv(filename)
    # input raw data
    head(dat)
    str(dat)
    

    数据如下所示:

    > 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 ...
    

    从数据我们可以知道,这是一个数据框,有2列,第1列是小鼠的包含情况,分别是chow(正常组),hf(高脂组,就是high fat的缩写),第2列的体重,从常识可以知道,单位是g(一只标准的小鼠体重是18-22g)。

    以上是原始数据的下载过程,涉及到的知识点为:R包的下载与加载,另外,也可以通过downloader包来下载原始数据,整个操作如下所示:

    install.packages("downloader")
    url <- "https://raw.githubusercontent.com/genomicsclass/dagdata/master/inst/extd\
    ata/femaleMiceWeights.csv"
    filename <- "femaleMiceWeights.csv"
    download(url, destfile=filename)
    

    这一过程不再演示,跟前面的目的是一样,都是下载原始数据。

    有了原始数据后,现在过程一下数据,我们捏造chow组的小鼠数据,如下所示:

    library(dplyr)
    chow <- filter(dat, Diet =="chow")
    # Extract chow gropu from raw data of dat 
    head(chow)
    str(chow)
    

    结果如下所示:

    > 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)
    

    结果如下所示:

    > 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)
    

    从上面结果可以看出来,chowVals是一个数据框,现在我们将其转换为数字向量:

    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"
    

    数学术语与符号

    作者在书中提到,他会尽量避免使用数学术语与数学符号,但是,有一些太常见的数据符号是大家常见的,需要知道。

    希腊字母

    \sum是希腊字母中的S的写法,表示相加,例如S=\sum_{i=1}^{n} x_{i}

    \mu表示未知无数,相当于m,即mean;

    \sigma表示标准差,相当于s,即standard difference;

    \epsilon表示随机误差,相当于error;

    \beta表示效应,即effect。

    无穷(Infinity)

    书中指出,我们经常使用的统计学结果是一种渐进结果(asymptotic results)。这个渐进结果指的是一种近似(approximation),也就是说随着数据点数目的增大,这个结果只能接近,无法完全相等,只有当数据点的数目是无穷(\infty)时,数字最接近,看下面的一个案例:

    > 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
    

    在这个案例中,我们就看到了,0.3的1到n次方的和是接近1/3的。

    积分(Integrals)

    积分在统计学也是比较常用的一个手段,有的时候要计算某个统计学分布的概率分布例如下面的这个曲线:

    image

    这个曲线是一个概率密度曲线,右下角的灰色面积占整个曲线下面积的比例,就是相应的概率(后面会讲),那么通过积分的手段来计算面积的分公式就是:
    \int_{2}^{4} f(x) d x

    相关文章

      网友评论

        本文标题:DALS001-数据准备(Getting Started)

        本文链接:https://www.haomeiwen.com/subject/ybwurctx.html