【问题标题】:Plot a CDF chart by Microsoft Excel使用 Microsoft Excel 绘制 CDF 图
【发布时间】:2011-06-01 12:10:00
【问题描述】:

我不太确定我是否可以在这里或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

【问题讨论】:

  • @belis 第一列:我的图表的输出度,第二列:outputDegree/AllOutPutDegree
  • 对不起,我不明白你所说的“学位”是什么意思
  • @belis 我认为我的列到底是什么并不重要,重要的是“SUM(我的第二列)=1”和我的第一列没有正态分布
  • 只是想了解您的数据的含义,为什么数字重复等。如果打扰您,请见谅。
  • @beli 我可以做更多的编码来消除重复数据并将它们组合起来,但我知道 excel 有任何功能可以方便我的工作并根据这些数据绘制 CDF

标签: excel math charts plot


【解决方案1】:

您可以使用NORMDIST函数并将最终参数设置为true:

例如,假设我有 20 个数据点,从 0.1 到 2.0,增量为 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


要从您的数据中删除重复的条目并汇总相同的值,您可以使用以下代码。

  1. 在 Excel 中,将数据放在 sheet1 中,从单元格 A1 开始
  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

【讨论】:

  • 你是怎么猜到分布是正态分布的?
  • 在我的示例中,我只是展示了一个程式化的示例,说明如何使用假定的均值和 sd 进行 CDF 图...在现实世界中,您需要测试正态性、方差假设等。跨度>
  • @Remn 正如您在我发布的示例数据中看到的那样,我的值列中有一些重复的数据如何预处理它们?而且我的数据中也没有正态分布
  • @Remnan Tanx 为您解答,但我是 excel 新手,您能解释一下如何做到这一点吗?另请注意,当您想统一我的值时,必须更改第二列并输入它们的总和(我的意思是,我必须有一个“1 7.17e-05”,而不是我有 3 个“1 7.17e-05”)
  • @Am1rr3za @Remm Remove Duplicates 是功能区中的一项功能,不是吗? (在 {data} 下)
【解决方案2】:

这个答案是如何创建“经验分布函数”,这是很多人在说 CDF 时真正想到的(包括我自己)...https://en.wikipedia.org/wiki/Empirical_distribution_function

假设样本数据的第二列从单元格 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 绘制散点图。它将显示四个点。

  • 不需要排序或删除重复项
  • 使用范围名称或利用 Excel 表格功能更自动地管理输入范围
  • 这是一个单单元格数组公式,因此根据您复制和粘贴的方式,您将收到一条消息“无法更改数组的一部分”。如果您使用复制粘贴,请复制单元格 C1,然后选择单元格 C2:c14 并粘贴。
  • 理想情况下,该图应显示为阶跃函数,但我没有时间想出任何方法(好或坏)来做到这一点。

【讨论】:

    【解决方案3】:

    让我们看看我是否理解您的问题。假设 Excel 2007 及更高版本。假设您的数据在 A 列和 B 列中。

    第一步

    在单元格 C1 中使用此公式:

    =B1*COUNTIF(A:A,A1) 
    

    单元格 D1 中的这个公式:

    =SUM($C$1:C1)  
    

    并将两个公式复制到数据的末尾。

    第二步

    选择四列。
    在功能区数据中选择->删除重复项
    取消选中 B、C 和 D 列

    第三步

    选择 A 列和 D 列。 在 Ribbon Insert->Scatter->Line 中选择

    这是您想要实现的目标吗?

    HTH!

    【讨论】:

    • @belis 这正是我想要的,除了我想要那个而不是我有 3 个“1 2.39E-05”我必须有一个“1 7.17e-05”(意思是我不想要只需简单地删除重复项也需要一个小过程:()
    • @Am1rr3zA 已编辑。请看一看。
    • @Belis 在第 2 步中告诉我没有找到任何重复项,对吗?或者我必须选择一些列而不是全部 4?
    • @Am1rr3zA 您必须选择所有四个,然后转到数据->删除重复项。出现一个对话框,显示所有列。取消选中最后三个,只选中第一列。
    • @belis Tanx 我可以结合你的解决方案和@Remn 解决方案来解决我的问题,但我接受@beli 解决方案,因为他的声誉低于你,并希望帮助他更快地成长(只是小+15),但你的回答教会了我很多excel技巧。
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多