基于R的统计化30题

一.基础

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

data(iris)
head(iris)   ##Species是定性数据,其他的都是定量数据.

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

mode <- function(x) {
  uniqv <- unique(x)
  uniqv[which.max(tabulate(match(x, uniqv)))]
}
apply(iris,2,mode)   #可以对文字求众数
summary(iris)         
apply(iris[1:4],2,mean)

Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
       "5.0"        "3.0"        "1.4"        "0.2"     "setosa" 

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

table(iris$Species)
 setosa versicolor  virginica 
        50         50         50 

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

apply(iris[1:4],2,sd)
apply(iris[1:4],2,var)
range <-function(x){
  max(x)-min(x)
 }
apply(iris[1:4],2,range)
library(raster)
install.packages('raster')
apply(iris[1:4],2,raster::cv)

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

> cor(iris$Sepal.Length,iris$Sepal.Width,method = "pearson")
[1] -0.1175698
> cor(iris$Sepal.Length,iris$Sepal.Width,method = "kendall")
[1] -0.07699679
> cor(iris$Sepal.Length,iris$Sepal.Width,method = "spearman")
[1] -0.1667777
##这三种方法的区别???仔细看看

Q6:对数据集 iris的所有定量数据列内部zcore标准化,并计算标准化后每列的平均值和标准差

iris <- apply(iris[1:4],2,scale)
> apply(iris,2,mean)
 Sepal.Length   Sepal.Width  Petal.Length   Petal.Width 
-4.484318e-16  2.034094e-16 -2.895326e-17 -3.663049e-17 
> apply(iris,2,sd)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
           1            1            1            1 
##标准化是有好几种方法的.zcore标准化好像是针对平均值和方差进行标准化的.

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

iris <- as.data.frame(iris)
cor(iris$Sepal.Length,iris$Sepal.Width,method = "pearson")
cor(iris$Sepal.Length,iris$Sepal.Width,method = "kendall")
cor(iris$Sepal.Length,iris$Sepal.Width,method = "spearman")

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

data("iris")
head(iris)
unique(iris$Species)
setosa <- iris[iris$Species=="setosa",]
head(setosa)
versicolor <- iris[iris$Species=="versicolor",]
virginica <- iris[iris$Species=="virginica",]

all_calculate <- function(data){
  mode <- apply(data[,1:4],2,mode)#众数
  fivenum <- summary(data)#分位数
  mean <- apply(data[,1:4],2,mean)#平均数
  frequence <- table(data$Species)
  sd <- apply(data[,1:4],2,sd)#标准差
  var <- apply(data[,1:4],2,var)#方差
  cor <- cor(data[,1],data[,2])
  
  data_scale=t(scale(t(data[,1:4])))
  mean_scale <- apply(data_scale,2,mean)#平均数
  sd_scale <- apply(data_scale,2,sd)#标准差
  cor_scale <- cor(data_scale[,1],data_scale[,2])
  
  return(c(mean=mean, fivenum=fivenum, sd=sd, var=var, frequence=frequence,
           mode=mode, cor=cor, mean_scale=mean_scale, sd_scale=sd_scale,
           cor_scale=cor_scale))
}

all_calculate(setosa)

all_calculate(versicolor)

all_calculate(virginica)

Q9:载入R中自带的数据集 mtcars,重复上面的Q1到Q7个问题

data("mtcars")
all_calculate <- function(data){
  head(data)
  mode <- apply(data[,1:4],2,mode)#众数
  fivenum <- summary(data)#分位数
  mean <- apply(data[,1:4],2,mean)#平均数
  frequence <- table(data$Species)
  sd <- apply(data[,1:4],2,sd)#标准差

  var <- apply(data[,1:4],2,var)#方差
  cor <- cor(data[,1],data[,2])
  
  data_scale=t(scale(t(data[,1:4])))
  mean_scale <- apply(data_scale,2,mean)#平均数
  sd_scale <- apply(data_scale,2,sd)#标准差
  cor_scale <- cor(data_scale[,1],data_scale[,2])
  
  return(c(mean=mean, fivenum=fivenum, sd=sd, var=var, frequence=frequence,
           mode=mode, cor=cor, mean_scale=mean_scale, sd_scale=sd_scale,
           cor_scale=cor_scale))
}

all_calculate(mtcars)

Q10: 载入r包airway并且通过assay函数拿到其表达矩阵后计算每列之间的相关性

library(airway)
data(airway)
RNAseq_expr=assay(airway)

M <- cor(RNAseq_expr)
pheatmap::pheatmap(M)

二.表达矩阵相关

Q1: 把RNAseq_expr第一列全部加1后取log2后计算平均值和标准差

head(RNAseq_expr)
RNAseq_gl=colData(airway)[,3]  # ???
print(RNAseq_gl)
table(RNAseq_gl)
class(RNAseq_expr)
log <- log(RNAseq_expr[,1]+1)
head(log)
mean(log)
sd(log)

Q2: 根据上一步得到平均值和标准差生成同样个数的随机的正态分布数值

