python - R和Python中的标准差不同
问题描述
我正在尝试学习 Python,我也在学习统计,所以我想看看我是否可以制作自己的函数来获得数据集的均值、方差和标准差。
因此,我使用创建了方差函数,map()
但是lambda
当我将它与在另一个屏幕上运行的 R 进行比较时,我得到了错误的结果。我发现如果我numpy
在 python 中使用该库,我将获得与我在自制函数中获得的完全相同的值。
Python
females = [2474,2547,2830,3219,3429,3448,3677,3872,4001,4116]
males = [2844,2863,2963,3239,3379,3449,3582,3926,4151,4356]
def std_deviance(data):
mean = sum(data)/len(data)
variance = sum(list(map(lambda x: (x-mean)**2,data)))/len(data)
return variance**(1/2)
print('Females:\t', std_deviance(females))
# Females: 557.1610269930948
print('Males:\t\t',std_deviance(males))
# Males: 504.81913592889873
R
females <- c(2474,2574,2830,3219,3429,3448,3677,3872,4001,4116)
males <- c(2844,2863,2963,3239,3379,3449,3582,3926,4151,4356)
sd(females)
[1] 583.1874
sd(males)
[1] 532.1261
Python 与 numpy
from numpy import std
females = [2474,2547,2830,3219,3429,3448,3677,3872,4001,4116]
males = [2844,2863,2963,3239,3379,3449,3582,3926,4151,4356]
print('Females:\t', std(females))
# Females: 557.1610269930948
print('Males:\t\t',std(males))
# Males: 504.81913592889873
解决方案
你犯了一个印刷错误。(females
向量的第二个元素在您的 Python 示例中为 2547,在您的 R 示例中为 2574。)一旦您更正了这一点,这个问题就是R 和 Python 之间的输出值不同?
推荐阅读
- easylogging++ - Java 8 U172 崩溃,easylogging++
- r - 如何将具有开始和结束时间列的行转换为 R 中的时间序列格式?
- julia - Julia 中的线程性能
- swift - 如何在 macOS 上使 SwiftUI 的 Picker 无边框/透明?
- python - ValueError: int() 以 10 为基数的无效文字:'81?36N'
- amazon-web-services - 如何显示托管在 S3 中的静态网站的先前版本
- r - 如何对数据框的每一行应用函数?
- python - 如何仅操作字符串中单词的中心值(不是第一个和最后一个)?
- python - 在 minimum_squares 中调用函数作为参数返回“TypeError:'numpy.ndarray'对象不可调用”
- python - 如何使用 Pandas 和 Python 创建新变量并将其添加到数据框以打印到 excel?