Use when generating Kaplan-Meier survival curves from tabular survival data containing time, event status, and a precomputed risk group. Supports command-line parameter input, parameter validation, automatic time-unit handling, single-file PDF figure export, and session metadata capture.
70
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill to run Kaplan-Meier survival analysis on a tabular dataset and export a single PDF survival figure.
Rscript scripts/main.R \
--input_file <input_file> \
--output_dir <output_dir> \
--time_col <time_column> \
--status_col <status_column> \
--risk_col <group_column>Rscript is available in the shell.optparse, data.table, survival, survminer, ggplot2.Rscript -e 'install.packages(c("optparse", "data.table", "survival", "survminer", "ggplot2"), repos="https://cloud.r-project.org")'.| Argument | Required | Description |
|---|---|---|
--input_file | Yes | Input data file in CSV or tab-delimited TXT/TSV format |
--output_dir | No | Output directory, default ./KM_Results |
--time_col | No | Survival time column, default futime |
--status_col | No | Event status column, default fustat |
--risk_col | No | Risk group column, default risk_group |
--time_unit | No | Time unit label: year, month, or day, default year |
--auto_convert_days | No | Heuristically convert large time values from days when time_unit is year or month, default true |
--statistics_method | No | logrank or wald, default logrank |
| Argument | Default | Description |
|---|---|---|
--figure_width | 10 | Figure width in inches |
--figure_height | 7 | Figure height in inches |
--figure_family | sans | Font family |
--title_x | Time | X-axis title. If left as default, the script renders Time (<time_unit>) |
--title_y | Survival probability | Y-axis title |
--title_main | empty | Plot title |
--legend_position | top | top, bottom, left, right, none |
--legend_show | true | Whether to show legend |
--legend_title | empty | Legend title |
--line_type | solid | Survival line type: solid, dashed, dotted, dotdash, longdash, twodash |
--line_size | 1 | Survival line width |
--line_colors | #4DBBD5,#E64B35,#00A087,#3C5488,#F39B7F,#8491B4,#91D1C2,#DC0000 | Comma-separated group colors |
--censor_show | true | Whether to show censor markers |
--censor_size | 7 | Censor marker size |
--confidence_show | true | Whether to show confidence interval |
--confidence_alpha | 0.2 | Confidence band transparency |
--risk_table_show | true | Whether to show the risk table |
--risk_table_border | true | Whether to show the risk table border |
--risk_table_panel | false | Whether to show the risk table panel background |
--risk_table_size | 6 | Risk table font size |
--axis_title_size | 12 | Axis title font size |
--axis_text_size | 10 | Axis tick-label font size |
--legend_text_size | 11 | Legend text font size |
.txt inputs must be tab-delimited.time must contain finite non-negative numeric values.status must be coded as 0 for censored and 1 for event.--line_colors must provide at least one color per retained group when you override the default palette.--auto_convert_days true and max(time) > 365, the script assumes the retained time values are in days and converts them to the requested --time_unit when time_unit is year or month.--auto_convert_days true when the source time column is known to be in days.--auto_convert_days to avoid incorrect conversion.--statistics_method wald only supports exactly 2 retained groups; use logrank for multi-group comparisons.--line_type values are rejected before plotting.Example input:
id fustat futime risk_score risk_group GPR161 RIBC2
TCGA-C5-A1M5 1 5.62191780821918 -1.10702407761445 low 2.82521576230566 5.35318564979635
TCGA-VS-A94W 0 3.40547945205479 -0.671246677921865 high 4.26241812321536 4.00802068790173Bundled test datasets:
tests/data/km_sample1.txt: baseline KM example with risk_grouptests/data/km_sample2.txt: alternate cohort for plotting and statistics examplestests/data/km_sample3.txt: additional cohort for validation and repeated testingscripts/main.R with the requested output directory and any optional plot parameters.km-plot.pdf.If you omit --input_file, the script exits with SKILL_MISSING_INPUT.
Expected output:
<output_dir>/
├── km-plot.pdf
└── session_info.txtmax(time) > 365; it does not infer the true source unit from metadata.--auto_convert_days false.time_unit is year or month.km-plot.pdf may not be byte-identical across repeated runs because PDF metadata and graphics-device output can vary.| Need | File |
|---|---|
| Kaplan-Meier method details and interpretation | references/algorithm.md |
| More CLI examples | references/cli-guide.md |
| Error diagnosis | references/troubleshooting.md |
| Main execution entry point | scripts/main.R |
| Sample test data | tests/data/km_sample1.txt, tests/data/km_sample2.txt, tests/data/km_sample3.txt |
Basic Kaplan-Meier analysis:
Rscript scripts/main.R \
--input_file tests/data/km_sample1.txt \
--output_dir tests/output_basicCustom column names:
Rscript scripts/main.R \
--input_file tests/data/km_sample1.txt \
--time_col futime \
--status_col fustat \
--risk_col risk_group \
--output_dir tests/output_custom_columnsCustom plot title:
Rscript scripts/main.R \
--input_file tests/data/km_sample2.txt \
--title_main "Study KM Curve" \
--output_dir tests/output_titleHide confidence interval and risk table:
Rscript scripts/main.R \
--input_file tests/data/km_sample3.txt \
--confidence_show false \
--risk_table_show false \
--output_dir tests/output_simpleRscript scripts/main.R --helpRscript scripts/main.R \
--input_file tests/data/km_sample1.txt \
--output_dir tests/validation_outputAfter running analysis, verify that tests/validation_output/km-plot.pdf exists.
SKILL_FILE_NOT_FOUND: Input file path is wrong or inaccessible.SKILL_MISSING_COLUMNS: A requested time, status, or risk group column is missing.SKILL_INVALID_DATA: Input data is malformed or unsuitable for survival analysis.SKILL_INVALID_DATA: A continuous or near-unique risk column was supplied where a categorical group column is required.SKILL_INVALID_PARAMETER: An argument value is invalid.SKILL_INVALID_PARAMETER: Plotting options such as --line_type or --line_colors are incompatible with the retained groups.SKILL_INSUFFICIENT_DATA: Too few complete observations remain after filtering.SKILL_DEPENDENCY_MISSING: A required R package such as optparse or survival is unavailable.If the issue is not obvious, read references/troubleshooting.md.
f5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.