cor函数中的尺寸误差不兼容

时间:2015-09-16 09:36:29

标签: r correlation dimensions

我正在尝试编写一个函数来计算我的因变量和自变量之间的相关性,这样我就可以在将数据放入回归模型之前找到数据的完美滞后。我想计算每个季度(我的意思是我正在检查的每一季度)我的训练数据的最佳滞后,然后平均每个滞后的结果相关性。滞后为1意味着我的t中的因变量最好由我在t-1中的变量描述。人们可以将此视为基本上进行交叉验证。我的代码如下:

Korrelations.Maximierer = function(Aktie, Kategorie){

  Ergebnis = matrix(nrow = 114,ncol =  18)

  for(tmp in 1:18){
    Start.Test=1*tmp
    Ende.Test=13*tmp
    Untersuchungszeitraum = Aktie[Start.Test:Ende.Test]

    for(i in 0:113){
      int.low=96-i+18*tmp
      int.high=108-i+18*tmp

      Ergebnis[i+1,tmp]=mean(abs(cor(Untersuchungszeitraum,Kategorie[int.low:int.high,-1],
      method = "spearman")))
    }
  }  
  return(Ergebnis)
}

我的数据以数周来衡量,这就是每个季度包含13个数据点的原因。此外,我正在检查4,5年的数据,因此18个季度。我在因变量的第一个数据点之前的113周内获得了我的自变量数据。当我运行这个时,我收到以下错误消息:

Error in cor(Untersuchungszeitraum, Kategorie[int.low:int.high, -1],
method = "spearman") : 
incompatible dimensions In addition: There were 50 or more warnings
(use   warnings() to see the first 50) 

输入'警告()'告诉我,标准偏差为零,这也让我感到恼火。

我手动运行第一个样品的代码,并且#34; Untersuchungszeitraum"和" Kategorie [int.low:int.high]"具有相同的行数,因此相关性应该是可计算的。

手动设置我的x和y之后,基本上只是从我的skript复制粘贴代码并手动设置tmp = 1和i = 0,因此省略for循环。我尝试计算结果数据帧的相关性,并得到我正在寻找的结果。加上标准差为零误差。

我不明白为什么当我用手工打字而不是当我使用skript时这是有效的。此外,标准差的一些见解是零误差会很好。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

我认为问题可能是public IEnumerable<string> GetAmazonMwsNotifications(ScAmazonNotificationType scAmazonNotificationType, CancellationToken cancellationToken) { var scAmazonSqsMwsNotificationsManagmentClientRequestBuilder = _scServiceLocator.GetInstance<IScAmazonSqsMwsNotificationsManagmentClientRequestBuilder>(); var blockingCollection = new BlockingCollection<string>(); try { StartReceiveMessagesAsync(blockingCollection, cancellationToken, scAmazonNotificationType, scAmazonSqsMwsNotificationsManagmentClientRequestBuilder); } catch (Exception exception) { throw //this catch is never called; } return blockingCollection.GetConsumingEnumerable(cancellationToken); } private async void StartReceiveMessagesAsync(BlockingCollection<string> blockingCollection, CancellationToken cancellationToken, ScAmazonNotificationType scAmazonNotificationType, IScAmazonSqsMwsNotificationsManagmentClientRequestBuilder scAmazonSqsMwsNotificationsManagmentClientRequestBuilder) { var semaphore = new SemaphoreSlim(15); var receiveMessageRequest = scAmazonSqsMwsNotificationsManagmentClientRequestBuilder.BuildReceiveMessageRequest(scAmazonNotificationType); while (!cancellationToken.IsCancellationRequested) { await semaphore.WaitAsync(cancellationToken); Task.Factory.StartNew(() => { try { throw new ApplicationException("Test"); var receiveMessageResponse = _scAmazonSqsClientWrapper.ReceiveMessageAsync(receiveMessageRequest, cancellationToken).Result; foreach (var result in receiveMessageResponse.Messages.Select(p => p.Body)) { blockingCollection.Add(result, cancellationToken); } var deleteFromQueueRequest = scAmazonSqsMwsNotificationsManagmentClientRequestBuilder.BuildBatchDeleteMessageRequest(scAmazonNotificationType, receiveMessageResponse.Messages.Select(p => p.ReceiptHandle).ToArray()); _scAmazonSqsClientWrapper.DeleteMessageBatchAsync(deleteFromQueueRequest, cancellationToken); } finally { semaphore.Release(1); } }, cancellationToken, TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent, new ThreadPerTaskScheduler()); } } Start.Test未正确计算。对于Ende.TestKategorie[int.low:int.high,-1]的所有值,int.high - int.low = 12将始终为长度为12的向量(i),但tmp的长度为{{1} }}。这意味着向量将在Untersuchungszeitraum - 循环中的第一次迭代具有相同的长度,但之后不会。

我真的不明白代码应该做什么,但有一种可能性就是你打算这样做

Ende.Test - Start.Test = 12 * tmp