如何在Julia中使用'ModelMatrix'对象进行矩阵乘法?

如何在Julia中使用'ModelMatrix'对象进行矩阵乘法?,matrix,dataframe,julia,Matrix,Dataframe,Julia,我对R中的DataFrame没有经验,实际上我也不理解ModelMatrix 我使用它将DataFrame对象传输到一个“矩阵”中,其中一个额外的列完全由1个值组成。这有助于线性回归。但是,我发现Julia不支持ModelMatrix的矩阵乘法 当我尝试时: # feature is a DataFrames.ModelMatrix{Array{Float64,2}} object println(feature' * feature) 我得到了以下错误: ERROR: LoadError

我对R中的
DataFrame
没有经验,实际上我也不理解
ModelMatrix

我使用它将
DataFrame
对象传输到一个“矩阵”中,其中一个额外的列完全由1个值组成。这有助于线性回归。但是,我发现Julia不支持
ModelMatrix
的矩阵乘法

当我尝试时:

# feature is a DataFrames.ModelMatrix{Array{Float64,2}} object
println(feature' * feature)  
我得到了以下错误:

ERROR: LoadError: MethodError: no method matching *(::DataFrames.ModelMatrix{Array{Float64,2}}, ::DataFrames.ModelMatrix{Array{Float64,2}})
如果试图使用以下方法将
ModelMatrix
转换为
Array

feature_array = convert(Array, feature)
然后出现了一个错误:

ERROR: LoadError: MethodError: Cannot `convert` an object of type DataFrames.ModelMatrix{Array{Float64,2}} to an object of type Array{T,N}
因此,我想知道如何将
ModelMatrix
转换为Julia可以进行矩阵乘法(*)的另一个对象,比如
Array

如果您检查,您可以看到该对象有一个属性
m
,它是基础矩阵的值。您可以使用
mm.m
(其中
mm
ModelMatrix
)将其拉出

例子: 生成
模型矩阵
: 使用
模型矩阵
: 如果选中,则可以看到对象有一个属性
m
,它是基础矩阵的值。您可以使用
mm.m
(其中
mm
ModelMatrix
)将其拉出

例子: 生成
模型矩阵
: 使用
模型矩阵
julia> using DataFrames

julia> df = DataFrame(X = randn(4), Y = randn(4), Z = randn(4))
4×3 DataFrames.DataFrame
│ Row │ X        │ Y          │ Z        │
├─────┼──────────┼────────────┼──────────┤
│ 1   │ 0.766271 │ 0.669007   │ 0.232803 │
│ 2   │ 2.08208  │ 0.239115   │ 0.855068 │
│ 3   │ -1.48009 │ 0.00220079 │ 0.105638 │
│ 4   │ -1.57438 │ 0.650456   │ 0.557467 │

julia> mf = ModelFrame(Z ~ X + Y, df)
DataFrames.ModelFrame(4×3 DataFrames.DataFrame
│ Row │ Z        │ X        │ Y          │
├─────┼──────────┼──────────┼────────────┤
│ 1   │ 0.232803 │ 0.766271 │ 0.669007   │
│ 2   │ 0.855068 │ 2.08208  │ 0.239115   │
│ 3   │ 0.105638 │ -1.48009 │ 0.00220079 │
│ 4   │ 0.557467 │ -1.57438 │ 0.650456   │
...

julia> mm = ModelMatrix(mf)
DataFrames.ModelMatrix{Array{Float64,2}}(4x3 Array{Float64,2}:
 1.0   0.766271  0.669007  
 1.0   2.08208   0.239115  
 1.0  -1.48009   0.00220079
 1.0  -1.57438   0.650456  ,[0,1,2])
julia> m = mm.m
4x3 Array{Float64,2}:
 1.0   0.766271  0.669007  
 1.0   2.08208   0.239115  
 1.0  -1.48009   0.00220079
 1.0  -1.57438   0.650456  

julia> m * rand(3,1)
4x1 Array{Float64,2}:
  1.9474  
  3.08515 
 -0.522879
 -0.371708