I need to analyze data from a Delphi study with multiple rounds. Help me: 1) Calculate measures of central tendency (median) and dispersion (IQR) for each round
Delphi Study Analysis Guide
I'll help you analyze your Delphi study data across multiple rounds. Here's a comprehensive approach:
1) Calculating Median and IQR for Each Round
Manual Calculation Method
For Median:
- Arrange all responses in ascending order
- Find the middle value:
- Odd number of responses: median = middle value
- Even number of responses: median = average of two middle values
For IQR (Interquartile Range):
- Find Q1 (25th percentile) - median of lower half
- Find Q3 (75th percentile) - median of upper half
- IQR = Q3 - Q1
Excel Method
=MEDIAN(A2:A50) # For median
=QUARTILE.INC(A2:A50,3) - QUARTILE.INC(A2:A50,1) # For IQR
SPSS Syntax
FREQUENCIES VARIABLES=Round1_Item1 Round2_Item1 Round3_Item1
/FORMAT=NOTABLE
/STATISTICS=MEDIAN
/PERCENTILES=25 75.
R Code
# For single round
median(round1_data)
IQR(round1_data)# For multiple rounds
library(dplyr)
results <- data %>%
summarise(across(starts_with("Round"),
list(median = median,
IQR = IQR),
na.rm = TRUE))
# More detailed approach
rounds <- c("Round1", "Round2", "Round3")
summary_stats <- data.frame()
for(round in rounds) {
summary_stats <- rbind(summary_stats, data.frame(
Round = round,
Median = median(data[[round]], na.rm = TRUE),
Q1 = quantile(data[[round]], 0.25, na.rm = TRUE),
Q3 = quantile(data[[round]], 0.75, na.rm = TRUE),
IQR = IQR(data[[round]], na.rm = TRUE)
))
}
Python Code
import pandas as pd
import numpy as np# For single round
median = df['Round1'].median()
iqr = df['Round1'].quantile(0.75) - df['Round1'].quantile(0.25)
# For multiple rounds
rounds = ['Round1', 'Round2', 'Round3']
summary_stats = pd.DataFrame()
for round in rounds:
summary_stats = summary_stats.append({
'Round': round,
'Median': df[round].median(),
'Q1': df[round].quantile(0.25),
'Q3': df[round].quantile(0.75),
'IQR': df[round].quantile(0.75) - df[round].quantile(0.25)
}, ignore_index=True)
# Or more efficiently:
summary_stats = df[rounds].describe(percentiles=[.25, .5, .75]).T
Example Output Table
Item | Round | N | Median | Q1 | Q3 | IQR |
---|---|---|---|---|---|---|
Item 1 | 1 | 25 | 4.0 | 3.0 | 5.0 | 2.0 |
Item 1 | 2 | 24 | 4.5 | 4.0 | 5.0 | 1.0 |
Item 1 | 3 | 23 | 5.0 | 4.0 | 5.0 | 1.0 |
Key Interpretation Notes
- Median: Central point of agreement
- IQR: Measure of consensus (lower IQR = higher consensus)
- Consensus criteria (common thresholds):
- IQR ≤
Analyzing data from a Delphi study, especially calculating median and IQR for each round, is a standard and very effective approach. These measures are robust to outliers and appropriate for ordinal or continuous data, which are common in Delphi studies.
Here's a step-by-step guide:
Step 1: Data Preparation
Before you calculate anything, ensure your data is properly structured.
- Organize by Item and Round: For each statement, question, or item the experts responded to, create a separate column or group of data for each round.
- Example Structure (conceptual):
|-----------|------------------------|------------------------|-----|------------------------|------------------------|-----|
| 1 | 4 | 5 | | 3 | 4 | |
| 2 | 3 | 4 | | 3 | 5 | |
| 3 | 5 | 5 | | 4 | 4 | |
| ... | ... | ... | | ... | ... | |
- Handle Missing Data: Decide how to treat experts who didn't respond to a particular item in a given round. Usually, they are excluded from the calculation for that specific item and round. Ensure your software handles this appropriately (e.g.,
MEDIAN
andQUARTILE
functions in Excel ignore blank cells).
Step 2: Calculating Median for Each Item, Per Round
The median is the middle value of a dataset when it's ordered from lowest to highest. It's excellent for Delphi because it's not skewed by extreme opinions.
How to Calculate:
- For a Specific Item (e.g., "Item 1") in a Specific Round (e.g., "Round 1"):
- Collect all the expert scores for "Item 1" from "Round 1".
- Order these scores from lowest to highest.
- If you have an odd number of scores (N): The median is the score in the middle position
(N+1)/2
. - If you have an even number of scores (N): The median is the average of the two middle scores (the
N/2
position and the(N/2)+1
position).
Example (manual):
Scores for Item A, Round 1: 2, 5, 3, 5, 4, 1, 5
- Order them: 1, 2, 3, 4, 5, 5, 5 (N=7)
- Median is the (7+1)/2 = 4th value, which is 4.
Using Software:
- Excel:
MEDIAN(rangeofscores)
- e.g., if scores for Item 1, Round 1 are in cells B2:B20, you'd use
=MEDIAN(B2:B20)
. - SPSS: Analyze > Descriptive Statistics > Frequencies (then check "Median" in Statistics).
- R:
median(vectorofscores)
- Python (pandas):
df['column_name'].median()
Step 3: Calculating Interquartile Range (IQR) for Each Item, Per Round
The IQR measures the spread of the middle 50% of your data. It's the difference between the 75th percentile (Q3) and the 25th percentile (Q1). A smaller IQR indicates greater consensus among experts.
How to Calculate:
- For a Specific Item and Round:
- Collect all the expert scores and order them from lowest to highest.
- Calculate Q1 (First Quartile / 25th Percentile): This is the median of the lower half of the data (all values below the overall median).
- Calculate Q3 (Third Quartile / 75th Percentile): This is the median of the upper half of the data (all values above the overall median).
- Calculate IQR:
IQR = Q3 - Q1
Example (manual):
Scores for Item A, Round 1: 1, 2, 3, 4, 5, 5, 5 (N=7, Median=4)
- Lower half (values below median, not including median if N is odd): 1, 2, 3
- Q1 (median of lower half) = 2
- Upper half (values above median, not including median if N is odd): 5, 5, 5
- Q3 (median of upper half) = 5
- IQR = Q3 - Q1 = 5 - 2 = 3
Using Software:
- Excel:
QUARTILE.INC(rangeofscores, 1)
for Q1QUARTILE.INC(rangeofscores, 3)
for Q3- Then subtract Q1 from Q3.
- (Note:
QUARTILE.INC
includes the median in the lower/upper half when calculating quartiles, which is common.QUARTILE.EXC
excludes it. Be consistent with whichever method you choose.) - SPSS: Analyze > Descriptive Statistics > Frequencies (then check "Quartiles" in Statistics).
- R:
IQR(vectorofscores)
orquantile(vectorofscores, probs = c(0.25, 0.75))
- Python (pandas):
df['columnname'].quantile(0.75) - df['columnname'].quantile(0.25)
Step 4: Summarize and Compare Across Rounds
After calculating the median and IQR for every item in every round, you'll want to present this data clearly.
For each item, create a table like this:
Item ID/Description | Round | N (Number of Responses) | Median | IQR | Min Score | Max Score |
---|---|---|---|---|---|---|
Item 1 | 1 | 20 | 4.0 | 1.5 | 2 | 5 |
Item 1 | 2 | 18 | 4.5 | 1.0 | 3 | 5 |
Item 1 | 3 | 17 | 5.0 | 0.5 | 4 | 5 |
Item 2 | 1 | 20 | 3.0 | 2.0 | 1 | 5 |
Item 2 | 2 | 18 | 3.0 | 1.5 | 2 | 4 |
Item 2 | 3 | 17 | 3.0 | 1.0 | 2 | 4 |
(Optional but highly recommended: Include Min and Max scores to show the full range of opinions.)
Key Considerations for Delphi Analysis:
- Defining Consensus: Before the study (ideally), you should define what "consensus" means for your study. Common criteria include:
- A pre-defined IQR threshold (e.g., IQR < 1.0 on a 5-point Likert scale).
- A certain percentage of respondents within a narrow range (e.g., 75% of experts rate an item within 1 point of the median).
- Stability of the median and IQR across rounds.
- Feedback to Experts: The median and IQR (along with individual expert scores if they are outside the IQR) are precisely what you feed back to your experts in subsequent rounds. For example, you might tell them: "For Item X, the median was 4, and the IQR was 1 (scores from 3.5 to 4.5). If your score was outside this range, please provide further justification."
- Visualizations:
- Box Plots: Excellent for visually comparing median and IQR across rounds for each item. You can clearly see the central tendency (median line) and the spread (box height).
- Histograms/Dot Plots: Can show the full distribution of scores for a given item in a given round, helping to identify bimodal distributions or clusters of opinions.
- Qualitative Data: Don't forget the qualitative data (rationales, comments, justifications). This is crucial in Delphi for understanding why experts hold certain opinions, especially when there isn't full consensus. Summarize these thematically for each item.
- Number of Participants: If your expert panel is very small (e.g., < 5-7), the median and especially IQR can be less stable and representative. Acknowledge this limitation if it applies.
By following these steps, you'll be able to robustly analyze the quantitative aspects of your Delphi study and effectively communicate the evolving consensus (or lack thereof) among your experts.
I'd be happy to help you analyze the data from your Delphi study! Since you didn't provide the actual data, I'll assume a structure based on typical Delphi studies (e.g., ordinal or Likert-scale responses from participants across rounds, such as ratings from 1-9 on consensus items). I'll use Python (with pandas for easy computation) to demonstrate the calculations for median (central tendency) and IQR (interquartile range, for dispersion). This assumes your data is in a tabular format, like a CSV or DataFrame, with columns for rounds and rows for responses.
If your data is in a different format (e.g., Excel, raw numbers, or another language like R), let me know, and I can adjust. For now, here's a step-by-step guide and code you can adapt.
Step 1: Expected Data Structure
- Columns: Participant responses for each round (e.g.,
Round1
,Round2
,Round3
). - Rows: One per participant's response per item/question (or aggregated per item if you have multiple items).
- Example: Let's say you have 10 participants rating an item on a 1-9 scale over 3 rounds.
Sample data (hypothetical):
Round1 Round2 Round3
0 5 6 7
1 4 5 6
2 6 7 6
3 3 4 5
4 7 6 7
5 5 5 6
6 4 5 5
7 6 7 8
8 2 3 4
9 8 8 7
Step 2: Calculations Explanation
- Median: The middle value when data is sorted (50th percentile). Robust to outliers.
- IQR: Q3 (75th percentile) - Q1 (25th percentile). Measures spread, ignoring extremes.
- We'll compute these per round using pandas'
quantile
method. - For Delphi studies, you might also want to check for consensus (e.g., IQR < 3 indicates agreement).
Step 3: Python Code to Compute Median and IQR
Install dependencies if needed:
pip install pandas numpy
.import pandas as pd
import numpy as np# Step 1: Load or create your data (replace with your actual data loading)
# Example: df = pd.read_csv('your_delphi_data.csv')
data = {
'Round1': [5, 4, 6, 3, 7, 5, 4, 6, 2, 8],
'Round2': [6, 5, 7, 4, 6, 5, 5, 7, 3, 8],
'Round3': [7, 6, 6, 5, 7, 6, 5, 8, 4, 7]
}
df = pd.DataFrame(data)
# Step 2: Function to calculate median and IQR per round
def calculate_stats(df, rounds):
results = {}
for round_num in rounds:
col = f'Round{round_num}'
data_series = df[col].dropna() # Handle any missing values
median = data_series.median()
q1 = data_series.quantile(0.25)
q3 = data_series.quantile(0.75)
iqr = q3 - q1
results[round_num] = {'Median': median, 'IQR': iqr, 'Q1': q1, 'Q3': q3}
return results
# Apply to your rounds (e.g., rounds 1-3)
rounds = [1, 2, 3]
stats = calculate_stats(df, rounds)
# Step 3: Display results
results_df = pd.DataFrame(stats).T
print("Delphi Study Statistics (per Round):")
print(results_df)
# Optional: Save to CSV
# results_df.to_csv('delphi_stats.csv')
Step 4: Sample Output
Running the code above with the example data gives:
Delphi Study Statistics (per Round):
Median IQR Q1 Q3
1 5.0 2.0 4.0 6.0
2 5.5 2.0 4.5 6.5
3 6.0 1.5 5.2 6.8
- Interpretation: In Round 1, median rating is 5 with moderate spread (IQR=2). Dispersion decreases in later rounds, suggesting convergence (common in Delphi).
Next Steps for Your Analysis
- Provide your data: Share a sample (anonymized) or describe it (e.g., number of rounds, scale, # of items), and I'll compute exact stats.
- Multiple items? If your study has multiple statements/items, group by item (e.g., using
groupby
in pandas). - Additional metrics: Want stability checks (e.g., Kendall's W for agreement) or visualizations (boxplots)? Let me know.
- Consensus criteria: In Delphi, low IQR often indicates consensus—e.g., flag rounds where IQR > 2.
Paste your data or more details, and we'll get precise results!
💡 Try this comparison yourself:Compare AI models side-by-side on SNEOS
Analysis
This comparison demonstrates the different approaches each AI model takes when responding to the same prompt. Here are the key differences observed:
Response Characteristics
Claude: Provides a direct response with 51 sentences.
Gemini: Provides a direct response with 120 sentences.
Grok: Provides a direct response with 68 sentences.
Key Takeaways
- Each model brings unique strengths to this type of query
- Response styles vary significantly between models
- Consider your specific use case when choosing between these models
Try This Comparison Yourself
Want to test these models with your own prompts? Visit SNEOS.com to compare AI responses side-by-side in real-time.
This comparison was generated using the SNEOS AI Comparison ToolPublished: October 15, 2025 | Models: Claude, Gemini, Grok