Julia简单线性回归遇MethodError:无匹配fit方法问题
问题
运行自回归线性回归代码时触发错误:
ERROR: MethodError: no method matching fit(::Type{LinearModel}, ::Matrix{Float64}, ::Matrix{Float64}, ::Nothing)
代码如下:
using XLSX, DataFrames, GLM, StatsBase Quakes = DataFrame(XLSX.readtable("/Users/jjtan/Downloads/QUAKE.xlsx", "quakes")) for i in 1:98 Quakes[!, Symbol("t", i)] = [zeros(i); Quakes[1:end-i, :x]] end ols = lm(@formula(x ~ t1), Quakes)
注:Quakes是99×99的DataFrame,且GLM官方示例可正常运行:
using DataFrames, GLM data = DataFrame(X=[1,2,3], Y=[2,4,7]) ols = lm(@formula(Y ~ X), data)
尝试df.var和:var两种变量引用方式均无效,无法定位差异原因。
解决方案
1. 更新GLM到最新版本
该错误多由旧版GLM的方法签名不兼容导致,执行以下命令升级:
] add GLM@latest
2. 改用StatsBase.lag生成滞后列
手动拼接向量易引发隐性类型或长度问题,用lag函数更可靠:
using XLSX, DataFrames, GLM, StatsBase Quakes = DataFrame(XLSX.readtable("/Users/jjtan/Downloads/QUAKE.xlsx", "quakes")) for i in 1:98 Quakes[!, Symbol("t", i)] = lag(Quakes.x, i; default=0.0) end ols = lm(@formula(x ~ t1), Quakes)
3. 校验数据类型与缺失值
- 确认
x列为数值类型:eltype(Quakes.x) # 应为Float64或Int64,否则执行转换 Quakes.x = Vector{Float64}(Quakes.x) - 检查并处理缺失值:
describe(Quakes) # 查看x、t1列的缺失情况 # 若存在缺失,添加skipmissing参数 ols = lm(@formula(x ~ t1), Quakes; skipmissing=true)
内容的提问来源于stack exchange,提问作者jtancp
相关产品推荐
相关产品推荐

