You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:10:30