作者: Zhang Ao

  • 数据的类型

    在统计学中,数据可以分成很多类型:定性类和定量类、离散型和连续型、独立型和非独立型。

    定性变量和定量变量

    定量类属于数值型变量,如年龄和收入,是具体的数值。

    定量类属于非数值型变量,如性别和民族,变量的值是描述性的,就像男、女、汉、苗等。

    • 定性类(Qualitative)
      • 名称(Nominal):描述性,如姓名、性别、邮政编码等,值为男、女、汉、蒙。它的顺序没有意义,也不能进行加减乘除运算。
      • 序号(Ordinal):看待某事的态度,完全同意、同意、无所谓、不同意、坚决不同意等,程度可以比较,但没有倍数关系,不能说完全同意并非2倍的同意。加减乘除也没有意义。
    • 定量类(Quantitative)
      • 序号(Ordinal):病害分级或好评分级,1、2、3、4、5星。同样,级别之间可以比较大小,但不能表示倍数关系,不能说4星不比2星好(差)两倍。加减乘除也没有意义。
      • 间断值(Interval):温度。严格来说可以加减,但不能乘除。不能说40℃是20℃的2倍温暖。0℃不代表真的0,不是没有数量,而是有温度的。
      • 比率值(Ratio):身高、体重、年龄等。既可以加减、也可以乘除,数值间可以有倍数关系。0表示真正的0,没有数值。可以确定的说2米比1米高两倍。

    可以通过0点是否是真的0来判断是间断值还是比率值。

    离散型变量和连续型变量

    • 离散型变量:有确定的值,且值与值之间有间隙,一般不能取小数。如,汽车的个数,家里孩子的个数。
    • 连续型变量:几乎可以取到每一个值,精确的小数位数取决于测量方法和精度。比如身高、体重。

    独立类和非独立类

    • 独立类:变量值的改变不依赖于其他变量。比如学习时间是独立变量。
    • 非独立类:变量值的变化依赖于其他变量。比如考试成绩是非独立变量,依赖于学习时间。

    一般而言,非独立变量依赖于独立变量,而独立变量不依赖于非独立变量。

  • 世界人口,1985-2150

    1985年

    工业革命过后,世界人口有13亿人,其中亚洲、非洲和拉丁美洲有10亿人;欧洲、北美和大洋洲有3亿人。

    1950年

    二十世纪中叶,全球共有25亿人,其中亚洲、非洲和拉丁美洲有18亿人;欧洲、北美和大洋洲有7亿人。

    2000年

    跨入二十一世纪,全球人口60亿人,其中亚洲、非洲和拉丁美洲49亿人;欧洲、北美和大洋洲有11亿人。

    2050年

    二十一世纪中叶,全球人口达到98亿人,其中亚洲、非洲和拉丁美洲86亿人;欧洲、北美和大洋洲12亿人。

    2150年

    二十二世纪中叶,全球人口下降到97亿人,其中亚洲人、非洲和拉丁美洲人口87亿人;欧洲、北美和大洋洲人口10亿人。

    发展中国家和欠发达国家的人口激增,必须解决粮食问题。

  • 第五章 R语言的缺失值

    我们在记录数据时,经常会遇到缺失值。比如,统计一下全班同学的身高,恰巧有些同学今天生病没来,只记录了姓名或序号,却没有记录身高数值,这就造成了缺失。在R语言中,缺失值有两种形式,一种是NA,另一种是NaN,注意大小写。缺失值在实际统计运算中会对结果造成干扰,因此,在一些运算中需要先删除缺失值或使用补缺失(imputation)的方法,将缺失填充上值,再进行计算,降低对结果的影响。

    NA表示的是测定的时候为空(Missing)或当前值不可用(Not available)。NaN表示无意义的值,比如0除以0(0/0)或者无穷减去无穷(Inf-Inf)。NaN在实际应用中并不常用,而NA在实际应用中非常常见。NA和NaN都是占位符,无意义,无法进行运算。

    可以看一下实例,我们假设记录一个班级同学的身高(height),全班共7名同学(n=7)。

    height <- c(171,165,159,198,146,NA,184) # 其中有一个缺失值

    接下来,我们需要验证我们一共调差了几个同学,用到之前的length()函数。

    length(height) # 查看向量中元素的个数

    [1] 7

    得到的答案是7,也就是我们一共调查了7个人。接下来,我们做一些基本的统计运算,比如计算这几个人的平均身高。还记得求平均值的函数吗?mean()

    mean(height) # 计算平均身高,可以看到,下面的结果是NA,也就是NA对数据的计算造成了干扰

    [1] NA

    那么,我们应该怎么计算带有NA的均值呢?最简单的方法就是将NA去掉,然后再进行计算。R的内置函数中,已经集成了去掉NA的功能,即是用na.rm=T参数先去除数据中的NA再进行计算。

    mean(height, na.rm=T) # 先去掉NA,再计算均值

    [1] 170.5

    在一些高级运算中,没有直接可用的R语言的内置函数,需要我们自己编写代码进行计算。我们该怎样处理缺失值呢?这就要求我们先知道缺失值的位置或个数,然后再进行相应处理。这里我们用sum()函数再算一次均值。

    sumHeight <- sum(height, na.rm=T) # 对所有数据求和

    numberHeight <- length(height)-sum(is.na(height)) # 有效数据数量

    sumHeight/numberHeight # 计算均值

    [1] 170.5

    is.na()是专门处理缺失值的函数,它会得到一个与原向量等长的向量,并标注每一个对应的位置是否为缺失值。我们将sum()函数与is.na()函数连用,可以得到缺失值的个数,这可能很难理解,原因很简单,逻辑值FALSE被视为0,而逻辑值TRUE被视为1;is.na()得到的向量中,NA变成了TRUE(也就是1),非NA变成了FLASE(0),因此,用sum()函数可以求出缺失个数。下面,我们手动去掉缺失值,然后再计算平均值,用到which()函数,用来显示某个值的下标(位置)。

    heightNoNA <- height[-which(is.na(height))] # 将有NA的数据去掉

    heightNoNA <- height[!is.na(height)] # 将有NA的数据去掉

    mean(heightNoNA) # 计算均值

    [1] 170.5

    思考题:

    1. 用is.na()求缺失值个数。
    2. 不使用is.na()求出缺失值的个数。
    3. 写出能将NA下标(位置)显示出来的函数组合。
    4. 组合上面函数,写一行代码,直接算出平均值。
      # mean(height[!is.na(height)])
  • Excel常用快捷键

    F1帮助
    F2编辑
    F4重复操作
    F5打开定位对话框
    F6下一个窗格,一般会依次选择工作表栏目、状态栏、菜单栏
    F7拼写检查
    F8扩展式选定
    F9计算所有公式
    F10键盘选择菜单栏
    F11新建图表
    F12另存为
    =输入公式
    Insert插入模式
    Delete删除
    Home到当前行的第一列
    End,Home到已使用行列的最后一个单元格
    SHIFT+F2当前单元格添加/编辑注释
    SHIFT+F3添加公式
    SHIFT+F5查找
    SHIFT+F4查找下一个
    SHIFT+F6上一个窗格,一般会依次选择菜单栏、状态栏、工作表栏目
    SHIFT+F7打开同义词库(英文)
    SHIFT+F8点选多个单元格删除或CTRL+ENTER同时添加内容
    SHIFT+F9计算工作表
    SHIFT+F10属性菜单
    SHIFT+F11新建工作表
    SHIFT+F12保存
    SHIFT+方向键向某方向连续选择单元格
    CTRL+F3打开名称管理器
    CTRL+F4关闭
    CTRL+F6下一个工作簿
    CTRL+1设置单元格格式
    CTRL+2加粗
    CTRL+3斜体
    CTRL+4下划线
    CTRL+5删除线
    CTRL+9隐藏当前行
    CTRL+0隐藏当前列
  • QTranslate——科研翻译神器

    很遗憾,该软件已经停止更新,作者的网站已经无法打开。

    QTranslate是quest soft开发的一款聚合多个翻译服务的聚合型软件,是一个非常棒的免费软件,它体型小巧(不足1M),只运行在Windows平台。该软件可以对比多家翻译平台结果,用户可以自行判断最佳翻译。

    【官方网站(国内可能禁止访问)】

    https://quest-app.appspot.com

    【当前最新版本6.9.0下载地址】

    Download QTranslate 6.9.0 (qtranslate1.appspot.com)

    QTranslate.6.9.0.exe — Yandex.Disk (yadi.sk)

    https://share.weiyun.com/5I4Kea6f 密码:z98ib7

    【快捷键】

    双击CTRL可以调出翻译框。

    选中要翻译的文本,同时按CTRL+Q可以快速翻译。

    选中要翻译的文本,同时按CTRL+E可以发音。

    选中要查询的词,同时按CTRL+SHIFT+Q进行单词详解。

    【必要设置】

    由于该软件聚合了很多翻译服务,而且国内大部分都访问不了,因此需要进行设置,让软件使用更高效。

    1. 首先,在软件主界面点击竖向的三个点,再进入设置,如图所示。

    qtranslate1

    2. 进入高级选项卡,选择将首选域改为.cn,这样谷歌翻译可以使用,见图。

    qtranslate2

    3. 进入服务选项卡,将不常用的一些翻译服务和词典去掉(国内无法访问),如图。

    qtranslate3

    基本的设置已经完成了,希望对你的英语水平提高有所帮助。

    【文本识别】

    目前该功能并没有腾讯QQ/TIM的截图功能中提供的翻译识别好用,毕竟服务器在国外,而且用的免费授权,网络拥堵会出现一些状况,推荐使用腾讯服务。

    通过该功能,图片上的英文也可以很容易的复制和翻译,该功能可以在设置中添加快捷键,推荐使用CTRL+SHIFT+E,以避免和其他软件冲突。

    qtranslate4
  • 【新闻报道】张敖在全国分子植物育种大会上作报告

    全国分子植物育种大会于2019年7月2日-7月5日在吉林省长春市召开,我校生物科学技术学院植物生理与种质创新团队青年教师张敖博士作为10名青年专家之一,在“青年科学家论坛”环节作题为《全基因组选择技术精度研究及玉米育种应用》的主题报告,反响热烈,展现了我校青年教师追逐科学前沿的精神风貌,标志着我校分子标记辅助育种水平跻身全国先进行列。

    大会旨在整合分子育种理论、技术、平台和应用,为中国种业赶超世界先进水平提供革新的途径和交流平台。会上29位国际顶尖专家和10位青年专家分别进行了主题报告,专家团包括中美科学院院士、国家特聘专家、国家杰出青年基金获得者、国家重大专项主持人、跨国种业公司分子育种相关领域的首席科学家、具有巨大发展潜力的青年科学家等,内容涵盖分子育种的所有领域。大会现场注册人数近1000人,大会报告全球同步直播,截至目前,播放量超过2.2万人次。

    321

  • 【新闻报道】2019美国康奈尔大学GOBii分子辅助育种培训在沈农成功举办

    2019年6月13日-2019年6月14日,为加强辽宁省植物基因工程技术研究中心和沈阳市玉米全基因选择育种重点实验室发展建设,促进东北作物育种从传统育种向国际领先的分子标记辅助育种转变,美国康奈尔大学牵头的基因组开源育种信息带头人工具门户(Genomic Open-source Breeding informatics initiative Tool Portal,GOBii)专家应生物科学技术学院植物生理与种植创新团队邀请,在我校图书馆510开展了为期2天的分子标记辅助育种技术专题研讨。
    康奈尔大学育种生物信息技术应用专家Star Gao博士,国际玉米与小麦改良中心(CIMMYT)基因分型工具与服务带头人Eng Hwa NG博士和国际半干旱热带作物研究所(ICRISAT)基因组与分子育种家Hima bindu博士分别介绍了GOBii已经开发的育种流程和工具软件在国际农业研究磋商组织(CGIAR)成员单位中的使用案例;分子标记辅助育种一站式解决方案(EiB)的五大模块和显著降低测序费用的高通量测序基因分型项目(HTPG)。Star和Hima还分别演示了可视化基因型分析工具Flapjack和作物基因组分子决策工具Galaxy在育种流程中的使用。
    北京粒隆种业科技、黑龙江省农业科学院、吉林省农业科学院、吉林省农业科学院、辽宁省农科院、宁夏农林科学院、青岛农业大学、瑞典斯文森公司、中科院东北地理与农业生态研究所和本校生物学院、工程学院、园艺学院、农学院水稻所、农学院特种玉米中心的近30名专家参加此次探讨。

    IMG_9432IMG_9451IMG_9454

  • 揭开MD5的面纱

    MD5这个词,可能很少会遇到,偶尔在测序结果文件中会有这样一个文件。里面有一行类似“B42DB3919CBDBC274ECE5001C3F2B4C2”的字符串,完全不明白其含义。下面就来介绍一下这个神秘的MD5。

    MD5(Message-Digest Algorithm)是消息摘要算法,1992年由美国密码学家Ronald Linn Rivest设计和开发,现广泛应用于用户密码加密,文件防修改等领域。该方法可以计算出信息(字符串)或文件的32位哈希(散列)值,绝大多数情况下,每一个信息或文件能计算出唯一值与其对应,而且计算不可逆,就如同指纹一样,因此常用在安全相关领域。

    新开发的WEB程序,比如BBS、CMS等,都包含了用户信息,这些用户信息过去通常以明文的形式存储,站点管理员、程序开发维护人员都能看到任意用户的用户名和密码,黑客如果盗取这部分信息,也会对用户隐私和财产安全造成困扰。MD5问世后,在存储用户密码前,先转为MD5值,再存储,这样,即便是管理员也无法知道用户的真实密码,黑客盗取这种加密的密码也没有什么用处,极大的增加了私密性和安全性。

    另一方面,MD5还可以对文件或者压缩包进行计算,如果文件被修改过,MD5值就会发生变化(感兴趣的童鞋可以用word或txt文件修改一下试试)。因此,校验MD5值可以知道文件是否发生过改变,即被人修改过或感染病毒等。

    很多工具都可以进行MD5的计算,比如著名的Hash软件(下载链接:https://share.weiyun.com/5BnezSm 密码:jdsj5p)。HaoZip软件内置MD5计算工具;世界上压缩率最高的压缩软件7-ZIP也提供类似功能,不过不包括MD5,而是一些其他的算法,可实现相同的目的。

    Win10在不借助任何第三方软件的情况下也可以对MD5进行计算,步骤如下:

    开始图标点鼠标右键→Windows PowerShell,与命令提示符一样,用下给出的命令计算文件的MD5值,加粗的部分需要替换为自己的路径和文件。斜体可以替换成其他算法。

    Get-FileHash C:\Windows\notepad.exe -Algorithm MD5| Format-List

    算法列表:SHA1、SHA256、SHA384、SHA512、MACTripleDES、MD5、RIPEMD160。

     

     

  • 第三章 R语言的矩阵(Matrix)

    利用向量,我们可以计算某个班级同学某一门课的平均分数,例如英语成绩:张三(95),李四(88),王二(79),这五(59),那六(92),这时候先建立向量并赋值给一个变量:

    English <- c(95,88,79,59,92)

    然后可以进行各种运算,比如求和,取均值,计算方差、标准差等。

    但是,我们的成绩并非只有英语一门,而是有很多门。在计算多门课程的分数时,可以用到R语言中的矩阵。矩阵是一种“矩形”的表格数据,有行有列,行通常情况表示“记录”,列表示“变量”或“字段”,虽然两者“颠倒”后仍然可以进行计算,但是依照国际惯例,最好遵从行为“记录”列为“变量”。每一条“记录”实际上就是你测试的对象及其在所有变量上的测定值或调查值。比如本例中,每个同学都有一个英语成绩,如表3-1,每一行为一条记录,英语成绩叫做“变量”或者“字段”。在矩阵中,全部值只能是一种类型,因此,作为字符型的姓名列不能在矩阵中,只能作为矩阵的行名。后文会继续介绍。

    姓名row.names英语成绩
    张三95
    李四88
    王二79
    这五59
    那六92
    表3-1 英语成绩的矩阵

    矩阵还有一个特别需要了解的概念是维度。每个变量表示1个维度,简单来说,有几列就是几维,例如有10个变量的矩阵即为10维矩阵。表3-1是有一个维度的矩阵。要查看一个对象的维度,可以使用dim()函数。注意在R语言中,向量是不能查询维度的,因为向量的维度固定为1。

    dim(English)

    NULL

    接下来是有趣的事情了,假如说,我们班级有5位同学,即张三,李四,王二,这五,那六。他们的英语成绩为:95、88、79、59、92;数学成绩为:98、60、58、82、71;体育成绩为:100、95、98、100、100。那么我们可以用向量的形式将成绩录入到R中。

    scores <- c(95, 88, 79, 59, 92, 98, 60, 58, 82, 71, 100, 95, 98, 100, 100)

    接下来,我们需要将这个向量转换成矩阵。用到上面的dim()函数。

    dim(scores) <- c(5,3) # 为向量增加维度属性,5条记录,3个变量

    scores # 查看结果

    class(scores) # 查看对象类型

    从上面结果可以看到,向量已经转换成我们期望的矩阵了。查看对象类型,也出现的矩阵字样。

    同样的,使用R内置的matrix()函数,也可以这样建立矩阵:

    scores <- c(95, 88, 79, 59, 92, 98, 60, 58, 82, 71, 100, 95, 98, 100, 100)
    matrix(scores, nrow=5)

    这个矩阵看起来略微别扭,没有显示人名和科目,我们现在将这个信息添加到矩阵中。用到rownames()和colnames()函数。

    rownames(scores) <- c(“张三”,”李四”,”王二”,”这五”,”那六”)
    colnames(scores) <- c(“英语”,”数学”,”体育”)
    scores

    从向量转变成矩阵还有另一种方法:1. 将每门功课的分数分别输入到向量;2. 利用cbind()函数将这些向量按照列组合起来。

    English <- c(95, 88, 79, 59, 92)
    mathematics <- c(98, 60, 58, 82, 71)
    P.E. <- c(100, 95, 98, 100, 100)
    scores2 <- cbind(English,mathematics,P.E.)
    socres2

    前面我们说了,矩阵内只能存储一种数据类型。那么,我们把多个数据类型放入矩阵中,看看会出现什么结果,比如:我们同学的姓名整合进矩阵中。

    cnames <- c(“张三”,”李四”,”王二”,”这五”,”那六”)
    scores3 <- cbind(cnames,English,mathematics,P.E.)
    scores3

    从结果中不难发现,所有的数据都加了双引号,即被识别为字符串。此时,程序发生了隐式强制(implicit coercion),我们没有要求它这么做,但它就这样发生了。字符串的结果是不能直接进行加减乘除等数学运算的,所以建立矩阵的时候一定要注意保持数据格式的统一。为什么强制转换成字符串而不是数值型呢?同学们可以考虑一下这个问题。

    思考题:

    1. 某一个给定的矩阵中的值有几种类型?
    2. 有三位同学,英语、数学、体育的分数分别为A:86、69、98;B:71、55、100;C:60、62、90。如果建立该矩阵?