我最近从SPSS切换到R进行一些数据分析。作为其中的一部分,我在R中运行了一些以前在SPSS中进行的已经完成的分析,只是为了得到一个有意义的漂亮整洁的脚本。
在这种情况下,我的数据是在一个孤立和受限制的环境中对9名参与者的敌意感受的自我评级。我测试了五次(夏季,秋季,冬季,春季,夏季)。数据是非正态分布的。
我在SPSS中运行了Friedman测试,这个测试在p=.012, χ2(4df)=12.79
年前给了我。我今天在R中重新进行了测试,它给了我这个:p=.951 (χ2(4df)=.69)
。这真让我大吃一惊,因为它让我有理由怀疑到目前为止所有的分析。
一旦我发现这一点,我将SPSS文件重新导出到.csv
,用我的R脚本打开它并重新运行Friedman测试。检查我是否不小心使用了不同的数据文件。绝对不是这样。
我使用了Andy Field描述的Friedman测试:
Summer1 <- c(2,0,0,0,0,0,0,0,0)
Autumn <- c(3,0,1,0,0,4,2,0,1)
Winter <- c(1,0,0,0,0,2,5,1,1)
Spring <- c(1,0,2,2,2,8,4,0,1)
Summer2 <- c(3,0,2,1,0,4,7,1,1)
Hostility <- matrix(c(Summer1, Autumn, Winter, Spring, Summer2), nrow=9, byrow=TRUE)
friedman.test(Hostility)
有没有人对此有解释,或者想出哪些结果是正确的?
答案 0 :(得分:4)
总是一个好主意,检查你的矩阵实际上是否符合你的想法:
> Hostility
[,1] [,2] [,3] [,4] [,5]
[1,] 2 0 0 0 0
[2,] 0 0 0 0 3
[3,] 0 1 0 0 4
[4,] 2 0 1 1 0
[5,] 0 0 0 2 5
[6,] 1 1 1 0 2
[7,] 2 2 8 4 0
[8,] 1 3 0 2 1
[9,] 0 4 7 1 1
问题在于byrow=TRUE
。如果构造正确,弗里德曼测试与SPSS一致:
> Hostility <- matrix(c(Summer1, Autumn, Winter, Spring, Summer2), nrow=length(Summer1))
> friedman.test(Hostility)
Friedman rank sum test
data: Hostility
Friedman chi-squared = 12.794, df = 4, p-value = 0.01233
答案 1 :(得分:3)
这是你的R代码中的一个错误。您可以按行而不是按行将数据读入矩阵。在matrix()
函数调用中,只需将byrow
参数更改为FALSE
即可。考虑一下:
...
Hostility <- matrix(c(Summer1, Autumn, Winter, Spring, Summer2), nrow=9, byrow=TRUE)
Hostility
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 0 0 0 0
# [2,] 0 0 0 0 3
# [3,] 0 1 0 0 4
# [4,] 2 0 1 1 0
# [5,] 0 0 0 2 5
# [6,] 1 1 1 0 2
# [7,] 2 2 8 4 0
# [8,] 1 3 0 2 1
# [9,] 0 4 7 1 1
Hostility2 <- matrix(c(Summer1, Autumn, Winter, Spring, Summer2), nrow=9, byrow=FALSE)
Hostility2
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 3 1 1 3
# [2,] 0 0 0 0 0
# [3,] 0 1 0 2 2
# [4,] 0 0 0 2 1
# [5,] 0 0 0 2 0
# [6,] 0 4 2 8 4
# [7,] 0 2 5 4 7
# [8,] 0 0 1 0 1
# [9,] 0 1 1 1 1
friedman.test(Hostility2)
# Friedman rank sum test
#
# data: Hostility2
# Friedman chi-squared = 12.794, df = 4, p-value = 0.01233