使用nparcomp与用户定义的对比

时间:2014-08-31 19:46:00

标签: r

我想在以下数据上测试假设H0: a2 - a1 = b2 - b1

data.csv

a1,a2,b1,b2
0.439,0.066,0.0,0.001
0.451,0.07,0.0,0.0
0.446,0.06,0.0,0.0
0.34,0.056,0.0,0.0
0.294,0.008,0.0,0.0
0.284,0.002,0.001,0.0
1.0,1.0,0.002,0.0

首先,我尝试了ANOVA:

library(car)
data = read.csv('data.csv')
labels = factor(rep(c('a1','a2','b1','b2'), 
                c(nrow(data['a1']), nrow(data['a2']), nrow(data['b1']), nrow(data['b2'])))) 
x = C(labels, c(-1, 1, 1, -1), 1) 
y = c(data[['a1']], data[['a2']], data[['b1']], data[['b2']]) 
l = lm(y ~ x) 
a = Anova(l)
print(a$`Pr(>F)`)

给出了p = 0.1891837

但是,由于我不能假设数据来自正态分布,我想使用非参数测试。我尝试使用nparcomp和用户定义的对比矩阵:

library(nparcomp)
data = read.csv('data.csv')
x = factor(rep(c('a1','a2','b1','b2'), 
                c(nrow(data['a1']), nrow(data['a2']), nrow(data['b1']), nrow(data['b2'])))) 
y = c(data[['a1']], data[['a2']], data[['b1']], data[['b2']]) 
nparcomp(y ~ x, data=data.frame(x, y), type="UserDefined", contrast.matrix=t(matrix(c(-1, 1, 1, -1))))

此操作因错误而失败:

Error in nparcomp(y ~ x, data = data.frame(x, y), type =
   "UserDefined",  :   Sums of positive contrast coefficients must be 1!

我通过将对比度矩阵重新调整为t(matrix(c(-0.5, 0.5, 0.5, -0.5)))来修复。但是,这失败了另一个错误:

Error in logit.dev %*% cov.bf : non-conformable arguments

将nparcomp与用户定义的对比一起使用的正确方法是什么?

P.S。我是R的新手,所以为糟糕的编码风格道歉。

1 个答案:

答案 0 :(得分:1)

让我先说一下,我根本不熟悉这个特定的统计区域,所以尽管我的代码运行没有错误,但我的修改可能完全改变了你试图测试的设计 - 如果是这种情况,请告诉我。无论如何,我查看了nparcomp的定义,看看导致第一个错误的是什么,Sums of positive contrast coefficients must be 1! -

if (type == "UserDefined") {
        if (is.null(contrast.matrix)) {
            stop("Please eanter a contrast matrix!")
        }
        Con <- contrast.matrix
        rownames(Con) <- paste("C", 1:nrow(Con))
        for (rc in 1:nrow(Con)) {
            if (sum(Con[rc, ][Con[rc, ] > 0]) != 1) {
                stop("Sums of positive contrast coefficients must be 1!")
            }
        }
        colnames(Con) <- fl
}

如果原contrast.matrix t(matrix(c(-1, 1, 1, -1))),则评估为2;而你的t(matrix(c(-0.5, 0.5, 0.5, -0.5)))的第二次尝试在上面的代码块中清楚地评估为1(因为它没有产生这个错误)。

您的第二个错误Error in logit.dev %*% cov.bf : non-conformable arguments似乎是因为尝试将不兼容维度的矩阵相乘而产生的。我没有跟踪这个特定错误的根源(这个函数的主体非常冗长),但它让我尝试将t(matrix(c(-0.5, 0.5, 0.5, -0.5)))作为对称矩阵传递:

contrVec <- t(matrix(c(-1, 1, 1, -1)))
contrMat <- -1*(matrix(
  outer(contrVec,
        t(contrVec)),
  ncol=4)/2)
##
> contrMat
     [,1] [,2] [,3] [,4]
[1,] -0.5  0.5  0.5 -0.5
[2,]  0.5 -0.5 -0.5  0.5
[3,]  0.5 -0.5 -0.5  0.5
[4,] -0.5  0.5  0.5 -0.5

将此传递给contrast.matrix不会产生任何错误,但正如我所说,我不熟悉这个特定的程序/功能,所以我可能完全改变了你想要测试的假设。这是完整的代码:

library(car)
library(nparcomp)
##
data <- data.frame(
  a1=c(.439,.451,.446,
       .340,.294,.284,1.00),
  a2=c(.066,.07,.06,.056,
       .008,.002,1.00),
  b1=c(rep(0.0,5),
       .001,.002),
  b2=c(.001,
       rep(0.0,6)))
##
x <- factor(
  rep(names(data),
      each=nrow(data)))
##
y <- c(data[['a1']], data[['a2']], 
       data[['b1']], data[['b2']])
##
contrVec <- t(matrix(c(-1, 1, 1, -1)))
contrMat <- -1*(matrix(
  outer(contrVec,
        t(contrVec)),
  ncol=4)/2)
##
nprce <- nparcomp(
  y ~ x, 
  data=data.frame(x, y), 
  type="UserDefined", 
  contrast.matrix=contrMat)
##
> summary(nprce)

 #------------Nonparametric Multiple Comparisons for relative contrast effects----------# 

 - Alternative Hypothesis:  True relative contrast effect p is less or equal than 1/2 
 - Estimation Method: Global Pseudo ranks 
 - Type of Contrast : UserDefined 
 - Confidence Level: 95 % 
 - Method = Logit - Transformation 

 - Estimation Method: Pairwise rankings 

 #---------------------------Interpretation--------------------------------------------# 
 p(a,b) > 1/2 : b tends to be larger than a 
 #-------------------------------------------------------------------------------------# 

 #----Data Info-------------------------------------------------------------------------# 
  Sample Size
1     a1    7
2     a2    7
3     b1    7
4     b2    7

 #----Contrast--------------------------------------------------------------------------# 
      a1   a2   b1   b2
C 1 -0.5  0.5  0.5 -0.5
C 2  0.5 -0.5 -0.5  0.5
C 3  0.5 -0.5 -0.5  0.5
C 4 -0.5  0.5  0.5 -0.5

 #----Analysis--------------------------------------------------------------------------# 
  Comparison Estimator Lower Upper Statistic   p.Value
1        C 1     0.429 0.345 0.517 -1.593593 0.1110273
2        C 2     0.571 0.483 0.655  1.593593 0.1110273
3        C 3     0.571 0.483 0.655  1.593593 0.1110273
4        C 4     0.429 0.345 0.517 -1.593593 0.1110273

 #----Overall---------------------------------------------------------------------------# 
  Quantile   p.Value
1 1.959966 0.1110273

 #--------------------------------------------------------------------------------------#