9

DSL 回線のインターネット セッションに関するデータを分析する必要があります。セッション期間がどのように分布しているかを確認したかったのです。これを行う簡単な方法は、すべてのセッションの持続時間の確率密度プロットを作成することから始めることだと思いました。

Rにデータをロードし、density()関数を使用しました。というわけで、こんな感じでした

plot(density(data$duration), type = "l", col = "blue", main = "Density Plot of Duration",
     xlab = "duration(h)", ylab = "probability density")

私はRとこの種の分析が初めてです。これは、グーグルを調べて見つけたものです。プロットを手に入れましたが、いくつか疑問が残りました。これは私がやろうとしていることを行うための正しい機能ですか、それとも他に何かありますか?

プロットでは、Y 軸のスケールが 0 ~ 1.5 であることがわかりました。どうすれば 1.5 になるのかわかりません。0 から 1 にすべきではありませんか?

また、より滑らかな曲線を取得したいと思います。データセットが非常に大きいため、線がギザギザになっています。これを提示するときは、それらを滑らかにした方がいいでしょう。どうすればそれを行うことができますか?

4

3 に答える 3

10

nicoが言ったように、チェックアウトする必要histがありますが、2つを組み合わせることもできます. lines次に、代わりに密度を呼び出すことができます。例:

duration <- rpois(500, 10) # For duration data I assume Poisson distributed
hist(duration,
   probability = TRUE, # In stead of frequency
   breaks = "FD",      # For more breaks than the default
   col = "darkslategray4", border = "seashell3")
lines(density(duration - 0.5),   # Add the kernel density estimate (-.5 fix for the bins)
   col = "firebrick2", lwd = 3)

あなたに次のようなものを与えるべきです: 期間のヒストグラム

カーネル密度の推定では、ガウス カーネルがデフォルトとして想定されていることに注意してください。しかし、多くの場合、帯域幅が最も重要な要素です。直接呼び出すdensityと、デフォルトの推定帯域幅が報告されます。

> density(duration)

Call:
        density.default(x = duration)

Data: duration (500 obs.);      Bandwidth 'bw' = 0.7752

       x                 y            
 Min.   : 0.6745   Min.   :1.160e-05  
 1st Qu.: 7.0872   1st Qu.:1.038e-03  
 Median :13.5000   Median :1.932e-02  
 Mean   :13.5000   Mean   :3.895e-02  
 3rd Qu.:19.9128   3rd Qu.:7.521e-02  
 Max.   :26.3255   Max.   :1.164e-01  

ここでは 0.7752 です。データをチェックして、ニコが提案したように遊んでください。をご覧になることをお勧めします?bw.nrd

于 2010-11-18T12:58:12.817 に答える
2

曲線の滑らかさを変更するには、bandwith ( bw) パラメータをいじる必要があります。一般に、R はうまく機能し、自動的に素敵で滑らかな曲線を生成しますが、特定のデータセットには当てはまらない場合があります。

使用している呼び出しについては、はい、正しいtype="l"です。必要ではありません。密度オブジェクトのプロットに使用されるデフォルトです。曲線の下の面積 (つまり、密度関数の -Inf から +Inf までの積分) は = 1 になります。

さて、密度曲線はあなたの場合に使用するのに最適ですか? 多分そうではないかもしれません...それは本当にあなたがしたい分析のタイプに依存します. おそらく を使用histするだけで十分であり、期間の特定のビンを選択できるため、より有益になる可能性があります (詳細については、を参照?histしてください)。

于 2010-11-18T12:23:52.933 に答える
1

これを前の回答にコメントとして追加するつもりでしたが、大きすぎます。明らかな歪みは、値がヒストグラムでビニングされる方法によるものです。離散データにヒストグラムを使用するのはよく間違いです。下記参照 ...

set.seed(1001)
tmpf <- function() {
  duration <- rpois(500, 10) # For duration data I assume Poisson distributed
  hist(duration,
       probability = TRUE, # In stead of frequency
       breaks = "FD",      # For more breaks than the default
       col = "darkslategray4", border = "seashell3",
       main="",ann=FALSE,axes=FALSE,xlim=c(0,25),ylim=c(0,0.15))
  box()
  lines(density(duration),   # Add the kernel density estimate
        col = "firebrick2", lwd = 3)
  par(new=TRUE)
  plot(table(factor(duration,levels=0:25))/length(duration),
       xlim=c(0,25),ylim=c(0,0.15),col=4,ann=FALSE,axes=FALSE)
}

par(mfrow=c(3,3),mar=rep(0,4))
replicate(9,tmpf())
于 2010-11-18T17:19:37.300 に答える