2010-12-30 13 views
6

No estoy seguro de si puedo hacer esta pregunta aquí o en SuperUser,un gráfico CDF por Microsoft Excel

Quiero saber cómo puedo trazar un gráfico que de mi salida en Excel CDF.

mis datos es algo como esto (mis datos reales tienen 22424 registros):

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 
+0

¿Cuáles son las columnas? –

+0

@belis primera columna: grado de salida de mi gráfico, segunda columna: outputDegree/AllOutPutDegree – Am1rr3zA

+0

Lo siento, no entiendo qué quiere decir con "grado" –

Respuesta

3

Usted puede utilizar la función NORMDIST y establecer el parámetro final true:

A modo de ejemplo, supongamos que tiene 20 puntos de datos de 0.1 a 2.0 en incrementos de 0.1, es decir, 0.1, 0.2, 0.3 ... 2.0.

Supongamos ahora que la media de ese conjunto de datos es 1.0 y la desviación estándar es 0.2.

Para obtener el diagrama CDF puedo utilizar la siguiente fórmula para cada uno de mis valores:

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

alt text


Para eliminar las entradas duplicadas de los datos y valores de suma que son los mismos puedes usar el siguiente código

  1. en Excel, colocar los datos en sheet1, comenzando en la celda A1
  2. Prensa ALT + F11 para abrir VBE
  3. Ahora Insert > Module para colocar un módulo en el editor de abajo
  4. Cortar y pegar el código en el módulo
  5. Coloque el cursor en cualquier parte de la prensa y RemoveDuplicatesF5 para ejecutar el código

Como resultado, sus resultados únicos y resumidos aparecerán en Sheet2 en su libro de trabajo.

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 
+0

¿Cómo adivinó que la distribución es Normal? –

+0

In mi ejemplo, simplemente estaba mostrando un ejemplo estilizado de cómo hacer una trama de CDF con una media asumida y una sd ... en el mundo real que Debería probar la normalidad, suposiciones de varianza, etc. –

+0

@Remn como puede ver en mi muestra de datos publicados Tengo algunos datos repetidos en mi columna de valores ¿Cómo puedo preprocesarlos? y también no tengo distribución Normal en mis datos – Am1rr3zA

4

Veamos si entiendo su problema. Asumiendo Excel 2007 en adelante. Suponiendo que sus datos están en las columnas A y B.

Paso 1

Utilice esta fórmula en la celda C1:

=B1*COUNTIF(A:A,A1) 

Y esta fórmula en la celda D1:

=SUM($C$1:C1) 

y copie ambas fórmulas hasta el final de los datos.

Paso 2

seleccionar los cuatro columnas.
Select en la cinta Data-> eliminar duplicados
Columnas Desmarcar B, C y D

paso 3

Seleccionar columnas A y D. seleccione en la cinta Insert-> Scatter-> Línea

¿Es esto lo que quieres lograr?

HTH!

+0

@belis es exactamente lo que quiero, excepto que quiero que en su lugar de Tengo 3 "1 2.39E-05" Debo tener uno "1 7.17e-05" (significa que no quiero simplemente eliminar duplicado también necesito un poco de proceso :() – Am1rr3zA

+0

@ Am1rr3zA Editado. Por favor, eche un vistazo –

+0

@Belis en el paso 2 me dice que no encontré ningún duplicado ¿es correcto? O debo seleccionar algunas columnas en lugar de todas 4? – Am1rr3zA

2

Esta respuesta es la forma de crear una 'función empírica de distribución', que es lo que mucha gente realmente tienen en cuenta (me incluyo) cuando dicen CDF ... https://en.wikipedia.org/wiki/Empirical_distribution_function

Suponiendo que la segunda columna de los datos de la muestra se inicia en la célula B1, en la celda C1, tipo:

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

continuación, pulse Shift + Enter, para entrar en él como una fórmula de matriz. Ahora se verá así en la barra de fórmulas:

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

Copie la celda para cubrir C1: C14. Luego haz que Scatter trace con B1: B14 como X, C1: C14 como Y. Mostrará cuatro puntos.

  • No necesidad de clasificar o eliminar duplicados
  • Use nombres de rango, o tomar ventaja de las capacidades de tabla de Excel, para gestionar la entrada oscila más automáticamente
  • Es una fórmula de matriz de una sola célula, por lo dependiendo de cómo copie y pegue, obtendrá un mensaje "No se puede cambiar parte de una matriz". Si usa Copiar-Pegar, copie la celda C1, luego seleccione celdas C2: c14 y Pegar.
  • Lo ideal es que el gráfico se presente como una función de paso, pero no tuve tiempo de encontrar la forma (buena o mala) para hacerlo.
Cuestiones relacionadas