首页 > 解决方案 > 循环瑞利测试以找到最高值

问题描述

我是 R 的初学者,所以希望这将是一个简单的修复。

我正在尝试在数据集上使用 for 循环来确定神经元发射方向,以便:

到目前为止,我有这个代码,在经历了很长时间之后,我不知道为什么它不起作用。每次我运行它时,for 循环都会一直运行到最后,只报告整个数据集的瑞利值和向量,我知道这是不正确的。(我正在为瑞利测试功能使用圆形包)

# This first line is just to create an initial rayleigh statistic to compare to in the loop that is low

best_rayleigh <- rayleigh.test(1:10)
data_vector <- c()

for (i in firing_directions) {
  data_vector <- append(data_vector, i) 
  ray_lee_test <- rayleigh.test(data_vector) 
  if ((ray_lee_test$statistic>best_rayleigh$statistic)&(ray_lee_test$p.value<=.05)) {
    best_rayleigh <- ray_lee_test 
    best_rayleigh_vector <- data_vector
  } else {
    NULL
  }
}

任何帮助表示赞赏。谢谢!

更新:我尝试在 if 语句中使用 && 而不是单个 &,但是它返回了相同的结果

标签: rstatistics

解决方案


以下代码不会给出警告,而是选择具有最高检验统计量和“显着”p 值的向量。

library(circular)

set.seed(2020)
firing_directions <- rvonmises(n = 25, mu = circular(pi), kappa = 2)
plot(firing_directions)

best_rayleigh <- rayleigh.test(circular(1:10))
for(i in seq_along(firing_directions)){
  dv <- firing_directions[seq_len(i)]
  rltest <- rayleigh.test(dv)
  if((rltest$statistic > best_rayleigh$statistic) && (rltest$p.value <= 0.05)){
    best_rayleigh <- rltest 
    best_rayleigh_vector <- dv
  }
}

best_rayleigh
#
#       Rayleigh Test of Uniformity 
#       General Unimodal Alternative 
#
#Test Statistic:  0.8048 
#P-value:  0.0298 

best_rayleigh_vector
#Circular Data: 
#Type = angles 
#Units = radians 
#Template = none 
#Modulo = asis 
#Zero = 0 
#Rotation = counter 
#[1] 4.172219 2.510826 2.997495 4.095335 3.655613

推荐阅读