下面模拟的数据的最大值为 4,并且有趣地偏斜。最大值 4 是使用的仪器施加的限制,并且数据是半离散的,即有相当多的数字可能介于 -4 和 4 之间。由于数据的形状,我想到了对其进行转换,使其近似于伽马分布:
编辑以更新评论:
在这种情况下,它被限制在这个范围内,因为它是一种信号检测措施(d prime http://en.wikipedia.org/wiki/D%27)和我们对这个特定措施的准确性将我们限制为 +-4。它是这样倾斜的,因为一个群体不会经常得到误报,并且通常会得到更多的命中,而其他群体经常会得到误报和更少的命中。
set.seed(69)
g1<-rnorm(700,0,1); g2<-rnorm(100,-0.5,1.5); g3<-rnorm(100,-1,2.5)
gt<-data.frame(score=c(g1, g2, g3), fac1=factor(rep(c("a", "b", "c"), c(700, 100, 100))), fac2=ordered(rep(c(0,1,2), c(3,13,4))))
gt$score<-with(gt, ifelse(fac2 == 0, score, score-rnorm(1, 0.5, 2)))
gt$score<-with(gt, ifelse(fac2 == 2, score-rnorm(1, 0.5, 2), score))
gt$score<-round(with(gt, ifelse(score>0, score*-1, score)), 1)+4
gt$score<-with(gt, ifelse(score < -4, -4, score))
gt$cov1<-with(gt, score + rnorm(900, sd=40))/40
hist(gt$score)
gt$score2<-with(gt, 4-score+0.0000001) #Gamma distribution can't have 0s (and is positive skewed???)
hist(gt$score2)
glm1<-glm(score2~cov1+fac1*fac2, family="Gamma", data=gt)
这对我来说是一个全新的领域。
1. 这是合理的做法吗?
2. 还有其他我可以尝试比较的分布吗(也许是指数分布)?
更新:
在下面的一些评论之后,我使用 R 中的betareg包调查了 beta 回归。它给了我倾斜的残差:
gt$scorer<-with(gt, (score--4)/(4--4))
gt$scorer<-with(gt, (scorer*(length(scorer)-1)+0.5)/length(scorer))
b1 <- betareg(scorer ~ cov1 + fac1 * fac2, data=gt)
plot(density(resid(b1))) #Strange residuals, even straight lm looks better
所以我看了一下准二项式回归,它给了我更小更好看的残差:
glm2 <- glm(scorer~cov1 + fac1 * fac2, data=gt, family="quasibinomial")
plot(density(resid(g1))) #Better residuals
在这种情况下,残差是否足够好?
或者 d' 虽然基于 T/F,但不是二进制变量,这是一个严重的问题吗?
编辑 3:d' 澄清 以下是我的 d' 分数的示例,具有粗略的分布质量以及命中和误报的类似原始分数。
hitrate<-sample(0:16, 100, replace=T, prob=c(rep(0.02,11), 0.025, 0.05, 0.1, 0.2, 0.3, 0.2))/16
hitrate<-ifelse(hitrate==1, 31/32,hitrate); hitrate<-ifelse(hitrate==0, 1/32,hitrate)
farate<-sample(0:32,100, replace=T, prob=c(0.7,0.1,0.05,0.05,0.05,0.02,rep(0.001, 27)))/32
farate<-ifelse(farate==0, 1/64,farate); farate<-ifelse(farate==1, 63/64,farate)
dprime<-round(qnorm(hitrate) - qnorm(farate),1)
plot(density(dprime))