在R中使用var.test进行F检验时遇is.finite(x)列表类型错误
解决
var.test()报错:default method not implemented for type 'list' 这个问题其实和ggplot2完全不相关——你找的那个线程是ggmosaic的专属问题,和你用var.test()的场景八竿子打不着,所以重装ggplot2当然解决不了啦!
错误原因
var.test()(方差齐性F检验)的输入要求是数值向量(或者公式形式的分组数据),但你传入的fit1和fit2是模型拟合后的结果对象(比如lm()返回的就是一个列表结构),函数没法直接处理列表类型,才会抛出这个错误。
正确的做法
你需要先从拟合好的模型中提取残差向量,再把残差传给var.test():
- 提取残差:
- 用
resid(fit1)或者fit1$residuals都可以获取模型的残差(以线性模型为例)
- 用
- 执行F检验:
# 提取两个模型的残差后做检验 var.test(resid(fit1), resid(fit2))
完整示例
# 模拟数据并拟合两个线性模型 set.seed(123) x <- rnorm(50) y1 <- 1.5*x + rnorm(50, sd = 1) y2 <- 2*x + rnorm(50, sd = 1.8) fit1 <- lm(y1 ~ x) fit2 <- lm(y2 ~ x) # 正确执行方差齐性F检验 var.test(resid(fit1), resid(fit2))
如果你的模型不是线性模型(比如GLM),记得根据模型类型选择合适的残差类型(比如皮尔逊残差resid(fit1, type = "pearson")),再传入检验函数。
内容的提问来源于stack exchange,提问作者C L
相关产品推荐
相关产品推荐

