如何从R组中的拟合模型中获取gofstat

时间:2016-05-04 13:33:34

标签: r curve-fitting goodness-of-fit

我有一个由数千个独特测试(TestNum)及其相关响应(响应)组成的大型数据集,不同测试的响应长度不同。测试根据某些标准被删除,因此TestNum值缺少序列。这是一个简化的例子:

dat <- data.frame(Response=c(rlnorm(10, 2.9, 0.3), rlnorm(14, 2.88, 0.38), rlnorm(19, 2.44, 0.08)),TestNum=rep(c(1,4,9), times=c(10,14,19)))
dat$TestNum<-factor(dat$TestNum)
dat

我正在为每个TestNum拟合一个lnorm分布并提取系数

dat_fit1 <- with(dat,
        by(dat[,1], TestNum, fitdist, "lnorm"))
dat_fit2 <-t(sapply(dat_fit1, coef))

我想测试其他发行版,但需要符合优度的统计数据(gofstat;例如&#34; chi&#34; chisqpvalue&#34;,&#34; cvm&#34;,&#34 ; ad&#34;,&#34; ks&#34;,&#34; aic&#34;,&#34; bic&#34;)来自TestNum的每个拟合曲线。我可以得到&#34; aic&#34;和&#34; bic&#34;使用下面的代码,但不包括其他统计信息。

gof_f<-do.call(rbind, dat_fit1) 
gof_f<-gof_f[,7:8]

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

dat.lnorm <- with(dat,
              by(dat[,1], dat[,2], 
        function(x){
        fit<-fitdist(x,"lnorm", method="mme")                                   
        coef_meanlog <-fit[[1]][[1]]
        coef_sdlog   <-fit[[1]][[2]]
        ks <-ks.test(jitter(x),"plnorm", meanlog=coef_meanlog, sdlog=coef_sdlog)$p.value
        ad <-ad.test(plnorm(x, meanlog=coef_meanlog, sdlog=coef_sdlog))$p.value
        return(list(cbind(rbind(fit[7:8]), ks, ad)))
}))