首页 > 解决方案 > 与 R 中的 2 个或更多自由度对比

问题描述

在 SAS 中,可以直接指定具有两个或多个自由度 (df) 的对比;例如,使用以下代码:

CONTRAST “CONT2DF”  TREAT -1 -1 2,
TREAT 1 -1 0;

在 R 中,可以利用emmeans::test(contrast, joint=T) 两个或多个 df 来获得对比度。同样与rms::contrast(f, type='joint'),相同的结果。但是,在不依赖任何其他统计库的情况下,如何获得以下内容?


library(tidyr)

set.seed(123)
data <- data.frame(a=rnorm(20, 8,1), b=rnorm(20, 14,2), c=rnorm(20, 4,0.5),d=rnorm(20, 19,2))
data <- gather(data, key=Treat, value=y)
data$Treat<-as.factor(data$Treat)
c1<-c(1,-1,-1,-1)/3
c2<-c(0, 1,1,-2)/2
c3<-c(0,0,1,-1)

contrast2df<-??? (c1,c2)  # Here the doubt 

finalcontrasts <- cbind(contrast2df, c3)
contrasts(data$Treat) <- finalcontrasts

CList = list("contrast2df" = 1,
             "c3" = 2)


model <- aov(y~Treat, data=data)
summary(model, split=list(Trat=CList))

# Equivalent to :

library(emmeans)
model1 <- lm(y~Treat, data=data)
finalcontrastsem <- list(c1, c2, c3)
medias <- emmeans(model, ~Treat)

step1 <- contrast(medias, finalcontrastsem[1:2])
test(step1, joint=T)

step2 <- contrast(medias, finalcontrastsem[3])
test(step2, joint=T)

标签: r

解决方案


推荐阅读