Conduco ricerche nel campo agricolo e uso excel come la maggior parte delle persone per organizzare i miei dati. Tuttavia, un'analisi comune è l'area sotto la curva di avanzamento della malattia (AUDPC) per monitorare i cambiamenti della malattia durante la stagione di crescita. Esiste un modo per calcolare l'area totale sotto un grafico a linee senza adattare un'analisi di trend line/regressione.
Ciao,
L'unico modo per ottenere ciò è calcolare l'area del poligono definita dai punti dati e dal pavimento del grafico.
area = Polygon Area( {0, 0}, {0, 10}, {10, 10}, {10, 0} );
NOTA: 1) è possibile utilizzare questa funzione in una formula. 2) È fondamentale includere le origini del poligono come mostrato nel semplice esempio sopra.
Migliore,
TS
Thierry,
Grazie per la risposta. Presumo che la formula che hai postato debba essere applicata all'interno del software Excel? Oppure esiste un metodo per utilizzarlo all'interno del software JMP?
Migliore,
La formula pubblicata è per JMP piuttosto che per Excel. Basandosi sulla risposta di @Thierry_S puoi fare questo genere di cose in JSL, il linguaggio di scripting per JMP:
NamesDefaultToHere(1);
// Some simple data
dt =
New Table( "AUDPC Example",
Add Rows( 4 ),
New Column( "x", Numeric, "Continuous", Set Values( [0, 1, 2, 3] )),
New Column( "y", Numeric, "Continuous", Set Values( [3, 4, 4.5, 5] ))
);
// A graph
gb = dt << Graph Builder(
Size( 526, 454 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :x ), Y( :y ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch(
{},
"x",
ScaleBox,
{Min( -1 ), Max( 4 ), Inc( 0.5 ), Minor Ticks( 0 ),
Add Ref Line( 0, "Dashed", "Red", "", 1 ),
Add Ref Line( 3, "Dashed", "Red", "", 1 )}
),
Dispatch(
{},
"y",
ScaleBox,
{Format( "Best", 12 ), Min( -1 ), Max( 6 ), Inc( 1 ), Minor Ticks( 1 ),
Add Ref Line( 0, "Dashed", "Red", "", 1 ),
Add Ref Line( 1, "Dashed", "Red", "", 1 )}
)
)
);
// Start here . . .
dt = CurrentDataTable();
// Get the x and y values
xVals = Column(dt, "x") << getValues;
yVals = Column(dt, "y") << getValues;
// Insert two points that define the base of the polygon at the value y = 0
baseLine = [0];
xVals2 = VConcat(xVals[1], xVals, xVals[NRow(xVals)]);
yVals2 = VConcat(baseLine, yVals, baseline);
// Get the area
a2 = PolygonArea(xVals2, yVals2);
Print(a2);
// Insert two points that define the base of the polygon at the value y = 1
baseLine = [1];
xVals3 = VConcat(xVals[1], xVals, xVals[NRow(xVals)]);
yVals3 = VConcat(baseLine, yVals, baseline);
// Get the area
a3 = PolygonArea(xVals3, yVals3);
Print(a3);
Fai "File> Nuovo> Nuovo script", taglia e incolla il codice sopra nella finestra che appare, quindi fai "Modifica> Esegui script". Capisco che potresti non voler imparare JSL. Nota che questo dà l'area 'sotto' il poligono definito dai valori dei dati. Puoi o meno volere l'area sotto una sorta di curva adatta, ma anche questo è possibile.