如何更改对比度以与所有级别的平均值而不是参考级别(R,lmer)进行比较?

How to change contrasts to compare with mean of all levels rather than reference level (R, lmer)?

我有一个数据集,其中每一行都是销售人员对商店的一次访问,字段包括 "outlet"(商店 ID)、"devices"(销售人员销售了多少电子设备)和 "weekday"(销售人员在商店的星期几)。

我想弄清楚一个工作日是否比其他工作日的销售更好,所以不要比较一周中的所有日子,例如星期一我想将它们与一周中所有日子的平均值进行比较。为此,我正在使用 lmerTest 函数(lme4::lmer 和估计的 p 值)。

我试过以下代码:

data$weekday <- factor(weekday_sales$weekday, levels=c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))

contrasts(data$weekday) = contr.sum(7) 

summary(lmerTest::lmer(data=data, devices~weekday + (1|outlet)))

给出:

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)   4.3681     0.6024  12.4472   7.251 8.24e-06 ***
weekday1     -1.0585     0.5129 145.7337  -2.064  0.04080 *  
weekday2     -0.2830     0.4958 142.3214  -0.571  0.56913    
weekday3      1.1884     0.4907 140.5545   2.422  0.01671 *  
weekday4      0.1100     0.5025 145.1407   0.219  0.82707    
weekday5      1.3589     0.5135 143.8204   2.646  0.00904 ** 
weekday6     -0.1629     0.5020 143.1605  -0.325  0.74600   

然而,数据集中有所有七个工作日(缺少一个),并且数据集中工作日的级别存储为 "Monday"、"Tuesday"、"Wednesday" 等。不像 "weekday1"、"weekday2" 等

为什么少了一个工作日,我怎么知道这是哪一天?这是将每个工作日与平均值进行比较还是在做其他事情? (如果是这样,我该如何更改对比度以将所有级别与所有级别的平均值进行比较?)

您需要明确禁止拦截:

devices~ -1 + weekday  + (1|outlet))

devices ~ 0 + weekday  + (1|outlet))

不是特别清楚,但是当你使用和到零的对比时,第一个参数是(level 1 - mean),第二个是(level 2 - mean),等等,所以缺少比较是最后一级:"Sunday vs. mean".

set.seed(101)
w <- c("Monday", "Tuesday", "Wednesday", "Thursday", 
       "Friday", "Saturday", "Sunday")
dd <- data.frame(w=factor(rep(w,10),levels=w),y=rnorm(70))
m0 <- lm(y~w,dd, contrasts=list(w=contr.sum))
m1 <- lm(y~w-1,dd, contrasts=list(w=contr.sum))

问题在于,使用总和对比时,您无法将所有组与总体平均值进行比较,因为它们不是独立的。如果您知道总均值 G,然后知道第 1 -6 天的均值,则可以根据您已有的值计算第 7 天的均值。所以基本上,您不能使用对比来做到这一点——您需要某种 post-hoc 测试。

使用标准治疗对比,您仍然只进行六次比较(1-2、1-3、1-4、1-5、1-6、1-7),通常的问题是:嘿, 1去哪儿了。答案是拦截。在这里,你有G-1、G-2、G-3、G-4、G-5、G-6,然后失去G-7。