web-dev-qa-db-ja.com

MicrosoftExcelでCDFグラフをプロットする

ここまたは SuperUser でこの質問をすることができるかどうかはよくわかりません、

Excelデータから [〜#〜] cdf [〜#〜] グラフをプロットする方法を知りたいです。私のデータは次のようなものです(私の実際のデータには22424レコードがあります):

1   2.39E-05
1   2.39E-05
1   2.39E-05
2   4.77E-05
2   4.77E-05
2   4.77E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
4   9.55E-05
8   0.000190931
8   0.000190931
9
Am1rr3zA

NORMDIST関数を使用して、finalパラメーターをtrueに設定できます。

例として、0.1から2.0までの20個のデータポイントが0.1刻みであるとします。つまり、0.1、0.2、0.3 ... 2.0です。

ここで、そのデータセットの平均が1.0で、標準偏差が0.2であると仮定します。

CDFプロットを取得するには、値ごとに次の式を使用できます。

=NORMDIST(x, 1.0, 0.2, TRUE) -- where x is 0.1, 0.2, 0.3...2.0

alt text


データから重複するエントリを削除し、同じ値を合計するには、次のコードを使用できます。

  1. Excelで、セルA1から始まるsheet1にデータを配置します
  2. ALT + F11を押してVBEを開きます
  3. Insert > Moduleで、モジュールをエディターに配置します
  4. 以下のコードを切り取ってモジュールに貼り付けます
  5. カーソルをRemoveDuplicatesの任意の場所に置き、F5を押してコードを実行します

その結果、独自の合計結果がワークブックのSheet2に表示されます。

Sub RemoveDuplicates()
    Dim rng As Range
    Set rng = Range("A1:B" & GetLastRow(Range("A1")))

    rng.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Worksheets("Sheet2").Range("A1"), Unique:=True

    Dim filteredRng As Range
    Dim cl As Range

    Set filteredRng = Worksheets("Sheet2").Range("A1:A" & GetLastRow(Worksheets("Sheet2").Range("A1")))

    For Each cl In filteredRng
        cl.Offset(0, 1) = Application.WorksheetFunction.SumIf(rng.Columns(1), cl.Value, rng.Columns(2))
    Next cl
End Sub

Function GetLastRow(rng As Range) As Long
    GetLastRow = rng.End(xlDown).Row
End Function
6
Alex P

この答えは、「経験分布関数」を作成する方法です。これは、CDFと言うときに多くの人が本当に心に留めていることです(私も含めて)... https://en.wikipedia.org/wiki/Empirical_distribution_function

サンプルデータの2番目の列がセルB1で始まり、セルC1で始まると仮定して、次のように入力します。

=SUM(IF($B$1:$B$14<=B1,1,0))/COUNT($B$1:$B$14)

次に、Shift + Enterを押して、配列数式として入力します。数式バーでは次のようになります。

{=SUM(IF($B$1:$B$14<=B1,1,0))/COUNT($B$1:$B$14)}

セルをコピーしてC1:C14をカバーします。次に、B1:B14をX、C1:C14をYとして散布図を作成します。4つのポイントが表示されます。

  • 重複を並べ替えたり削除したりする必要はありません
  • 範囲名を使用するか、Excelテーブル機能を利用して、入力範囲をより自動的に管理します
  • これは単一セルの配列数式であるため、コピーアンドペーストの方法によっては、「配列の一部を変更できません」というメッセージが表示されます。コピーと貼り付けを使用する場合は、セルC1をコピーしてから、セルC2:c14と貼り付けを選択します。
  • 理想的には、グラフはステップ関数として表示される必要がありますが、それを行う方法(良いか悪いか)を理解する時間がありませんでした。
5
Knom

私があなたの問題を理解したかどうか見てみましょう。 Excel2007以降を想定しています。データが列AとBにあると仮定します。

ステップ1

セルC1でこの数式を使用します。

=B1*COUNTIF(A:A,A1) 

そしてセルD1のこの数式:

=SUM($C$1:C1)  

両方の数式をデータの最後までコピーします。

ステップ2

4つの列を選択します。
リボンデータで選択->重複を削除
列B、C、Dのチェックを外します

ステップ3

列AとDを選択します。リボン挿入->散布図->線で選択します。

これはあなたが達成したいことですか?

HTH!

4
Dr. belisarius