我试图在Julia中进行线性回归。 我有一个10列的数据框。前9列是预测变量 我将其称为X,最后一列是响应变量,我称之为Y
我键入了linreg(X, Y)
但是我收到一条错误消息
linreg没有匹配DataFrame和DataArray Float的方法。
我想知道如何解决这个问题。 我在考虑将X转换为数据数组
我试过convert(X, Array)
但是这也引发了一个错误:
'转换没有方法匹配转换'
有没有人有任何建议
答案 0 :(得分:14)
如果您已将数据放在DataFrame
中,则应查看GLM.jl包。
具体来说,如果您是R用户,lm
函数应该执行您想要的操作并且感觉非常熟悉。
如果您发布更多代码(可能是DataFrame
商店X
和Y
中的哪些列),我们可以为您提供更多帮助。
答案 1 :(得分:3)
您只是使用convert
错误。它的正确语法为convert(T, x)
:将x
转换为T
类型的值。
所以基本上你需要这样做:
linreg(convert(Array,X),convert(Array,Y))
它应该有用。
答案 2 :(得分:3)
更新:在对数组执行标量添加时,必须在Julia 1.0中使用
dot
运算符。即y = m*x .+ b
您也可以使用简单的线性代数进行线性回归。 这是一个例子:
# Linear Algebra style
# For single linear regresion y= mx .+ b
m = 3.3; b = 2; x = rand(100,1)
y = m * x .+ b
# add noise
yn= y + randn(size(y)) * 0.5
# regression
X = zeros(100,2); X[:,1] = x; X[:,2] = 1.0
coeff_pred = X\yn
slope = round(coeff_pred[1], 2)
intercept = round(coeff_pred[2], 2)
println("The real slope is $m, and the predicted slope is $slope")
println("The real intercept is $b, and the predicted slope is $intercept")