教学类文章的写作自有套路,新的教学方法的应用评估,如何选择统计方法是一个问题。
在统计学上,教学前后的自身对照,属于类实验。
在医学生物研究中,经常会听到“类实验”研究,意思是研究设计中有对研究对象的干预内容,与实验研究不同的是设计内容缺少随机原则分组或不设对照组。
我们这里说的“类实验”研究指的是带有类似实验研究背景的研究方式,比如研究新型教学方式是否有效,将学生班级分为两组,其中一组为实验组,另外一组为对照组,实验组使用新型教学方式,对照组不作任何处理。
还有另一种类实验式问卷为实验前与实验后式问卷,比如测验新型教学方式是否有效,分别测量学生新型教学方式(实验)前,和新型教学方式之后的成绩对比。
“类实验”类研究,通常也称作“情景”类研究等,在通常情况下,这类问卷研究影响关系并不通过回归分析,而是通过差异研究分析,如果具有差异性其说明变量之间有影响关系,反之则说明没有影响关系。此类框架在市场研究、教育学、心理学中相对较为常见,通常均是使用量表类问卷题。
从研究思路上看:
1. 和其他类型研究相似,首先对样本背景,和样本特征、行为分析。使用频数分析了解各题项具体情况。
2. 信度和效度分析。对研究量表进行信度和量表验证。针对信度分析,有时将实验组和对照组分别进行研究,也或者对实验前样本和实验后样本分别进行信度研究。
3. 交互作用研究。此步骤为“类实验”式问卷核心研究步骤,通常情况下“类实验”类问卷研究会分析实验组和对照组的差异情况,也或者实验前和实验后样本的差异情况。在此基础上,研究人员可以对在实验水平不同(实验组和对照组,或者实验前和实验后)时,X对于Y的影响幅度是否一致进行研究,比如不同。
4. 研究变量描述分析。如果研究问卷使用量表,则可以分别对实验组和对照组,也或者对实验前和实验后研究量表平均得分情况进行分析。
5. 差异分析,如果在交互作用研究中发现具有差异性,也即说明实验有效,可以继续深入研究具体差异情况。
如果使用A方法和B方法进行比较,通常使用t检验就可以。
如果没有不同方法的比较,而是使用自身前后对照查看是否达到教学目标,应该使用什么统计方法呢?
教学前评分和教学后评分的统计方法,使用的统计方法为配对T检验或者Wilcoxon符号秩检验。
人员数 | 教学前 | 教学后 | t值 | P值 |
---|---|---|---|---|
n | x ± s | x ± s | t | p |
R语言统计实现:
pretest<-c(1,1,1,1,1,3,1,1,1,1,1,2,1,1,1,1,1,1,3,2,2,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1)
aftertest<-c(5,5,5,5,5,4,3,5,5,5,5,4,4,4,5,3,5,5,4,5,4,3,5,5,3,5,5,3,5,4,4,4,4,4,4,4,5)
t.test(aftertest,pretest,paired=T)
Paired t-test
data: aftertest and pretest
t = 20.125, df = 36, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
2.819198 3.451072
sample estimates:
mean of the differences
3.135135
install.packages("ggpubr")
library(ggpubr)
data <- data.frame(before = pretest, after = aftertest)
View(data)
ggpaired(data, cond1 = "before", cond2 = "after", fill = "condition", palette = "jco")
df <- data.frame(Dix_Hallpike_maneuver=factor(rep(c("培训前", "培训后"), each=37)),weight=c(pretest,aftertest))
p <- ggboxplot(df, x="Dix_Hallpike_maneuver", y="weight", color = "Dix_Hallpike_maneuver",
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
add = "jitter", shape="Dix_Hallpike_maneuver")#增加了jitter点,点shape由dose映射p
p+stat_compare_means(label.y = 7,method = "t.test", paired = T)
my_comparisons <- list(c("培训前自评", "培训后自评"),c("老师评价", "培训后自评"),c("培训后自评", "学员互评"))
df1 <- data.frame(Dix_Hallpike_maneuver=factor(rep(c("培训前自评", "培训后自评","学员互评","老师评价"), each=37)),weight=c(X1[[1]],X1[[2]],X1[[3]],X1[[4]]))
p <- ggboxplot(df1, x="Dix_Hallpike_maneuver", y="weight", color = "Dix_Hallpike_maneuver",
palette = "jco",
add = "jitter", shape="Dix_Hallpike_maneuver")#增加了jitter点,点shape由dose映射p
p +stat_compare_means(label.y = 7,comparisons=my_comparisons,method = "t.test", paired = T)
df <- data.frame(Roll_maneuver=factor(rep(c("培训前自评", "培训后自评","学员互评","老师评价"), each=37)),weight=c(X1[[5]],X1[[6]],X1[[7]],X1[[8]]))
p <- ggboxplot(df, x="Roll_maneuver", y="weight", color = "Roll_maneuver",
palette = "jco",
add = "jitter", shape="Roll_maneuver")#增加了jitter点,点shape由dose映射p
p +stat_compare_means(label.y = 7,comparisons=my_comparisons,method = "t.test", paired = T)
df <- data.frame(Epley_maneuver=factor(rep(c("培训前自评", "培训后自评","学员互评","老师评价"), each=37)),weight=c(X1[[9]],X1[[10]],X1[[11]],X1[[12]]))
p <- ggboxplot(df, x="Epley_maneuver", y="weight", color = "Epley_maneuver",
palette = "jco",
add = "jitter", shape="Epley_maneuver")#增加了jitter点,点shape由dose映射p
p +stat_compare_means(label.y = 7,comparisons=my_comparisons,method = "t.test", paired = T)
df <- data.frame(Lempert_maneuver=factor(rep(c("培训前自评", "培训后自评","学员互评","老师评价"), each=37)),weight=c(X1[[13]],X1[[14]],X1[[15]],X1[[16]]))
p <- ggboxplot(df, x="Lempert_maneuver", y="weight", color = "Lempert_maneuver",
palette = "jco",
add = "jitter", shape="Lempert_maneuver")#增加了jitter点,点shape由dose映射p
p +stat_compare_means(label.y = 7,comparisons=my_comparisons,method = "t.test", paired = T)
学员自评 学员互评 老师评价
单因素K水平方差分析
RStudio 可以直接导入excel数据,对于数据分析非常方便。
数据框数据访问方法:
1.配对t检验
t.test(bppvdata[[13]],bppvdata[[14]],paired=T,alternative="greater")
2.数据分析
mystats <- function(x, na.omit = FALSE){
if (na.omit)
x <- x[!is.na(x)]
m <- mean(x)
n <- length(x)
s <- sd(x)
skew <- sum((x-m)^3/s^3)/n
kurt <- sum((x-m)^4/s^4)/n - 3
return(c(n=n, mean=m, stdev=s, skew=skew,kurtosis=kurt))
}
sapply(bppvdata[1:4],mystats) #Dix-Hallpike试验
sapply(bppvdata[5:8],mystats) #水平滚转试验
sapply(bppvdata[9:12],mystats) #Epley手法
sapply(bppvdata[13:16],mystats) #Lempert手法
sapply(bppvdata[1:4],mystats)
培训前...1 培训后自评...2 互评...3 老师评价...4
n 37.0000000 37.0000000 37.0000000 37.0000000
mean 1.2432432 4.3783784 4.3783784 4.4324324
stdev 0.5479966 0.7207770 0.7583370 0.6472395
skew 2.0658288 -0.6665117 -0.7129984 -0.6535559
kurtosis 3.2319708 -0.8818950 -0.9675166 -0.6704142
sapply(bppvdata[5:8],mystats)
培训前...5 培训后自评...6 互评...7 老师评价...8
n 37.0000000 37.0000000 37.0000000 37.0000000
mean 1.1351351 4.2972973 4.4324324 4.4594595
stdev 0.3465835 0.7403027 0.6888211 0.6909975
skew 2.0485895 -0.5042088 -0.7567585 -0.8422572
kurtosis 2.2599708 -1.0879482 -0.6745109 -0.5726743
sapply(bppvdata[9:12],mystats)
培训前...9 培训后自评...10 互评...11 老师评价...12
n 37.0000000 37.0000000 37.0000000 37.0000000
mean 1.1351351 4.2702703 4.3783784 4.2432432
stdev 0.3465835 0.8044546 0.7207770 0.6414136
skew 2.0485895 -0.4994316 -0.6665117 -0.2397026
kurtosis 2.2599708 -1.3226117 -0.8818950 -0.7821146
sapply(bppvdata[13:16],mystats)
培训前...13 培训后自评...14 互评...15 老师评价...16
n 37.0000000 37.0000000 37.0000000 37.0000000
mean 1.1351351 4.2432432 4.4054054 4.2702703
stdev 0.3465835 0.7960111 0.6855436 0.6518627
skew 2.0485895 -0.4382283 -0.6746476 -0.3057622
kurtosis 2.2599708 -1.3352787 -0.7536039 -0.8317010
3.单因素K水平方差分析
非正态分析,使用Kruskal-Wallis试验。
df1 <- data.frame(Dix_Hallpike_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[2]],bppvdata[[3]],bppvdata[[4]]))
kruskal.test(weight ~ Dix_Hallpike_maneuver, data = df1)
df2 <- data.frame(Roll_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[6]],bppvdata[[7]],bppvdata[[8]]))
kruskal.test(weight ~ Roll_maneuver, data = df2)
df3 <- data.frame(Epley_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[10]],bppvdata[[11]],bppvdata[[12]]))
kruskal.test(weight ~ Epley_maneuver, data = df3)
df4 <- data.frame(Lempert_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[14]],bppvdata[[15]],bppvdata[[16]]))
kruskal.test(weight ~ Lempert_maneuver, data = df4)
结果包括chi-squared
> df1 <- data.frame(Dix_Hallpike_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[2]],bppvdata[[3]],bppvdata[[4]]))
> kruskal.test(weight ~ Dix_Hallpike_maneuver, data = df1)
Kruskal-Wallis rank sum test
data: weight by Dix_Hallpike_maneuver
Kruskal-Wallis chi-squared = 0.045556, df = 2, p-value = 0.9775
>
>
>
> df2 <- data.frame(Roll_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[6]],bppvdata[[7]],bppvdata[[8]]))
> kruskal.test(weight ~ Roll_maneuver, data = df2)
Kruskal-Wallis rank sum test
data: weight by Roll_maneuver
Kruskal-Wallis chi-squared = 1.1005, df = 2, p-value = 0.5768
>
>
> df3 <- data.frame(Epley_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[10]],bppvdata[[11]],bppvdata[[12]]))
> kruskal.test(weight ~ Epley_maneuver, data = df3)
Kruskal-Wallis rank sum test
data: weight by Epley_maneuver
Kruskal-Wallis chi-squared = 0.98231, df = 2, p-value = 0.6119
>
>
> df4 <- data.frame(Lempert_maneuver=factor(rep(c("培训后自评","学员互评","老师评价"), each=37)),weight=c(bppvdata[[14]],bppvdata[[15]],bppvdata[[16]]))
> kruskal.test(weight ~ Lempert_maneuver, data = df4)
Kruskal-Wallis rank sum test
data: weight by Lempert_maneuver
Kruskal-Wallis chi-squared = 1.077, df = 2, p-value = 0.5836
配对资料的Wilcoxon符号秩和检验
符号秩可以检验单样本、成对样本,而秩次和是检验非成对样本的。参数paired默认为F,所以,直接用就是秩次和,若想做符号秩的成对样本就写paired=T。
> wilcox.test(bppvdata[[2]],bppvdata[[1]],paired = T,alternative = "greater",,exact=FALSE,correct=FALSE)
Wilcoxon signed rank test
data: bppvdata[[2]] and bppvdata[[1]]
V = 703, p-value = 3.62e-08
alternative hypothesis: true location shift is greater than 0
> wilcox.test(bppvdata[[6]],bppvdata[[5]],paired = T,alternative = "greater",,exact=FALSE,correct=FALSE)
Wilcoxon signed rank test
data: bppvdata[[6]] and bppvdata[[5]]
V = 703, p-value = 3.568e-08
alternative hypothesis: true location shift is greater than 0
> wilcox.test(bppvdata[[10]],bppvdata[[9]],paired = T,alternative = "greater",,exact=FALSE,correct=FALSE)
Wilcoxon signed rank test
data: bppvdata[[10]] and bppvdata[[9]]
V = 703, p-value = 3.713e-08
alternative hypothesis: true location shift is greater than 0
> wilcox.test(bppvdata[[14]],bppvdata[[13]],paired = T,alternative = "greater",,exact=FALSE,correct=FALSE)
Wilcoxon signed rank test
data: bppvdata[[14]] and bppvdata[[13]]
V = 703, p-value = 3.736e-08
alternative hypothesis: true location shift is greater than 0
>