Python和R是否有不同的方法来计算标准差(sd)?
例如,在python中,以开头:
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a.std(axis=1))
### per row : [0.81649658 0.81649658 0.81649658]
print(a.std(axis=0))
### per column : [2.44948974 2.44948974 2.44948974]
Run Code Online (Sandbox Code Playgroud)
在R中:
z <- matrix(c(1,2,3,4,5,6,7,8,9), nrow=3, ncol=3, byrow=T)
# z
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 4 5 6
#[3,] 7 8 9
# apply(z, 1, sd)
sd(z[1,]) #1
sd(z[2,]) #1
sd(z[3,]) #1
# apply(z, 2, sd)
sd(z[,1]) #3
sd(z[,2]) #3
sd(z[,3]) #3
Run Code Online (Sandbox Code Playgroud)
这是因为默认情况下,分母(docs)公式中的sd()from base-R使用。n-1
numpy而是n默认使用,但是您可以使用ddof(docs)指定n-1更正。
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a.std(axis=1, ddof = 1))
[1. 1. 1.]
Run Code Online (Sandbox Code Playgroud)
请注意,如果较大,则两种方法之间的差异较小n。在示例中,这很明显,因为n=3尝试n=1000并观察差异。
另外读数上为什么n-1校正使用。