我正在尝试编写一个函数来计算我的因变量和自变量之间的相关性,这样我就可以在将数据放入回归模型之前找到数据的完美滞后。我想计算每个季度(我的意思是我正在检查的每一季度)我的训练数据的最佳滞后,然后平均每个滞后的结果相关性。滞后为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时这是有效的。此外,标准差的一些见解是零误差会很好。谢谢你的帮助!
答案 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.Test
和Kategorie[int.low:int.high,-1]
的所有值,int.high - int.low = 12
将始终为长度为12的向量(i
),但tmp
的长度为{{1} }}。这意味着向量将在Untersuchungszeitraum
- 循环中的第一次迭代具有相同的长度,但之后不会。
我真的不明白代码应该做什么,但有一种可能性就是你打算这样做
Ende.Test - Start.Test = 12 * tmp