2017-02-04 12 views
2

私は012個の観測値と2つの変数を持つdata setを持っています。私がデータ全体を要約すると、第2の変数の分位数、中央値、平均値および最大値が結果と異なることがあります。何故ですか? r2evans'はコメント@

data <- read.csv("testdata.csv") 

head(data) 
# Group.1  x 
# 1 10/1/12  0 
# 2 10/2/12 126 
# 3 10/3/12 11352 
# 4 10/4/12 12116 
# 5 10/5/12 13294 
# 6 10/6/12 15420 

summary(data) 
# Group.1   x   
# 10/1/12 : 1 Min. : 0 
# 10/10/12: 1 1st Qu.: 6778 
# 10/11/12: 1 Median :10395 
# 10/12/12: 1 Mean : 9354 
# 10/13/12: 1 3rd Qu.:12811 
# 10/14/12: 1 Max. :21194 
# (Other) :55    

summary(data[2]) 
#  x   
# Min. : 0 
# 1st Qu.: 6778 
# Median :10395 
# Mean : 9354 
# 3rd Qu.:12811 
# Max. :21194 

# The following code yield different result: 

summary(data$x) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 0 6778 10400 9354 12810 21190 
+4

あなたの呼び出しは 'summary.data.frame(data [2])'と 'summary.default(data $ x)'に相当します(S3解決後)。関数はわずかに異なって定義されており、統計も少し異なっているようです。四分位数の計算は、数値ベクトルの長さによって「解釈するまで」であり、Rのすべての関数がお互いまたはあなたと同じ仮定をするわけではありません。あなたが好む方法を見つけたり、自分で計算したりしてください(いくつかの詳細については '?quantile'を読んでください)。 – r2evans

答えて

1

は食い違いがsummary.data.framesummary.defaultの違いによって引き起こされることで正しいです。

両方の方法のデフォルト値はdigitsです。max(3L, getOption("digits") - 3L)です。オプションを変更していない場合は、4Lと評価されます。ただし、2つのメソッドの出力の違いの理由は、出力の書式設定時に2つのメソッドの引数がそれぞれdigitsのものとは異なっています。 ?summaryから:

digits:整数、signif()summary.default)またはformat()summary.data.frame用)でフォーマット番号に使用。

q <- append(quantile(data$x), mean(data$x), after = 3L) 
q 
## 0%  25%  50%    75%  100% 
## 0.00 6778.00 10395.00 9354.23 12811.00 21194.00 

summary.defaultでは出力がsignifを使用してフォーマットされ、それが重要なdigitsの供給数に入力します丸め:

は、私たちが問題になっている xの要約統計量のベクトルを持っていると言います。 summary.data.frameが使用 formatを、使用しています

signif(q, digits = 4L) 
## 0% 25% 50%   75% 100% 
## 0 6778 10400 9354 12810 21190 

ながらそれはdigits引数ですディスプレイに有効桁の数としてのみsugggestion?format):このよう

format(q, digits = 4L) 
##  0%  25%  50%    75% 100% 
## " 0" " 6778" "10395" " 9354" "12811" "21194" 

、デフォルトdigits引数値4summary.default(data$x)ラウンドのみ4桁の有効数字に5桁の変位値を使用する場合、 summary.data.frame(data[2])は、5桁の分位数を丸めずに表示します。

あなたが明示的に4より大きいとしてdigits引数を指定した場合、あなたが買ってあげる同じ結果:

df <- data.frame(a = 1e5 + 0:100) 

summary(df$a) 
## Min. 1st Qu. Median Mean 3rd Qu. Max. 
## 100000 100000 100000 100000 100100 100100 

summary(df) 
##  a   
## Min. :100000 
## 1st Qu.:100025 
## Median :100050 
## Mean :100050 
## 3rd Qu.:100075 
## Max. :100100 
:デフォルト digitsを持つ2つの方法の違いの極端な例として、

summary(data[2], digits = 5L) 
##  x   
## Min. : 0.0 
## 1st Qu.: 6778.0 
## Median :10395.0 
## Mean : 9354.2 
## 3rd Qu.:12811.0 
## Max. :21194.0 

summary(data$x, digits = 5L) 
## Min. 1st Qu. Median Mean 3rd Qu. Max. 
## 0.0 6778.0 10395.0 9354.2 12811.0 21194.0