cor 函数中的不兼容维度错误
Incompatible dimensions error in cor function
我正在尝试编写一个函数来计算因变量和自变量之间的相关性,以便在将数据放入回归模型之前找到数据的完美滞后。我想计算每个季度(我的意思是我正在检查的年份的每个季度)我的训练数据的最佳滞后,然后对每个滞后的结果相关性进行平均。滞后 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)
输入'warnings()'告诉我标准偏差为零,这也让我很生气。
我 运行 手动第一个样本的代码并且 "Untersuchungszeitraum" 和 "Kategorie[int.low:int.high]" 具有相同的行数,因此相关性应该是可计算的。
手动设置我的 x 和 y 后,基本上只需从我的 skript 中复制粘贴代码并手动设置 tmp = 1 和 i = 0,因此省略 for 循环。我尝试计算生成的数据帧的相关性并得到了我正在寻找的结果。加上标准偏差为零误差。
我不明白为什么这在我手动输入时有效,而在我使用脚本时却无效。另外,对标准偏差的一些了解是零错误会很好。感谢您的帮助!
我认为问题可能是 Start.Test
和 Ende.Test
计算不正确。 Kategorie[int.low:int.high,-1]
将始终是长度为 12 的向量(对于 i
和 tmp
的所有值,int.high - int.low = 12
),但 Untersuchungszeitraum
的长度将是 Ende.Test - Start.Test = 12 * tmp
.这意味着向量在 for
循环的第一次迭代中将具有相同的长度,但之后就不一样了。
我不太明白这段代码应该做什么,但一种可能是你打算做的
Start.test = 1 + tmp
Ende.test = 13 + tmp
我正在尝试编写一个函数来计算因变量和自变量之间的相关性,以便在将数据放入回归模型之前找到数据的完美滞后。我想计算每个季度(我的意思是我正在检查的年份的每个季度)我的训练数据的最佳滞后,然后对每个滞后的结果相关性进行平均。滞后 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)
输入'warnings()'告诉我标准偏差为零,这也让我很生气。
我 运行 手动第一个样本的代码并且 "Untersuchungszeitraum" 和 "Kategorie[int.low:int.high]" 具有相同的行数,因此相关性应该是可计算的。
手动设置我的 x 和 y 后,基本上只需从我的 skript 中复制粘贴代码并手动设置 tmp = 1 和 i = 0,因此省略 for 循环。我尝试计算生成的数据帧的相关性并得到了我正在寻找的结果。加上标准偏差为零误差。
我不明白为什么这在我手动输入时有效,而在我使用脚本时却无效。另外,对标准偏差的一些了解是零错误会很好。感谢您的帮助!
我认为问题可能是 Start.Test
和 Ende.Test
计算不正确。 Kategorie[int.low:int.high,-1]
将始终是长度为 12 的向量(对于 i
和 tmp
的所有值,int.high - int.low = 12
),但 Untersuchungszeitraum
的长度将是 Ende.Test - Start.Test = 12 * tmp
.这意味着向量在 for
循环的第一次迭代中将具有相同的长度,但之后就不一样了。
我不太明白这段代码应该做什么,但一种可能是你打算做的
Start.test = 1 + tmp
Ende.test = 13 + tmp