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

时间:2017-08-08 06:19:31

标签: c# r 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安装它 - &gt;包裹 - &gt;加载包。

现在错误已更改为

  

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

编辑#2

修复前两个错误后,第二个评估语句中会显示以下错误。

  

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")

2 个答案:

答案 0 :(得分:0)

错误不在您的调用代码中,而是在您使用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调用方案中。

答案 1 :(得分:0)

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

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)的结果

取回结果