• 参数、测量与统计量

    假设老师想了解一个学生对知识的掌握情况(参数),对全班进行了几次测验(测量),然后计算出测验的平均分(统计量)。统计量是随机的,讨论某个统计量的准确性毫无意义。因此,费舍尔提出了三个准则:

    1. 一致性(consistency):得到的数据越多,计算出来的统计量接近参数真实值的概率越大;
    2. 无偏性(unbiasedness):如果多组不同的数据多次测量某一特定的统计量,那么该统计量的均值应该近似于这个参数的真值;
    3. 有效性(efficiency):统计量的值不会完全等于该参数的真值,但是用来估计参数的大多数统计量应该与参数真值相差不大。
  • 计数原理

    n表示总集,r表示取出次数。

    1. 基本计数规则(The fundamental counting rule)

      每种选择相乘。如:冰激凌有5种口味,每种口味都有大、中、小杯,还可以选择浇汁或不浇汁,则总计选择有5×3×2=30种。

      每个选择相当于从n个总集中抽取r个,但此时r=n,即全部都可以抽取。

      另一个例子:

      A、B、C为总集n,r=4次,则可以得到3×3×3×3=81种不同的情况(顺序不同抽取不同)。

    2. 排列(Permutations)

      image-2

      从n个东西中取出r次,每次选择不能重复。

      如:

      A、B、C为总集n,r=2。

      可以得到3!/(3-2)!=6。结果如下:

      AB
      AC
      BA
      BC
      CA
      CB
    3. 组合(Combinations)

      QQ截图20200903231807

      从n个东西中取出r次,每次选择不同重复,且顺序无关。

      如:

      A、B、C为总集n,r=2。

      可以得到3!/2!(3-2)!=3。结果如下:

      AB
      AC
      BC
  • 贝叶斯基本公式

    ​P(A|B)为条件概率,在样本空间中,B发生的条件下,A发生的概率。

    P(A’)中的A’读A-prime,表示非A。

    定义:P(A)+P(A’)=1

    经典的概率公式,通过条件B先定行或列,再通过A/total(B)得到概率。

  • 第四章 R语言的数据框(data.frame)

    数据框是R语言最重要的数据表现形式,数以万计的数据通过形成一个巨大的“表”来标准化数据结构,再从中抽取部分或全部数据用于分析,这个“表”叫做数据框。数据框和矩阵非常类似,不同点在于,数据框可以指定每一列的数据类型,而整个矩阵只能有且只有一种数据类型。

    下面,我们尝试录入数据类型。

    数据表4-1

    姓名性别英语成绩评定
    张三95优秀
    李四84良好
    王五61合格

    从表4-1中不难发现,数据并非都是数值型,还有字符型的列,比如性别和评定。此时,用数据框就更为合适,因为数据框可以为每一列分配不同的数据类型。数据框在使用上更加符合人类的习惯,因为数据并不只有数值型,还是有很多其他类型,如定性类:姓名、性别、邮政编码、民族、态度(同意、不同意)、分级等。这些可以用字符串(string)来表示,也可以用因子(factor)表示。

    我们可以通过下面的方法构建数据框:

    names <- c("张三", "李四", "王五")

    gender <- c("男", "女", "男")

    English_scores <- c(95, 84, 61)

    evaluation <- c("优", "良", "合格")

    dataframe <- data.frame(names=names,
    gender=gender,
    English_scores=English_scores,
    evaluation=evaluation)

    dataframe

    class(dataframe)

    上面列举了一种通过向量获得数据框的方法,当然还可以先将向量转换成矩阵,再转换成数据框。

    dataframe2 <- cbind(names,gender,English_scores,evaluation)

    dataframe2 <- as.data.frame(dataframe2)

    dataframe2

    当只有纸制记录的原始数据,需要录入的时候,比较麻烦,可以通过下面的方式录入的R语言的数据框。

    dataframe <- data.frame(names=c("张三", "李四", "王五"),
    gender=c("男", "女", "男"),
    English_scores=c(95, 84, 61),
    evaluation=c("优", "良", "合格"))

    dataframe

    在数据量大的时候,通过上述方式逐个录入是很容易出错的,最好是先录入到Excel中,在读取到R程序,后面会有章节专门介绍。

    思考题

    1. 数据框和矩阵有哪些区别?
    2. 自己编造一个四行四列的数据,手动录入到R的一个变量中,并显示出来。
  • 第六章 R语言的逻辑值

    R语言的逻辑值(也称布尔值,Boolean)共有两种,TRUE和FALSE,可以简写为T和F,注意都是大写的。它们也可以用数值1和0表示。

    一般而言,判断运算得到的是逻辑值。例如,1>2,会返回FALSE;5>=1,会返回TRUE;10==10,会返回TRUE,这里要注意,判断运算的相等需要写2个等号,因为一个等号已经做赋值符号用了等同于'<-‘。

    在R语言中,不仅数值可以计算逻辑值,逻辑值和字符串也可以计算逻辑值。你可以尝试使用TRUE==TRUE来计算逻辑结果;也可以利用”a”==”A”来计算逻辑结果;还可以计算TRUE==1。

    不等于也是一个判断符号,但是R语言中的不等于符号并不是≠,而是!=。例如,4!=5,会返回TRUE。!的作用是取反,!=的意思是对相等取反,就是不等于的意思。同理,!可以与逻辑值连用,起到对逻辑值取反的作用。如:!TRUE的结果是FALSE;!FALSE的结果是TRUE。!可以和不等式连用,像!5>7得到的结果是TRUE,这里的计算顺序是先算5>7,结果为FALSE,再取反,得到TRUE。可以看出,计算的优先顺序,不等式计算优先级要高于取反运算。

    在实际应用中,我们常常会遇到多个条件判断的情形。看这个例子,一群学生考研,英语需要高于40,政治需要高于60,专业课需要高于70分才能录取。此时,就需要多个判断运算同时起作用。

    假如:小红的英语、政治和专业课成绩分别为xiaohong <- c(41,75,90),用判断语句判断小红是否考上的判断是:

    xiaohong[1] > 40 & xiaohong[2] > 60 & xiaohong[3] > 70

    不难看出,多个条件并列用&符号链接,&表示与,必须所有条件都为TRUE才为TRUE;相应的,|符合表示或,只要有一个条件为TRUE即为TRUE。

    当一个逻辑值和一个逻辑值向量并列时,&符号会将单个逻辑值复制为向量的个数,然后一一进行运算。

    TRUE & c(TRUE,FALSE,FALSE)

    这可能并不是我们想要的结果,如果我们只想对向量中的第一个逻辑值进行运算,可以使用严格并列符号&&和严格或符号||。这样,向量中只有第一个逻辑值会和前面的逻辑值发生运算。

    TRUE || c(TRUE, FALSE ,FALSE)

    判断函数,isTRUE()和isFALSE(),判断逻辑值的判断函数,说起来很拗口。顾名思义,isTRUE的参数为TRUE时,结果为TRUE,否则为FALSE;isFALSE的参数为FALSE是,结果为TRUE,否则为FALSE。自己可以练习一下。

    identical()函数可以判断两个对象是否完全相等。完全相等则为TRUE,不完全相等则为FALSE。传入的两个参数顺序可以颠倒,可以使用变量。

    identical(c(1,2,3),c(1,2,3))

    xor()函数叫做亦或判断函数,如果两个参数一个是TRUE一个是FALSE则返回TRUE,否则返回FALSE。在该函数中,FALSE可以用0表示,0以外的其他数字都相当于TRUE。

    xor(0,-1)
    xor(1,-1)
    xor(TRUE,FALSE)

    逻辑值在筛选数据上具有巨大的作用。当学校的英语成绩为14,34,56,34,78,68,87,69,88,100时,要快速挑出不及格的分数,可以用which函数和逻辑运算。

    scores <- c(14, 34, 56, 34, 78, 68, 87, 69, 88, 100)
    which(scores < 60)
    scores[which(scores < 60)]

    当统计全校的分数时,数据量已经很大,很难一眼看出是否有不及格的同学,这个时候可以使用any()函数:只要有一个满足条件即为TRUE。any(scores < 60)返回TRUE,说明数据中有不及格的分数。

    scores <- c(14, 34, 56, 34, 78, 68, 87, 69, 88, 100)
    any(scores < 60)

    同理,我们可以用all()函数判断是否所有人都及格了。很明显,并不是所有人都及格了。

    all(scores > 60)

    当需要加载R包的时候,用requrie()函数可以返回逻辑值,加载成功为TRUE,加载失败为FALSE。

    思考题

    1. 下列返回FALSE的是哪个选项?
    A:9 >= 10
    B:7 == 7
    C:0 > -36
    D:6 < 8

    2. 下列哪个选项返回TRUE?
    A:9 >= 10
    B:57 < 8
    C:7 == 9
    D:-6 > -7

    3. 下列哪个选项返回FALSE?
    A:9 < 10
    B:!FALSE
    C:!(0 >= -1)
    D:7 != 8

    4. 请说明逻辑与&和严格逻辑与&&的区别?

    5. 5>8||6!=8&&4>3.9的结果?

    6. 下列结果为TRUE的是?
    A:TRUE && FALSE || 10 >= 5 && 1 < 8
    B:FALSE || TRUE && FALSE
    C:99.99 > 100 || 28 < 2.3 || 8 != 8.0
    D:TRUE && 15 < 15 && 6 >= 6

    7. 下列结果为FALSE的是?
    A:FALSE && 12 >= 12 || 1 >= 4 || 80 <= 49.5
    B:6 >= -3 && !(9 > 10) && !(!TRUE)
    C:FALSE || TRUE && 8 != 1 || 26 > 3
    D:!(8 > 7) || 19 == 19.0 && 7.8 >= 7.79

    8. 下列哪个结果是TRUE?
    A:isTRUE(!TRUE)
    B:isTRUE(3)
    C:!isTRUE(4 < 3)
    D:!isTRUE(8 != 5)
    E:isTRUE(NA)

    9. 下列哪个选项的结果为TRUE?
    A:!identical(7, 7)
    B:identical(4, 3.1)
    C:identical(5 > 4, 3 < 3.1)
    D:identical(‘hello’, ‘Hello’)

    10. xor(12,-1)的结果是什么?

    11. 下列选项为FALSE的是哪个?
    A:xor(!isTRUE(TRUE), 6 > -1)
    B:xor(identical(xor, ‘xor’), 7 == 7.0)
    C:xor(!!TRUE, !!FALSE)
    D:xor(4 >= 9, 8 != 8.0)

    12. 请说明any()函数的作用?

    13. 请说明all()函数的作用?

  • 利用HMP文件遗传相似度

    【功能】

    利用HMP文件计算遗传相似度(genetic_similarity)。

    数据中不能有NA。

    【鸣谢】

    四川农业大学 瞿静涛 算法思路

    黑龙江农科院 曹士亮 测试

    【更新历史】

    2020年8月17日

    • 增加了国内线路。

    2020年5月6日

    • 更换了计算逻辑,计算更快,但数据中不能有NA。

    2020年4月18日

    • 增加了自动去掉None数据的功能,避免程序出错。
    • 结果自动命名为【原文件名_性状名】的形式。

    【使用方法】

    在Rstudio中运行下列代码。

    海外:


    source("https://aozhangchina.github.io/R/genetic_similarity/genetic_similarity.r")   # 加载程序文件,需要联网

    国内:


    source("https://dataholdcn.cn/R/genetic_similarity/genetic_similarity.r")   # 加载程序文件,需要联网

    本页短链接:https://wp.me/p80aHo-8K