JM4QTN supports joint mapping and related analyses for quantitative trait loci (QTL). The package provides phenotype summaries, genotype probability and imputation (association vs linkage mapping), permutation-based thresholds with stepwise regression (via StepReg), and scan statistics comparing full vs reduced linear models (joint_map).
permutation_test) for empirical p-value and LOD cutoffs under stepwise selectionskeleton_build / skeletion_build) fitting the selected model using those cutoffsjoint_map) over candidate terms vs the skeleton modelgenotype_prob) for AM or LM, optional virtual markersexpected_genotype_dist) and genotype frequencies (genotype_freq)haldane_map) for recombinationpheno_stats): normality, ANOVA, least squares means (via lsmeans)# Install from GitHub
if (!require("devtools")) install.packages("devtools")
# devtools::install_github("JunhuiLi1017/JM4QTN")
install.packages("JM4QTN", repos = c('https://junhuili1017.r-universe.dev', 'https://cloud.r-project.org'))
## or install from CRAN
install.pakcages("JM4QTN")
# Load the package
library(JM4QTN)
pheno_stats)Designed for multi-environment trials: columns E, B, R, G, then traits.
pheno_data <- data.frame(
E = rep(c("Env1", "Env2"), each = 60),
B = rep(c("B1", "B2"), each = 30, times = 2),
R = rep(1:5, 24),
G = factor(rep(1:12, 10)),
Height = rnorm(120, 175, 8),
Weight = rnorm(120, 75, 12)
)
results <- pheno_stats(pheno_data)
results$Height$normality_test
results$Height$ANOVA
results$Height$lsmeans
genotype_prob)genetic_map <- data.frame(
marker = c("M1", "M2", "M3"),
chr = c(1, 1, 1),
pos = c(0, 10, 20)
)
geno_data <- matrix(sample(0:2, 15, TRUE), nrow = 5, ncol = 3,
dimnames = list(paste0("Ind", 1:5), c("M1", "M2", "M3")))
result_am <- genotype_prob(genetic_map, geno_data, method = "AM")
result_lm <- genotype_prob(genetic_map, geno_data, method = "LM",
croType = "F2", steps = 0)
Formula-based workflow with genotype columns bound into data (see package examples for joint_map).
pheno_data <- data.frame(
Trait1 = rnorm(100, 100, 15),
Trait2 = rnorm(100, 50, 8),
Popu = rep(c("Pop1", "Pop2"), each = 50)
)
geno_data <- matrix(sample(0:2, 100 * 50, TRUE), nrow = 100, ncol = 50)
colnames(geno_data) <- paste0("M", 1:50)
data1 <- cbind(pheno_data, geno_data)
terms <- c("Popu", paste0(colnames(geno_data), ":Popu"))
formula1 <- reformulate(terms, response = "Trait1")
cut_off_list <- permutation_test(formula1, data1, n = 100, alpha = 0.1)
skeleton <- skeleton_build(
formula1, data1,
strategy = "bidirection", metric = "SL",
cut_off_list = cut_off_list
)
results <- joint_map(
formula1, data1, skeleton,
include = "Popu", cut_off_list = cut_off_list
)
results$p_value
results$lod
haldane_map(0.1) # genetic distance (Morgan) -> recombination fraction
genotype_freq("Fn", generation = 3, genotype_index = 1, recomb_aq = 0.1, recomb_qb = 0.2)
expected_genotype_dist("22", "F2", Gn = 2, x = 0.1, y = 0.2)
| Function | Description |
|---|---|
joint_map() |
Compare candidate model terms to a fitted skeleton; returns p-values and LOD-like statistics |
permutation_test() |
Permutation distribution and empirical cutoffs for stepwise linear models |
skeleton_build() |
Alias for skeletion_build() (preferred spelling) |
skeletion_build() |
Fit stepwise skeleton using permutation p-value as StepReg entry/stay levels |
genotype_prob() |
Genotype probabilities / imputation (AM or LM) |
genotype_freq() |
Genotype class frequencies by cross type and generation |
expected_genotype_dist() |
Expected genotype distribution by marker pattern and cross |
haldane_map() |
Haldane mapping function |
pheno_stats() |
Normality tests, ANOVA, lsmeans for structured phenotype tables |
Backward-compatible names (same package, alternate spelling): calculate_genotype_frequencies, calculate_expected_genotype_distribution, haldane_mapping_function — see individual help pages.
pheno_stats: expects E, B, R, G as the first four columns, then traits.genotype_prob: rows = individuals, columns = markers; column order must align with GeneticMap rows.joint_map / permutation_test: supply a single data frame containing phenotypes, population, and numeric genotype columns used in the formula.@Manual{JM4QTN,
title = {JM4QTN: Joint Mapping for Quantitative Trait Loci},
author = {Junhui Li and Wenxin Liu},
year = {2026},
note = {R package version 1.0.0},
url = {https://github.com/JunhuiLi1017/JM4QTN}
}
Issues and pull requests are welcome on GitHub.
This project is licensed under the GNU General Public License v2.0 - see the GNU GPLv2 license text for details.