问题描述
对于我的一个项目,我需要使用加权效果编码,但我需要一个数据集,该数据集包含由 contr.X
函数创建的每个对比度的列。对于变量很少的小数据集,我可以手动执行此操作,但我的解决方案无法扩展到更大的数据集。
可重现的示例
下面的代码创建了一个简单的数据集,其中 group
作为我想在统计模型中用作预测变量的主要分类变量。在这里,我将分组为一个因子,然后为因子的每个级别分配加权效果对比代码,从而产生对比矩阵。
library(tidyverse)
library(wec)
data <- data.frame(group = c(rep("A",20),rep("B",10),rep("C",5)),value = rnorm(35))
data$group.wec <- as.factor(data$group)
contrasts(data$group.wec) <- contr.wec(data$group.wec,omitted = "C") #using wec package to created weighted effects codes
contrasts(data$group.wec) #contrast matrix
虽然上述方法很有用,但我最终将需要一个数据框,该数据框为 contr.X
函数创建的每个对比都有新的列。以下是低效的手动解决方案:
data_with_contrasts <- data %>% #manually adding new columns with weighted effects contrast codes
mutate(contrastA = case_when(
group == 'A' ~ 1,group == 'B' ~ 0,group == 'C' ~ -4
),contrastB = case_when(
group == 'A' ~ 0,group == 'B' ~ 1,group == 'C' ~ -2))
head(data_with_contrasts,35)
group value group.wec contrastA contrastB
1 A -0.42421138 A 1 0
2 A 1.00742122 A 1 0
3 A 0.17655497 A 1 0
4 A 1.22269727 A 1 0
5 A -0.99758085 A 1 0
6 A -0.48318298 A 1 0
7 A 0.69056372 A 1 0
8 A -0.04565234 A 1 0
9 A -1.58319022 A 1 0
10 A 0.36660913 A 1 0
11 A -0.06205922 A 1 0
12 A -0.30919663 A 1 0
13 A 1.47817140 A 1 0
14 A 0.05578368 A 1 0
15 A -1.30863169 A 1 0
16 A -1.08232020 A 1 0
17 A 0.26195884 A 1 0
18 A -0.18956560 A 1 0
是否有更好的方法将因子变量的对比度代码矩阵扩展为单独的列,如上例所示?理想情况下,该解决方案适用于具有不同级别数量的多个分类变量,并且不需要手动指定对比度代码。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)