この質問にはすでに答えがあります:
RとPythonでは出力値が違う?
(答えは3つ)
3 年前
に閉店しました。
私は Python を学ぼうとしていて、統計学も学んでいるので、データセットの平均、分散、そして最後に標準偏差を取得する独自の関数を作成できるかどうかを確認したいと思いました。
そこで私はMap() と lambda を使用して分散を求める関数を作成しましたが、別の画面で実行していた R と比較したときに、間違った結果が得られました。 Python で numpy ライブラリを使用すると、自作関数で取得した値とまったく同じ値が取得されることがわかりました。
パイソン
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
1
予想される最小限の再現可能な例を提供してください。中間結果が期待したものと異なる箇所を示します。
– プルーン
2020 年 9 月 4 日 18:57
必要な検索語は、正しいスペルである「variance」、つまり標準偏差の 2 乗です。
– プルーン
2020 年 9 月 4 日 18:58
何よりも、さまざまなパッケージですぐに入手できる式を使用せずに、独自の式を作成するのはなぜですか?
– プルーン
2020 年 9 月 4 日 18:58
@Prune 1. データもあげておきます。ごめん。 2. 今すぐ質問を編集します。 3. 私は統計ではなく Python を学ぼうとしているからです :)
– ママ
2020 年 9 月 4 日 19:02
@Prune さん、私のコードをもう一度チェックして、再開に投票するか、明確にする方法を教えてください。
– ママ
2020 年 9 月 4 日 19:08
------------------------
タイプミスがありました。 (女性ベクトルの 2 番目の要素は、Python の例では 2547、R の例では 2574 です。) それを修正すると、この質問は「R と Python の間で出力値が異なりますか?」の重複になります。