格式化考试结果以在R中执行t检验
问题概述:我有一个包含15个问题的教学前和教学后考试结果的数据集。我希望对结果进行t检验,以比较总体平均值,但很难正确格式化数据集。数据集的示例部分如下所示: 然后,除了比较每个问题的前后分数之间的差异外,我还想运行一个比较前后平均值的t检验,但是,我需要用NA省略任何数据点。目前,我的方法不适用于任何NA值,因此将它们替换为零。是否有任何方法可以运行这些测试并简单地忽略NA值?谢谢大家! 所需输出:格式化考试结果以在R中执行t检验,r,dataframe,format,t-test,R,Dataframe,Format,T Test,问题概述:我有一个包含15个问题的教学前和教学后考试结果的数据集。我希望对结果进行t检验,以比较总体平均值,但很难正确格式化数据集。数据集的示例部分如下所示: 然后,除了比较每个问题的前后分数之间的差异外,我还想运行一个比较前后平均值的t检验,但是,我需要用NA省略任何数据点。目前,我的方法不适用于任何NA值,因此将它们替换为零。是否有任何方法可以运行这些测试并简单地忽略NA值?谢谢大家! 所需输出: 1Pre 1Post 2Pre 2Post 3Pre
1Pre 1Post 2Pre 2Post 3Pre 3Post
Correct B B A A B B
1 1 1 0 0 0 1
2 0 1 0 0 0 1
3 <NA> <NA> <NA> <NA> <NA> <NA>
4 1 1 0 0 1 1
5 1 1 0 0 1 1
6 0 1 0 1 0 0
7 0 0 0 0 0 0
8 0 0 0 0 0 0
1Pre 1Post 2Pre 2Post 3Pre 3Post
纠正B
1 1 1 0 0 0 1
2 0 1 0 0 0 1
3.
4 1 1 0 0 1 1
5 1 1 0 0 1 1
6 0 1 0 1 0 0
7 0 0 0 0 0 0
8 0 0 0 0 0 0
您可以尝试将以下参数传递给t.test调用:
na.action=na.omit
比如:
with(qDat, t.test(`1Pre`, `1Post`, na.action = na.omit))
那么这个呢:
重写您的循环-无需担心NA
s,因为您将它们视为0
,我们只需测试结果,然后将NA
s设置为FALSE
:
test <- qDat == correctAns # or correctAns[1] depending on your needs
test[is.na(test)] <- FALSE
storage.mode(test) <- "integer"
test
# X1 X2 X3 X4 X5 X6 X7 X8
# [1,] 0 1 0 0 1 0 1 0
# [2,] 0 0 1 0 0 0 0 0
# [3,] 0 1 0 0 1 0 0 0
# [4,] 0 0 1 0 0 0 0 0
# [5,] 1 0 0 0 0 0 1 0
# [6,] 0 0 1 1 1 1 1 0
# [7,] 0 0 0 1 0 0 1 0
# [8,] 0 0 0 0 0 0 0 1
测试谢谢!这解决了问题的后半部分。现在的问题是将A、B、C、D字符转换为0和1,前提是它们与正确的答案值匹配,而不会丢失NA值。你有什么建议吗?干杯@ZachEisner,您只需要删除test[is.na(test)]谢谢!实现第一行代码时,我得到的错误“==”仅针对大小相同的数据帧定义。作为参考,correctAns是一个长度为30(30个问题)的向量,qDat是一个尺寸为106x30(106名参与者,30个问题)的数据框架@ZachEisner我用您指定的尺寸复制了它,它仍然有效-请参见编辑。您确定qDat
不是30乘106
吗?t(qDat)=纠正措施是否有效?
with(qDat, t.test(`1Pre`, `1Post`, na.action = na.omit))
test <- qDat == correctAns # or correctAns[1] depending on your needs
test[is.na(test)] <- FALSE
storage.mode(test) <- "integer"
test
# X1 X2 X3 X4 X5 X6 X7 X8
# [1,] 0 1 0 0 1 0 1 0
# [2,] 0 0 1 0 0 0 0 0
# [3,] 0 1 0 0 1 0 0 0
# [4,] 0 0 1 0 0 0 0 0
# [5,] 1 0 0 0 0 0 1 0
# [6,] 0 0 1 1 1 1 1 0
# [7,] 0 0 0 1 0 0 1 0
# [8,] 0 0 0 0 0 0 0 1
set.seed(123)
correctAns <- sample(LETTERS[1:3], 8, replace = TRUE)
correctAns
# [1] "A" "C" "B" "C" "C" "A" "B" "C"
qDat <- sample(c(LETTERS[1:3], NA_character_), 8*2*4, replace = TRUE)
qDat <- data.frame(matrix(qDat, 8, 4*2), stringsAsFactors = FALSE)
qDat
# X1 X2 X3 X4 X5 X6 X7 X8
# 1 C A C C A B A <NA>
# 2 B A C <NA> B <NA> <NA> B
# 3 <NA> B C A B A <NA> <NA>
# 4 B <NA> C B B B B <NA>
# 5 C <NA> B <NA> A <NA> C <NA>
# 6 C C A A A A A B
# 7 A C <NA> B A C B <NA>
# 8 <NA> <NA> <NA> A B A B C
set.seed(123)
# correctAns is a vector of length 30
correctAns <- sample(LETTERS[1:3], 30, replace = TRUE)
length(correctAns)
# [1] 30
# qDat is a dataframe of dimensions 106x30
qDat <- sample(c(LETTERS[1:3], NA_character_), 106*30, replace = TRUE)
qDat <- data.frame(matrix(qDat, 106, 30), stringsAsFactors = FALSE)
dim(qDat)
# [1] 106 30
# still works
test <- qDat == correctAns
test[is.na(test)] <- FALSE
storage.mode(test) <- "integer"
str(test)
# int [1:106, 1:30] 0 0 0 0 0 0 0 0 1 0 ...
# - attr(*, "dimnames")=List of 2
# ..$ : NULL
# ..$ : chr [1:30] "X1" "X2" "X3" "X4" ...