如何使用 R.NET 执行变化点分析



如何使用 R.NET 执行变化点分析。我正在使用以下代码

REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
double[] data = new double[] { 1, 2, 3, 4, 5, 6 };
NumericVector vector = engine.CreateNumericVector(data);
engine.SetSymbol("mydatapoints", vector);
engine.Evaluate("library(changepoint)");
engine.Evaluate("chpoints = cpt.mean(mydatapoints, method="BinSeg")");
DynamicVector result = engine.Evaluate("x<-cpts(chpoints)").AsVector(); ;
engine.Dispose();

我在engine.Evaluate("library(changepoint)");上收到以下错误

库中的错误(更改点(:没有调用的包 "变化点">

编辑#1

changepoint包应该显式安装,默认情况下不存在。使用 RGui -> 包 -> 加载包安装它。

现在错误已更改为

chpoints 的状态错误 = cpt.mean(mydatapoints, method="BinSeg"( : 意外输入

编辑#2

修复前两个错误后,第二个 Evaluate 语句中会出现以下错误。

BINSEG(sumstat, pen = pen.value, cost_func = costfunc, minseglen = minseglen, : Q 大于 第 4 段

使用这些命令在 R 上也会出现相同的错误

value.ts <- c(29.89, 29.93, 29.72, 29.98)
chpoints = cpt.mean(value.ts, method="BinSeg")

错误不在于调用代码,而在于对 R 的使用(正如您现在显然意识到的那样(。因此,将其标记为与rdotnet或c-sharp有关似乎具有误导性:

mydatapoints <- c(1, 2, 3, 4, 5, 6 )
library(changepoint);
chpoints = cpt.mean(mydatapoints, method="BinSeg");
#Error in BINSEG(sumstat, pen = pen.value, cost_func = costfunc, minseglen = minseglen,  : 
#  Q is larger than the maximum number of segments 4

我不确定你的意图。变化点分析通常需要配对数据点...X-Y和所有爵士乐。给R回归函数完全线性的数据也是不明智的。它通常会导致不可逆矩阵。

我建议您使用 https://stackoverflow.com/search?q=%5Br%5D+changepoint 进行搜索,以找到一些简单的代码来构建到您的 REngine 调用方案中。

数据点应该在时间序列中转换。

REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
double[] data = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
NumericVector vector = engine.CreateNumericVector(data);
engine.Evaluate("library(changepoint)");
engine.SetSymbol("values", vector);
engine.Evaluate("values.ts = ts(values, frequency = 12, start = c(2017, 1))");
engine.Evaluate("chpoints = cpt.mean(values.ts, method="BinSeg")");
var result = engine.GetSymbol("chpoints");
engine.Dispose();

现在正在寻找如何在 C# 中获取结果,chpointsplot(chpoints)的结果

最新更新