为何使用manova()与summary.aov()无法获取P值?
问题:R中manova()调用summary.aov()仅输出自由度、平方和与均方,无F统计量和P值
数据情况
数据为各亚型对应临床症状的病例均值,数据框如下:
subtype lymphocytosis anemia thrombocytopenia eosinophilia hypercalcemia hyperglobulinemia 1 MBC 0.60 0.18 0.17 0.02 0.01 0.04 2 SBC 0.25 0.18 0.14 0.03 0.02 0.12 3 BCLL 1.00 0.29 0.18 0.08 0.03 0.21 neutrophilia neutropenia lymphadenopathy_peripheral lymphadenopathy_visceral splenomegaly 1 0.23 0.02 1.00 0.65 0.60 2 0.22 0.04 0.99 0.62 0.49 3 0.23 0.04 0.40 0.25 0.49 hepatomegaly pleural_effusion peritoneal_effusion intestinal_mass mediastinal_mass pulmonary_mass 1 0.41 0.02 0.05 0.10 0.09 0.22 2 0.37 0.03 0.05 0.17 0.12 0.22 3 0.27 0.01 0.04 0.25 0.03 0.25
使用的代码
cs_comp_try <- manova(cbind(lymphocytosis, anemia, thrombocytopenia, eosinophilia, hypercalcemia, hyperglobulinemia, neutrophilia, neutropenia, lymphadenopathy_peripheral, lymphadenopathy_visceral, splenomegaly, hepatomegaly, pleural_effusion, peritoneal_effusion, intestinal_mass, mediastinal_mass, pulmonary_mass) ~ subtype, data = cs_comp) summary(cs_comp_try) summary.aov(cs_comp_try)
运行结果
调用summary.aov()仅输出以下内容,无F统计量和P值:
Response peritoneal_effusion : Df Sum Sq Mean Sq subtype 2 6.6667e-05 3.3333e-05 Response intestinal_mass : Df Sum Sq Mean Sq subtype 2 0.011267 0.0056333 Response mediastinal_mass : Df Sum Sq Mean Sq subtype 2 0.0042 0.0021 Response pulmonary_mass : Df Sum Sq Mean Sq subtype 2 6e-04 3e-04
原因与解决方法
- 核心原因:你的数据每个亚型仅1个均值样本(每组n=1),导致残差自由度为0(总自由度=样本数-1=3-1=2,组间自由度=组数-1=3-1=2,残差自由度=总自由度-组间自由度=0)。F统计量的计算需要残差均方作为分母(F=组间均方/残差均方),分母为0时无法计算,因此不会输出F值和P值。
- 解决方法:必须使用个体病例的原始数据而非均值数据。方差分析(包括MANOVA)依赖组内的变异来估计误差项,均值数据丢失了组内个体差异的信息,无法完成统计检验。
内容的提问来源于stack exchange,提问作者mjthome
相关产品推荐
相关产品推荐

