2010-12-30 16 views
6

Io non sono del tutto sicuro se posso fare questa domanda qui o sulla SuperUser,Plot un grafico CDF da Microsoft Excel

vorrei sapere come posso tracciare un grafico CDF della mia produzione in Excel.

miei dati è qualcosa di simile (i miei dati reali hanno 22424 record):

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

Quali sono le colonne? –

+0

@belis prima colonna: grado di uscita del mio grafico, seconda colonna: outputDegree/AllOutPutDegree – Am1rr3zA

+0

Scusa non capisco cosa intendi per "grado" –

risposta

3

È possibile utilizzare la funzione NORMDIST e impostare il parametro finale su true:

Per fare un esempio, supponiamo di avere 20 punti dati da 0,1 a 2,0 con incrementi di 0,1 ovvero 0,1, 0,2, 0,3 ... 2,0.

Supponiamo ora che la media di tale set di dati sia 1.0 e che la deviazione standard sia 0.2.

Per ottenere la trama CDF posso utilizzare la seguente formula per ciascuno dei miei valori:

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

alt text


Per rimuovere voci duplicate dai dati ei valori di somma che sono gli stessi puoi usare il seguente codice

  1. In Excel, inserire i tuoi dati in Sheet1, a partire nella cella A1
  2. Press ALT + F11 per aprire VBE
  3. Ora Insert > Module di inserire un modulo nell'editor
  4. Taglia e incolla il codice qui sotto nel modulo di
  5. Posizionare il cursore in qualsiasi punto RemoveDuplicates e stampa F5 per eseguire il codice

Di conseguenza, i risultati unici e sommati verranno visualizzati in Sheet2 nella cartella di lavoro.

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

Come hai immaginato che la distribuzione fosse Normale? –

+0

In il mio esempio stavo semplicemente mostrando un esempio stilizzato di come fare plot CDF con media assunta e sd ... nel mondo reale Potrebbe essere necessario testare per normalità, ipotesi di varianza ecc. –

+0

@Remn come puoi vedere nei miei dati di esempio postati Ho alcuni dati ripetuti nella colonna del mio valore come posso pre-elaborarli? e anche io non ho distribuzione normale nei miei dati – Am1rr3zA

4

Vediamo se ho capito il tuo problema. Supponendo Excel 2007 e versioni successive. Supponendo che i dati sono in colonne A e B.

Fase 1

Utilizzare questa formula nella cella C1:

=B1*COUNTIF(A:A,A1) 

E questa formula nella cella D1:

=SUM($C$1:C1) 

e copiare entrambe le formule fino alla fine dei dati.

Fase 2

selezionare i quattro colonne.
Selezionare nella barra multifunzione Data-> Elimina duplicati
Deselezionare colonne B, C e D

Fase 3

Seleziona colonne A e D. Seleziona nella barra multifunzione Inserisci-> sbadati> Linea

È questo che vuoi ottenere?

HTH!

+0

@belis è esattamente quello che voglio tranne che voglio quello invece di I have 3 "1 2.39E-05" Devo avere uno "1 7.17e-05" (significa che non voglio semplicemente rimuovere i duplicati anche bisogno di un piccolo processo troppo :() – Am1rr3zA

+0

@ Am1rr3zA Modificato. Dai un'occhiata –

+0

@Belis nel passaggio 2 mi dice che non ho trovato alcun duplicato è giusto? O devo selezionare alcune colonne invece di tutte 4? – Am1rr3zA

2

Questa risposta è come creare un 'funzione empirica di distribuzione', che è ciò che molte persone hanno davvero in mente (me compreso) quando dicono CDF ... https://en.wikipedia.org/wiki/Empirical_distribution_function

Supponendo che la seconda colonna dei dati campione inizia a cella B1, nella cella C1, tipo:

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

quindi premere sHIFT + ENTER, per immetterla come una forma di matrice. Apparirà ora nella barra della formula:

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

Copia la cella in basso per coprire C1: C14. Quindi crea la trama di dispersione con B1: B14 come X, C1: C14 come Y. Mostrerà quattro punti.

  • Non hanno bisogno di ordinare o rimuovere i duplicati
  • Usare nomi di intervallo, o sfruttare le funzionalità di tabella di Excel, per gestire più varia automaticamente l'ingresso
  • Si tratta di una formula di matrice unicellulare così, a seconda di come si copia-e-incolla, si otterrà un messaggio "Impossibile modificare parte di un array". Se si utilizza Copia-Incolla, copiare la cella C1, quindi selezionare le celle C2: c14 e Incolla.
  • Idealmente, il grafico dovrebbe essere presentato come una funzione di passaggio, ma non ho avuto il tempo di capire in alcun modo (buono o cattivo) di farlo.
Problemi correlati