3

假设,我有一个数据框:

xyz <- c(1,2,3,4,5,6)
zyx <- c("A", "B", "C", "A", "B", "C")
zyx <- factor(zyx)
myframe <- data.frame(xyz, zyx)

现在我想计算 zyx 变量的对比度。我用:

contrasts(myframe$zyx) <- contr.treatment(3, base=3)

如果我现在查看变量 myframe$zyx,我会得到:

[1] A B C A B C
attr(,"contrasts")
  1 2
A 1 0
B 0 1
C 0 0
Levels: A B C

但我想让对比度不命名为“1”或“2”,而是命名为“contr_A_vs_C”和“contr_B_vs_C”。

你有什么想法?

编辑:

好吧,这似乎不是一个简单的问题。让我更直截了当:

对比函数中是否有“名称”命令,可以解决?

例如,如果您进行线性回归,您可以通过直接命令来处理模型估计,例如,如果您想要将值 für 平方,您可以键入:

rsquared <- regressionmodel$r.squared

也许,对比中有类似的东西,比如

dataframe$contrast.names <- ...

?

4

2 回答 2

5

matrix您所指的 存储为您attribute指定的列。可以直接访问如下:

attr(myframe$zyx, "contrasts")
#   1 2
# A 1 0
# B 0 1
# C 0 0

因此,您可以colnames照常使用(但我不知道这是否会破坏以后可能使用 or 的默认输出值的contrasts任何内容contr.treatment)。

colnames(attr(myframe$zyx, "contrasts")) <- 
  c("contr_A_vs_C", "contr_B_vs_C")

myframe$zyx
# [1] A B C A B C
# attr(,"contrasts")
#   contr_A_vs_C contr_B_vs_C
# A            1            0
# B            0            1
# C            0            0
# Levels: A B C
于 2013-11-10T14:12:06.987 回答
0

n参数contr.treatment(n=3, base=3)交替采用名称列表。我很满意

contrasts(myframe$zyx) <- contr.treatment(n=levels(myframe$zyx), base=3)
contrasts(myframe$zyx)
#   A B
# A 1 0
# B 0 1
# C 0 0

或者,如果您愿意

contrasts(myframe$zyx) <- contr.treatment(n=c("contr_A_vs_C", "contr_B_vs_C", "none"), base=3)
contrasts(myframe$zyx)
#   contr_A_vs_C contr_B_vs_C
# A            1            0
# B            0            1
# C            0            0
于 2022-01-17T15:51:10.110 回答