弗里德曼在R中的测试给出了SPSS的不同结果

时间:2017-03-23 14:59:19

标签: r spss

我最近从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)

有没有人对此有解释,或者想出哪些结果是正确的?

2 个答案:

答案 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