我正在使用mixdist包将长度 - 频率数据建模到与发布的方法here非常相似的单独群组中(特别是函数mix())。
目前,我一直在查看原始数据的大小频率直方图,确定要测试的合理数量的组件(通常为2或3),然后选择具有最低卡方的模型(只要情节/手段是明智的)。我使用相同的方法来选择要使用的分发。
但是,我想进一步了解我的模型选择。
首先,我想比较不同的分布(即正常,对数正态和伽玛)(保持相同的组分) - 理想情况下使用AIC
其次,我想使用AIC评估模型与基础数据之间的距离
最后,我想估计一个模型最能代表基础数据的概率,相对于其他被评估的模型。
然而,我不知道如何使用混合数据做到这一点!我们非常感谢任何建议(以及评估混合模型表现如何的一些替代方法)。
这是一个示例代码....
library(mixdist)
#Build data vector "x"
x1 <- rnorm(1000, mean=7, sd=2.0)
x2 <- rnorm(500, mean=17, sd=1.5)
x3 <- rnorm(300, mean=13, sd=1.5)
x <- c(x1, x2, x3)
#Plot a histogram
breaks <- 60
his <- hist(x, breaks=breaks)
df <- data.frame(mid=his$mids, cou=his$counts)
head(df)
#not sure whether there are 2 or 3 cohorts/components here so would need to
try both
#2 cohorts
guemea <- c(8, 16)
guesig <- c(1, 1)
guedis1 <- "norm"
guedis2 <- "lnorm"
guedis3 <- "gamma"
(fit21 <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis1))
(fit22 <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis2))
(fit23 <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis3))
#3 cohorts
guemea <- c(8, 14, 17)
guesig <- c(1, 1, 1)
guedis1 <- "norm"
guedis2 <- "lnorm"
guedis3 <- "gamma"
(fit31 <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis1))
(fit32 <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis2))
(fit33 <- mix(as.mixdata(df), mixparam(mu=guemea, sigma=guesig), dist=guedis3))
summary(fit21)
summary(fit22)
summary(fit23)
summary(fit31)
summary(fit32)
summary(fit33)