在Julia中对DataFrame执行线性回归遇MethodError问题求助
解决方案
问题根源
从你的DataFrame截图可知,第三列是以逗号作为小数点分隔符的字符串类型,直接转换为矩阵会生成Matrix{Any}(混合整数与字符串),导致矩阵运算时触发MethodError: no method matching oneunit(::Type{Any})。直接尝试将列转为Int64/Float64失败,是因为字符串列无法直接解析为数值。
步骤1:修复数值列类型
先将第三列的逗号替换为小数点,再解析为Float64:
# 按列位置处理(第三列) df[!, 3] = replace.(df[!, 3], "," => ".") .|> x -> parse(Float64, x) # 或按列名处理(假设第三列名为:y) # df[!, :y] = replace.(df[!, :y], "," => ".") .|> x -> parse(Float64, x)
步骤2:执行线性回归
修复类型后,即可正常构建矩阵并计算回归系数:
# 构造包含自变量和截距项的X矩阵 X = hcat(df[!, 2], ones(nrow(df))) Y = df[!, 3] # 计算系数(斜率在前,截距在后) coeff_pred = X \ Y
更简洁的方案:使用StatsModels包
推荐用专业统计包GLM和StatsModels来处理,代码更易读且不易出错:
using StatsModels, GLM # 先修复列类型(同步骤1) df[!, 3] = replace.(df[!, 3], "," => ".") .|> x -> parse(Float64, x) # 拟合线性回归模型(替换:x和:y为实际列名) model = lm(@formula(y ~ x), df) # 查看回归系数 coef(model)
内容的提问来源于stack exchange,提问作者Shona O'Sullivan
相关产品推荐
相关产品推荐

