卫生统计学R语言代码总结
目录
- 前言
- 不同分布相关函数
- 统计描述
- 数值变量
- 集中位置
- 离散程度
- 正态性检验
- 分类变量
- 数值变量
- t检验
- 方差分析
- 假设检验
- 两两比较
- 秩和检验
- 假设检验
- 两两比较
- 卡方检验
- 回归分析
前言
这学期上了卫统,学R语言,姑且按自己的理解整理一下所有章节的R语言代码吧。(毕竟要考试了)
个人觉得最重要的部分是后面的假设检验和回归分析的部分,前面的东西,嘶,随便弄弄吧,反正应该不会没有自动补全吧...
整理的或许不是很全,有需要之后再补充一些吧。姑且先这样
各个函数的参数我只写出了比较常用的,其他的参数可以到R里面使用“?+函数名”来查看。
不同分布相关函数
本学期所有学到的分布有:正态分布、伯努利分布、二项分布、泊松分布、卡方分布、t分布、F分布等。下面以正态分布为例说明r、d、p、q的区别。
# r开头,返回生成n个随机数
rnorm(n, mean = 0, sd = 1)
# d开头,返回x处的概率密度
dnorm(x, mean = 0, sd = 1)
# p开头,返回q处的概率分布,即小于q的概率密度积分
pnorm(q, mean = 0, sd = 1)
# q开头,返回概率为p时对应的q,即上一个函数的反函数
qnorm(p, mean = 0, sd = 1)
上面是正态分布相关的函数,其它分布的函数名首字母含义意思差不多。下面以p开头演示不同分布的区别。
# 正态分布 mean 均值 sd 标准差
pnorm(q, mean = 0, sd = 1)
# 二项分布 size 实验次数 prob 成功概率
# 伯努利分布只需size = 1即可
pbinom(q, size, prob)
# 泊松分布 lamda λ值
ppois(q, lambda)
# 卡方分布 df 自由度
pchisq(q, df)
# t分布 df 自由度
pt(q, df)
# F分布 df1 df2 自由度
pf(q, df1, df2)
统计描述
数值变量
主要包含:集中位置,离散程度,正态性检验。
集中位置
# 以下数据均由data代替
mean(data) # 均数
exp(mean(log(data))) # 几何均数 R没有直接求几何均数的方法
median(data) # 中位数
quantile(data, prob) # 四分位数 prob向量为分位点
# 众数 R中没有直接求众数的方法
temp <- table(data) # table函数可以统计各个数值出现频次
temp[which.max(temp)] # which.max函数返回最大值的位置
离散程度
max(data) - min(data) # 极差
# 四分位数间距
quantile <- quantile(data, prob)
quantile[4] - quantile[2]
var(data) # 方差
sd(data) # 标准差
raster::cv(data) # 变异系数 R原版没有该函数
# 这种写法表示不用library就能使用raster包中的某个函数
正态性检验
boxplot(data) # 箱式图
hist(data, freq) # 直方图 freq = F则表示概率密度 否则为频数
# 在上图中添加数据的概率密度图线
# lines函数用于在图像上添加曲线 主要用法百度吧
lines(density(data)) # density函数可估计数据的概率密度
# 绘制正态曲线
xfit <- seq(min(data), max(data), by) # by为间隔
yfit <- dnorm(xfit, mean(data), sd(data))
lines(xfit, yfit)
# pp图 有点复杂 感觉不重要... 不过可以看一下plot函数的一些参数
plot((rank(data) - 0.5) / length(data),
pnorm(data, mean(data), sd(data)),
xlab = "实际累计概率", ylab = "期望累计概率", main = "P-P图")
lines(x = c(0, 100), y = c(0, 100))
# qq图
qqnorm(data)
qqline(data)
# 偏度和峰度 两个函数都在moments包里面 看起来不重要
skewness(data)
kurtosis(data)
# Shapiro-Wilk检验 用于小样本
shapiro.test(data)
# Kolmogorov-Smirnov检验 用于大样本
# 这我抄的 不想看了 谁爱看谁看
ks.test(data + runif(length(data$value), -0.05, 0.05),
"pnorm", value_Mean, value_Sd)
分类变量
看了一下感觉没什么可能考的东西...干脆摸了
t检验
接下来的四种假设检验多半才是重点吧,索性不算多,有自动补全代码的话几乎就不用记了。
t检验一共三种嘛:单样本t检验,配对t检验,成组t检验。
# 单样本 mu是你要检验的总体均数 懂得都懂
t.test(data, mu)
# 配对
t.test(data1, data2, paird = T)
# 成组 g是你的分组变量 var.equal是方差齐性
t.test(data~g, var.equal)
# 检验方差齐性 毕竟t检验只有两组 直接用这个就行
var.test(data~g)
方差分析
方差分析也就两种嘛:完全随机设计方差分析、随机区组设计方差分析。主要是还有一个Levene方差齐性检验和两两比较。
假设检验
# 完全随机设计方差分析 有两种写法 g为分组变量
anova(lm(data~g))
summary(aov(data~g))
# 随机区组设计方差分析 treat为处理因素分组 block为区组因素分组
anova(lm(data~treat+block))
# Levene方差齐性检验
# 这玩意其实就是先算一个z统计量 再对他方差分析 就完事了
m <- aggregate(data, by = list(g), FUN = 'mean')$x
m <- rep(m, c(...)) # 这里这个向量写每组个数
z <- abs(data - m)
summary(aov(z~g))
两两比较
两两比较主要有三种方法:LSD法、Bonferroni法、SNK法。其中Bonferroni法应该只是一种矫正的思想吧。
# LSD
pairwise.t.test(data, g, p.adjust.method = 'none')
# Bonferroni 就是改一个参数而已
pairwise.t.test(data, g, p.adjust.method = 'bonf')
# SNK
snk <- SNK.test(aov(data~g), "g", group = FALSE)
snk$comparison
# 哦对这函数在agricolae包里面来着
秩和检验
非参数检验这边东西就麻烦起来了,秩和检验四种:Wilcoxon符号秩和、Wilcoxon秩和、Kruskal-Wallis检验(H检验)、Friedman检验(M检验)。
假设检验
# Wilcoxon符号秩和检验
# alternative是双侧检验 你也可以选择greater或less的单侧检验
# correct是是否进行连续性矫正 默认是T
wilcox.test(data1, data2, paired = T, alternative = "two.sided", correct = F)
# Wilcoxon秩和检验
wilcox.test(data~g, correct = F)
# Kruskal-Wallis检验
kruskal.test(data~g)
# Friedman检验
# treat 处理因素分组 block 区组因素分组
friedman.test(data ~ treat|block)
# 值得一提的是所有的函数都不会输出你需要的秩、秩和
# 我们可以使用rank函数返回秩
rank(data) # 返回data中每个数据的秩次
sum(rank(data)) # 秩和
两两比较
实际上秩和检验的两两比较,一般Nemenyi就足够了,H检验的话Bonf也行。
# 下面是H检验的两两比较 这一大段都是我复制的 老师的代码已经足够优秀了
## 法1-pairwise.wilcox.test(Bonferroni)
with(data=data3,
pairwise.wilcox.test(
x=time, g=group, p.adjust.method = "bonferroni"))
# 法2~4均基于PMCMRplus包实现
install.packages("PMCMRplus")
library(PMCMRplus)
## 法2-Nemenyi's all-pairs comparison test
res <- kwAllPairsNemenyiTest(time~group, data=data3, dist ="Tukey")
summary(res)
## 在法2-Nemenyi中,Only for method = "Chisq" a tie correction is employed.
res <- kwAllPairsNemenyiTest(time~group, data=data3, dist ="Chisquare")
summary(res)
## 法3-Dunn's all-pairs comparison test
res <- kwAllPairsDunnTest(time~group, data=data3, p.adjust.method = "bonferroni")
summary(res)
## 法4-single-step means Tukey's p-adjustment
res <- kwAllPairsConoverTest(time~group, data=data3, p.adjust.method = "single-step")
summary(res)
# 其实法二非常足够用了
# 下面是Friedman检验的多重比较 同样是直接复制抄过来的
# 多重比较-Nemenyi法
res <- frdAllPairsNemenyiTest(score~group|block, data=data4)
summary(res)
卡方检验
卡方检验三种:独立四格表、配对四格表、行x列表
# 独立四格表
chisq.test(data)
fisher.test(data) # fisher精确概率
# 配对四格表 correct参数表示是否连续性矫正 默认是T
mcnemar.test(data, correct = T)
# 这俩是确切概率法 需要exact2x2和exactci包
exact2x2::exact2x2(data, paired = TRUE)
mcnemar.exact(data)
# 行x列表
chisq.test(data)
回归分析
你先别急,我还没复习
标签:函数,data,检验,方差分析,统计学,笔记,test,卫生,mean From: https://www.cnblogs.com/BlueNine9/p/16954957.html