![f259810f7c3a2589323e6fdcb9c8a9fc.png](https://i-blog.csdnimg.cn/blog_migrate/6669b43f4c329727c1e596e6c2ba5baf.jpeg)
收到一位知友的求助:
我对一组模型进行了计算,获取了每个模型的残差,残差(misfit)的频次直方图如图一所示,现在有要求perform a goodness of fit test (using residuals and a chi2 distribution) and select models that pass the test at a certain confidence level (e.g., 95%). 这个我不是很明白怎么进行操作分析,能请您解答一下吗?
收到数据:
发现数据包含:60个模型,每一个模型有33个实验残差,如果通过残差分布来选择模型,需要我们完成第一步检验:模型与残差的相关性的检验,是我们能否根据残差来选择模型的依据;
![f6ff694d9cfda20caf0edd832f33b0e0.png](https://i-blog.csdnimg.cn/blog_migrate/a3ab4f4f93b4ad5dc4dd1ea9a4f731b3.png)
这里我们选择用卡方检验,置信水平为95%;
假设检验:
原假设-模型与残差的频次分布没有关系
备择假设-模型与残差的频次分布有关系
1,统计描述(mode-模型,misfit-残差)
![80e6bd9fdfb2dcae9472fd8ebe13567d.png](https://i-blog.csdnimg.cn/blog_migrate/667eb3370c058eca6f9b033b7ed93b0e.jpeg)
summary(misfit)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.3322 0.3888 0.4818 0.5033 0.5954 0.8329
对misfit进行分组:优,良,差
misfit>=0.3 and misfit<0.5 as 优 ,
misfit>=0.5 and misfit<0.7 as 良,
misfit>=0.7 and misfit<0.9 as 差
2,得到模型分组数据
library(sqldf)
载入需要的程辑包:gsubfn
载入需要的程辑包:proto
载入需要的程辑包:RSQLite
Warning message:
程辑包‘RSQLite’是用R版本3.5.2 来建造的
a<-sqldf("select X1 as mode, X2 as misfit from data")
a<-sqldf("select X1 as mode, count(1) as 实验次数,
sum(case when X2>=0.3 and X2<0.5 then 1 else 0 end) as 优 ,
sum(case when X2>=0.5 and X2<0.7 then 1 else 0 end) as 良,
sum(case when X2>=0.7 and X2<0.9 then 1 else 0 end) as 差
from data group by X1")
![4911d6071fc16fddc4df8fe5f2feb1d4.png](https://i-blog.csdnimg.cn/blog_migrate/d9730b29e20d3e36a479f7145b74a62e.jpeg)
3,运用卡方拟合优度检验:模型的优劣与残差的相关行
chisq.test(a) ## 去除多余的列:实验次数
Pearson's Chi-squared test
data: a
X-squared = 211.04, df = 177, p-value = 0.04097
自由度为:177,p值:0.04097, 可以的到模型的优劣与残差具有相关性
由此,我们可以通过残差的分布来选择模型
得知:模型30-41都是比较优的模型。
如果要继续优中选优,可以对比模型残差变量的集中程度与离散度。