Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用圆坐标计算罗盘方向的标准差_R_Mean_Standard Deviation_Degrees_Radians - Fatal编程技术网

R 用圆坐标计算罗盘方向的标准差

R 用圆坐标计算罗盘方向的标准差,r,mean,standard-deviation,degrees,radians,R,Mean,Standard Deviation,Degrees,Radians,我的目标是计算一系列罗盘度数的平均值和标准偏差。因为我可能会超过360/0,所以我不能使用标准平均值或sd计算 我一直在使用R中的圆形包装,这似乎给了我正确的方法(尽管当跨越360标记时使用负值,而不是正值)。但是sd值太小了。有什么想法可能是错误的,或者一个更好的方法来计算指南针方向的平均值和sd 下面的代码是我尝试测试我在不同罗盘方向上的平均值和sd计算,并与标准平均值和sd计算进行比较(除非我越过360/0标记,否则他们应该同意) 库(循环) 测试仪当您加载循环数据时,它有一个单独的sd函

我的目标是计算一系列罗盘度数的平均值和标准偏差。因为我可能会超过360/0,所以我不能使用标准平均值或sd计算

我一直在使用R中的圆形包装,这似乎给了我正确的方法(尽管当跨越360标记时使用负值,而不是正值)。但是sd值太小了。有什么想法可能是错误的,或者一个更好的方法来计算指南针方向的平均值和sd

下面的代码是我尝试测试我在不同罗盘方向上的平均值和sd计算,并与标准平均值和sd计算进行比较(除非我越过360/0标记,否则他们应该同意)

库(循环)

测试仪当您加载
循环数据时,它有一个单独的
sd
函数,用于以不同方式计算循环数据的标准偏差

#DATA
Tester<-c(160,180,200)
ToCirc<- circular(Tester, type="angles", units="degrees",rotation="clock")


sd(ToCirc)
#[1] 0.2864803

#The above is equivalent to 
r = rho.circular(ToCirc) #Resultant Length
sqrt(-2*log(r)) #Then sd
#[1] 0.2864803
或者自己算算

Tester<-c(340,360,20)
sine = sum(sin(Tester * pi/180)) #sin of each angle, convert to radian first
cosine = sum(cos(Tester * pi/180)) #cos of each angle, convert to radian first

Tester_mean = (atan2(sine, cosine) * 180/pi) %% 360

mu = (Tester - Tester_mean + 180) %% 360 - 180 #Difference of each angle from mean
Tester_sd = sqrt(sum(mu^2)/(length(Tester) - 1)) #Standard Deviation

Tester_mean
#[1] 0
Tester_sd
#[1] 20
TesterIf我使用测试仪
sd.default(ToCirc)
#[1] 20

#which is equal to
sd.default(Tester)
#[1] 20
Tester<-c(340,360,20)
sine = sum(sin(Tester * pi/180)) #sin of each angle, convert to radian first
cosine = sum(cos(Tester * pi/180)) #cos of each angle, convert to radian first

Tester_mean = (atan2(sine, cosine) * 180/pi) %% 360

mu = (Tester - Tester_mean + 180) %% 360 - 180 #Difference of each angle from mean
Tester_sd = sqrt(sum(mu^2)/(length(Tester) - 1)) #Standard Deviation

Tester_mean
#[1] 0
Tester_sd
#[1] 20