length(log)
rnorm <- rnorm(64102,mean = 1.560774,sd=2.527118)

Q3: 删除RNAseq_expr第一列低于5的数据后,重复Q1和Q2

RNAseq_expr <- RNAseq_expr[RNAseq_expr[,1]>=5,]
log <- log2(RNAseq_expr[,1]+1)
tmp <- RNAseq_expr[,1]
rnorm <-rnorm(length(tmp),mean = mean(tmp),sd = sd(tmp))

Q4: 基于Q3对RNAseq_expr的第一列和第二列进行T检验

head(RNAseq_expr)
RNAseq_expr <- RNAseq_expr[RNAseq_expr[,1]>=5,]
RNAseq_expr <- RNAseq_expr[RNAseq_expr[,2]>=5,]
t.test(RNAseq_expr[,1],RNAseq_expr[,2])

library(ggpubr)
library(ggplot2)

t <- data.frame(value=c(RNAseq_expr[,1],RNAseq_expr[,2]))
t$group <- c(rep('SRR1039508',length(RNAseq_expr[,1])),rep('SRR1039509',length(RNAseq_expr[,2])))
ggboxplot(t, y = "value", x = "group")

Q5: 取RNAseq_expr行之和最大的那一行根据分组矩阵进行T检验

RNAseq_expr <- assay(airway)
max <- which.max(apply(RNAseq_expr,1,sum))
RNAseq_expr[max,]

RNAseq_gl
class(RNAseq_gl)
t.test(RNAseq_expr[max,]~RNAseq_gl)

Q6:取RNAseq_expr的MAD最大的那一行根据分组矩阵进行T检验

mad <- which.max(apply(RNAseq_expr,1,mad))
t.test(RNAseq_expr[mad,]~RNAseq_gl)

Q7: 对RNAseq_expr全部加1后取log2后重复Q5和Q6

RNAseq_expr=log2(RNAseq_expr+1)
sum=which.max(rowSums(RNAseq_expr))
t.test(RNAseq_expr[sum,]~RNAseq_gl)
mad=which.max(apply(RNAseq_expr,1,mad))
t.test(RNAseq_expr[mad,]~RNAseq_gl)

Q8: 取RNAseq_expr矩阵的MAD最高的100行,对列和行分别进行层次聚类

a <- apply(RNAseq_expr,1,mad)
high100 <- names(tail(sort(a),100))
high100 <- RNAseq_expr[high100,]
dim(high100)
head(high100)
plot(hclust(dist(high100)))
high100 <- t(high100)
plot(hclust(dist(high100)))

Q9: 取RNAseq_expr矩阵的SD最高的100行,对列和行分别进行层次聚类

a <- apply(RNAseq_expr,1,sd)
high100 <- names(tail(sort(a),100))
high100 <- RNAseq_expr[high100,]
dim(high100)
head(high100)
plot(hclust(dist(high100)))
high100 <- t(high100)
plot(hclust(dist(high100)))

Q10: 对Q8矩阵按照行和列分别归一化并且热图可视化

pheatmap::pheatmap(scale(high100))
pheatmap::pheatmap(t(scale(t(high100))))

三.统计检验相关

先过滤,过滤那些每一列都为0的行。

rm(list = ls())
library(airway)
data(airway)
RNAseq_expr <- assay(airway)
a <- RNAseq_expr[apply(RNAseq_expr,1,function(x) sum(x>0)>1),] 
dim(a)
dim(RNAseq_expr)
RNAseq_gl <- colData(airway)[,3]
table(RNAseq_gl)

Q1: 对e1每一行独立根据分组矩阵进行T检验,检查为什么有些行T检验失败

head(a)
t <- function(x){
  t.test(x~RNAseq_gl)$P.value
}
apply(a,1,t)
##问题在于t.test无法比较各项相等的两个向量

Q2: 找出T检验失败的行并且从e1矩阵剔除掉

e1_a=e1[,RNAseq_gl=='trt']
e1_b=e1[,RNAseq_gl=='untrt']
a_filter=apply(e1_a, 1,function(x) sd(x)>0)
b_filter=apply(e1_b, 1,function(x) sd(x)>0)
table(a_filter,b_filter)
e1=e1[a_filter | b_filter,]

Q3: 对过滤后的e1矩阵进行每一行独立根据分组矩阵进行T检验

dim(e1)
  apply(e1,1,function(x) t.test(x~RNAseq_gl)$p.value)

Q4: 对e1矩阵进行加1后log2的归一化命名为e2再对每一行独立根据分组矩阵进行T检验

  e2=log2(e1+1)
  apply(e2,1,function(x) t.test(x~RNAseq_gl)$p.value)

Q5: 对e1,e2的T检验P值做相关性分析

p1=apply(e1,1,function(x) t.test(x~RNAseq_gl)$p.value)
  p2=apply(e2,1,function(x) t.test(x~RNAseq_gl)$p.value)
  cor(p1,p2)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352