在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近写了一个质谱的数据处理软件,其中一部分功能要实现实时线性拟合,并且求得拟合方程 R2 、SD 、 pearson 系数以及进行统计学F检验求得p-value。 C#的自身库 以及开源库 Math.net 可以计算拟合方程 R2 、SD 、 pearson 系数,但是并不能进行FTest检验。因此这里引用了R语言的类库 R.net,通过C#调用R语言实现这一功能。 遗憾的是R.net语言的支持文档并不是很全面,没有详细的结果解析。因此通过摸索得出来计算方法。
引用 https://www.nuget.org/packages/R.NET.Community
选择最新版 vs2015可以用nuget 直接输入命令安装Rdotnet Install-Package R.NET.Community
using MathNet.Numerics; using MathNet.Numerics.Statistics; using RDotNet;
Tuple<double, double> N30fitresult = new Tuple<double, double>(0, 0);//一个元组类型 // double[] xS2 = cdfc[s].time; double[] x = 点的X的数组; double[] yS2 = Y的数组;//xy 个数要一致 double[] ytestS2 = new double[yS2.Length]; N30fitresult = Fit.Line(x, yS2);
for (int i = 0; i < yS2.Length; i++) { ytestS2[i] = Convert.ToDouble(N30fitresult.Item2) * x[i] + Convert.ToDouble(N30fitresult.Item1); } //item2 item1 分别是拟合的斜率截距 //这里的ytestS2是后面用来进行误差分析用的,代表了线性拟合的线上点
double r2 = GoodnessOfFit.RSquared(yS2, ytestS2); double pearson = Correlation.Pearson(yS2, ytestS2);
REngine engine;//r语言对象 REngine.SetEnvironmentVariables(); // There are several options to initialize the engine, but by default the following suffice: engine = REngine.GetInstance();
NumericVector Ry = engine.CreateNumericVector(你的Y数组);//参数为数组 engine.SetSymbol("y", Ry); NumericVector Rx = engine.CreateNumericVector(你的x数组);//参数为数组 engine.SetSymbol("x", Rx); GenericVector ftestResult = engine.Evaluate("summary(lm(y ~1 + x))").AsList();
|
请发表评论