【问题标题】:Having trouble running friedman test on ordinal data in R在 R 中对序数数据运行 Friedman 测试时遇到问题
【发布时间】:2021-06-07 11:27:57
【问题描述】:

我正在尝试对 R 中的序数数据运行 Friedman 测试,但遇到了错误。数据可以在 Dropbox https://www.dropbox.com/s/gh8crh18y1ueriy/seltoutput.xlsx?dl=0 上找到。

作为数据的描述:

group1:小组作业,2 个级别
time1:时间点,2级
loameasure:序数数据,5 个级别
distmeasure:连续数据
vectemp:参与者 ID

导入数据后,我运行以下命令以正确格式化:

  selt$loameasure<-factor(selt$loameasure)  
  selt$distmeasure<-as.numeric(selt$distmeasure)  
  selt$time1<-factor(selt$time1)  

然后我运行:

 friedman_test(formula = loameasure ~ time1 | vectemp, data = selt)

然后我得到错误:
Friedman.test.default(c(3L, 2L, 3L, 2L, 2L, 5L, 2L, 1L, 3L, 4L, : 不是一个不可复制的完整块设计

我认为 loameasure 和 time1 必须是因素,但我确实尝试将它们作为数字,但我得到了类似的错误:
Friedman.test.default(c(3, 2, 3, 2, 2, 5, 2, 1, 3, 4, 2, 2, 4, : 不是一个不可复制的完整块设计

我已经玩了好几天了,但无法弄清楚我的问题是什么。我很想得到一些帮助!提前谢谢!

【问题讨论】:

  • 你到底想测试什么。什么是 group1(2 个级别),什么是 time1(2 个级别)。请您用您的话详细定义应该比较哪个块。例如,如果您的数据是正态分布的,并且您想要执行 ANOVA 以比较 loameasure 在分类变量上的均值...您会选择哪一个,因为它应该至少具有三个级别...感谢您的澄清.
  • @TarJae 感谢您的回复! Group1 只是我拥有的两个组。一个是对照组,一个是来自研究的实验组。 Time1 是测量数据的两个时间点。我想知道 loameasure 是否从第一个时间点更改为第二个时间点。我的变量都没有三个度量,这是否意味着我运行了错误的测试?再次感谢您的回复!
  • vectemp:参与者 ID 都是唯一的吗?这意味着第一组中的所有人都是独一无二的,第二组中的所有人都是独一无二的。或者让group1中的一些人再次参加group2 2。 time1 中的哪个测量属于 time2,或者都是独立的时间点。 time1 和 time2 之间是否有固定时间
  • 是的,所有参与者 ID 都是唯一的。没有 time2 变量,但在 time1 变量中有两个独立的时间点。两个时间点之间有固定的时间间隔

标签: r error-handling statistics


【解决方案1】:

据我所知,弗里德曼测试不适合您的情况。我建议使用 Type-III 平方和法对不平衡设计执行 双向 ANOVA 检验。 给出了残差正态性和同质性的假设。 我试图指导您如何执行测试以及一些步骤的含义。它不完整(缺乏解释等。)但这应该是你的开始和方向。

  1. 我们想知道 loameasure 是否依赖于 group1 和 time1
  2. 我们将执行具有两个因素的双向方差分析
  3. 因变量:loameasure
  4. 自变量:group1time1
library(readxl)
# load your data
df <- read_excel("C:/Users/coding/Downloads/seltoutput.xlsx", 
                 col_types = c("numeric", "numeric", "numeric")) 

# Prepare data
# group1 to factor 
df$group1 <- factor(df$group1,
                    levels = c(0, 1),
                    labels = c("Group_0", "Group_1"))
# time1 to factor
df$time1 <- factor(df$time1,
                      levels = c(1, 2),
                      labels = c("Time_1", "Time_2"))
----------------------------------------------------------------------------
# Visualize
library("ggpubr")
ggboxplot(df, x = "time1", y = "loameasure", color = "group1",
          palette = c("#00AFBB", "#E7B800"))

ggline(df, x = "time1", y = "loameasure", color = "group1",
       add = c("mean_se", "dotplot"),
       palette = c("#00AFBB", "#E7B800"))
-----------------------------------------------------------------------------
# first decide if balanced or unbalnced design
table(df$group1, df$time1)
# Output

# Time_1 Time_2
# Group_0     20     20
# Group_1     29     29

# Here it is a unbalance design 
# An unbalanced design has unequal numbers of subjects in each group!

## We will perform two-way ANOVA test in R for unbalanced designs !!!!!!!!!!!
# The recommended method are the Type-III sums of squares.
# you need `car` package
library(car)
# Our 2 way anova of unbalanced design (SS Type-III)

df_anova <- aov(loameasure ~ group1 * time1, data = df)
Anova(df_anova, type = "III")

## Output
# Anova Table (Type III tests)
# Response: loameasure
# Sum Sq Df F value    Pr(>F)    
# (Intercept)  120.050  1 83.9312 1.116e-14 ***
#   group1         0.700  1  0.4891   0.48607    
# time1         62.500  1 43.6960 2.301e-09 ***
#   group1:time1   5.716  1  3.9963   0.04849 *  
#   Residuals    134.452 94                      
# ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


# Nomrality check ---------------------------------------------------------


# call residuals (difference between each indivdual and their group1/time1 combination mean)
res <- df_anova$residuals

# Histogram of residuals: Residuals should be normally distributed
hist(res,main="Histogram of residuals", xlab = "Residuals")
# # Extract the residuals

# Run Shapiro-Wilk test
shapiro.test(x = res )
# Output
# data:  res
# W = 0.97708, p-value = 0.08434
# P is > 0.05 therefore normality can be assumed.


# Homogenity test ---------------------------------------------------------

# Levene's test for equality of variances (in `car` package)
library(car)
leveneTest(loameasure~ time1 * group1,data=df)

# Output:
# Levene's Test for Homogeneity of Variance (center = median)
#       Df F value Pr(>F)
# group  3  0.3196 0.8112
#       94  
# P is > 0.05 therefore equal variances can be assumed.

【讨论】:

  • 非常感谢您的回复!!!!这对我来说真的很有意义。我唯一的问题是,这是序数数据——我可以对其使用参数测试吗?
  • 这取决于序数变量有多少点。 AFAIK 将方差分析用于李克特量表项目至少是有争议的。您可以在这里获得帮助:stats.stackexchange.com> 如果我对您的第一个问题的回答是 helpflul,请考虑支持并接受答案。见这里:meta.stackexchange.com/questions/173399/….>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2022-12-10
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多