我有一个由数千个独特测试(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]
任何建议都将不胜感激!
答案 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)))
}))