生信学习——基于R的统计习题(附详细答案解读)

题目目录


写在前面——本文是介绍了一些统计学的基础知识,以及如何用R语言实现。旨在熟练使用编程语言解决实际问题。统计学是一门复杂的学科,还需更加系统的学习。下方 生统基础是大佬写的StartQuest的读书笔记,能够帮助快速理解生物统计学。

题目原文:http://www.bio-info-trainee.com/4385.html
参考答案:https://www.jianshu.com/p/1c0cbf1bfb75
参考答案:https://hc1023.github.io/2019/09/27/R-statistic/
生统基础:http://rvdsd.top/categories/%E7%94%9F%E7%BB%9F%E4%B9%8BStatQuest/

基础概念

1. 载入R中自带的数据集 iris,指出其每列是定性还是定量数据

colnames(iris)
head(iris)

在这里插入图片描述

基础概念讲解:https://mp.weixin.qq.com/s/OtB2h6f00U2SRZLzveJKfQ
前四个为定量变量,最后一个为定性变量

2. 对数据集 iris的所有定量数据列计算集中趋势指标:众数、分位数和平均数

# 求前四个变量的最大值、最小值、分位数和平均数
summary(iris[,1:4])

# R中无直接求众数的函数
# 法一
# tmp <- table(iris[,1])
# index <- which.max(tmp)
# tmp[index]

# 法二
getmode <- function(x){
   
  return(as.numeric(names(table(x))[table(x) == max(table(x))]))
}

# table(iris[,1]) == max(table(iris[,1]))
# names(table(iris[,1]))
# names(table(iris[,1]))[table(iris[,1]) == max(table(iris[,1]))]

for(i in 1:4){
   
  print(getmode(iris[,i]))
}

# 第三列有两个众数

在这里插入图片描述

3. 对数据集 iris的所有定性数据列计算水平及频次

summary(iris[,5])

#output#
setosa versicolor  virginica 
    50         50         50 


4. 对数据集 iris的所有定量数据列计算离散趋势指标:方差和标准差等

# 方差
apply(iris[,1:4], 2, var)
# 标准差
apply(iris[,1:4], 2, sd)

# 通过psych包中的describe()计算描述性统计量
# 输出结果依次为:非缺失值的数量、平均数、标准差、中位数、截尾均值、绝对中位差、最小值、最大值、值域、偏度、峰度和平均值的标准误
# install.packages("psych")
library(psych)
describe(iris[,1:4])

在这里插入图片描述

5. 计算数据集 iris的前两列变量的相关性,提示cor函数可以选择3种methods

cor(iris[,1:2], method = "pearson")
cor(iris[,1:2], method = "spearman")
cor(iris[,1:2], method = "kendall")

Pearson积差相关系数衡量了两个定量变量之间的线性相关程度(默认值)
Spearman等级相关系数则衡量分级定序变量之间的相关程度
Kendall’sTau相关系数也是一种非参数的等级相关度量

在这里插入图片描述


6. 对数据集 iris的所有定量数据列内部z-score标准化,并计算标准化后每列的平均值和标准差

newdata <- apply(iris[1:4],2,scale)
apply(newdata,2,mean)
apply(newdata,2,sd)

在这里插入图片描述

在这里插入图片描述

图源:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80312154

scale(x, center = TRUE, scale = TRUE)
center和scale默认为真,center为真表示数据中心化,scale为真表示数据标准化
数据中心化是指:变量减去它的均值
数据标准化是指:数值减去均值,再除以标准差


所以不难理解,对数据的每列调用scale就完成了z-score标准化
标准化之后的数据均值为0,标准差为1(上面的均值结果近似于0,也算为0吗?)

参考:https://zhuanlan.zhihu.com/p/32482328

7. 计算列内部zcore标准化后 iris的前两列变量的相关性

cor(newdata[,1:2], method = "pearson")
cor(newdata[,1:2], method = "spearman")
cor(newdata[,1:2], method = "kendall")

在这里插入图片描述

与第5题结果相同,标准化后的数据相关性不变

8. 根据数据集 iris的第五列拆分数据集后重复上面的Q2到Q7问题

# 划分数据集
table(iris$Species)
setosa <- iris[iris$Species=="setosa",]
head(setosa)
versicolor <- iris[iris$Species=="versicolor",]
virginica <- iris[iris$Species=="virginica",]

# 写个无脑输出函数
getResult <- function(x){
   
  print("### 2 ###")
  print(apply(x[,1:4], 2, getmode))
  print(summary(x[,1:4]))
  
  print("### 3 ###")
  print(summary(x[,5]
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值