我从2组(a和b)获得测量结果,其中每组具有相同的3个水平(x,y,z)。测量值是总数(即,速率)中的计数,但是在组a中不能有零,而在组b中可以(在下面的示例中硬编码)。
这是我的示例data.frame
:
set.seed(3)
df <- data.frame(count = c(rpois(15,5),rpois(15,5),rpois(15,3),
rpois(15,7.5),rpois(15,2.5),rep(0,15)),
group = as.factor(c(rep("a",45),rep("b",45))),
level = as.factor(rep(c(rep("x",15),rep("y",15),rep("z",15)),2)))
#add total - fixed for all
df$total <- rep(max(df$count)*2,nrow(df))
如果a和b的(平均)测量值之间有任何差异,我有兴趣量化每个level
x,y,z?如果有,是否具有统计学意义?
从understand开始,Poisson GLM的速率似乎适合这些类型的数据。在我的情况下,似乎负二项GLM可能更合适,因为我的数据过度分散(我试图在我的示例数据中创建一定程度但在我的实际数据中肯定是这样)。
在我前一篇文章的answer之后,我选择了:
library(dplyr)
library(MASS)
df %>%
mutate(interactions = paste0(group,":",level),
interactions = ifelse(group=="a","a",interactions)) -> df2
df2$interactions = as.factor(df2$interactions)
fit <- glm.nb(count ~ interactions + offset(log(total)), data = df2)
> summary(fit)
Call:
glm.nb(formula = count ~ interactions + offset(log(total)), data = df2,
init.theta = 41.48656798, link = log)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.40686 -0.75495 -0.00009 0.46892 2.28720
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.02047 0.07824 -25.822 < 2e-16 ***
interactionsb:x 0.59336 0.13034 4.552 5.3e-06 ***
interactionsb:y -0.28211 0.17306 -1.630 0.103
interactionsb:z -20.68331 2433.94201 -0.008 0.993
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Negative Binomial(41.4866) family taken to be 1)
Null deviance: 218.340 on 89 degrees of freedom
Residual deviance: 74.379 on 86 degrees of freedom
AIC: 330.23
Number of Fisher Scoring iterations: 1
Theta: 41.5
Std. Err.: 64.6
2 x log-likelihood: -320.233
我希望水平z的a和b之间的差异很大。但是,级别z的Std. Error
似乎很大,因此p值接近1。
我的问题是我正在使用的模型是否设置正确以回答我的问题(主要是通过使用interactions
因子?)