# Generating the equation of a curve across attributes

Good Day Folks,

I have a dataframe that constructed as

``````DF = Dataframe(Price= rand(70:5:170,10), Col1 = rand(1:1:50,10), Col2 = rand(1:1:30,10), Col3 = rand(1:5:100))
``````

I would like to treat Price as the outcome
variable, and the other attributes as the
inputs so that

Price = [Coefficient1]*Col1 + [Coefficient2]*Col2 + [Coefficient3]*Col3

How might I create the regression line with coefficients?

Thank you,

GLM.jl will do that

1 Like

Or if for some reason you don’t want to use a package:

``````X = [df.Col1 df.Col2 df.Col3]
Y = df.Price

β = X \ Y
``````

and if you want the intercept

``````β = hcat(ones(size(X,1)), X) \ Y
``````
1 Like

Thank you for this.

Could I then apply the coefficient as

``````βCol1 + βCol2 + βCol3 + randn()
``````

This works for polynomial functions?

Thank you again,

`β` is a vector so you can index into it with square brackets `[]` as discussed here. So, after this `β = hcat(ones(size(X,1)), X) \ Y` you could do something like:

``````ŷ(x) = β + sum(β[2:4] .* x)

julia> ŷ([49, 6, 96])
85.40338136038268
``````

The `\` operator in this case is solving a linear system of equations. For polynomials, have a look at `fit` in Polynomials.jl.

As:

``````using GLM
ols = lm(@formula("y ~.", data)
``````

This assume Y is in the left-most column, yes?

Thanks,

Did you read the documentation? That will throw an error.

``````julia> df = DataFrame(y = rand(10), x1 = rand(10), x2 = rand(10));

julia> ols = lm(@formula("y ~ .", df))
ERROR: LoadError: MethodError: no method matching var"@formula"(::LineNumberNode, ::Module, ::String, ::Symbol)
Closest candidates are:
var"@formula"(::LineNumberNode, ::Module, ::Any) at /Users/peterdeffebach/.julia/packages/StatsModels/m1jYD/src/formula.jl:60
in expression starting at REPL:1
``````