@@ -320,6 +320,32 @@ func (r *Regression) Run() (*Model, error) {
320
320
// 回帰の標準誤差(推定値の標準偏差)
321
321
standardError := math .Sqrt (residualsVariance )
322
322
323
+ // 許容度 及び 分散拡大係数(VIF)
324
+ coeffsTolerances , coeffsVIFs := make ([]float64 , 0 , bm .numOfExplanatoryVars ), make ([]float64 , 0 , bm .numOfExplanatoryVars )
325
+ if bm .numOfExplanatoryVars < 2 {
326
+ coeffsTolerances , coeffsVIFs = make ([]float64 , bm .numOfExplanatoryVars ), make ([]float64 , bm .numOfExplanatoryVars )
327
+ } else {
328
+ for idx , explanatoryVars := range r .explanatoryVarsMatrix {
329
+ if _ , ok := r .disregardingExplanatoryVarsSet [idx ]; ok {
330
+ continue
331
+ }
332
+ r .disregardingExplanatoryVarsSet [idx ] = struct {}{}
333
+ bm , err := (& Regression {
334
+ objectiveVars : explanatoryVars ,
335
+ explanatoryVarsMatrix : r .explanatoryVarsMatrix ,
336
+ disregardingExplanatoryVarsSet : r .disregardingExplanatoryVarsSet ,
337
+ }).run ()
338
+ if err != nil {
339
+ panic (err ) // Error should never happens
340
+ }
341
+ delete (r .disregardingExplanatoryVarsSet , idx )
342
+
343
+ tolerance := 1 - bm .r2
344
+ coeffsTolerances = append (coeffsTolerances , tolerance )
345
+ coeffsVIFs = append (coeffsVIFs , 1 / tolerance )
346
+ }
347
+ }
348
+
323
349
// 説明変数の観測値の残差の行列
324
350
explanatoryVarsResidualsDense := mat .NewDense (bm .numOfObservations , bm .numOfExplanatoryVars , nil )
325
351
explanatoryVarsResidualsDense .Apply (func (i , j int , v float64 ) float64 {
@@ -441,32 +467,6 @@ func (r *Regression) Run() (*Model, error) {
441
467
return corrs
442
468
}()
443
469
444
- // 許容度 及び 分散拡大係数(VIF)
445
- coeffsTolerances , coeffsVIFs := make ([]float64 , 0 , bm .numOfExplanatoryVars ), make ([]float64 , 0 , bm .numOfExplanatoryVars )
446
- if bm .numOfExplanatoryVars < 2 {
447
- coeffsTolerances , coeffsVIFs = make ([]float64 , bm .numOfExplanatoryVars ), make ([]float64 , bm .numOfExplanatoryVars )
448
- } else {
449
- for idx , explanatoryVars := range r .explanatoryVarsMatrix {
450
- if _ , ok := r .disregardingExplanatoryVarsSet [idx ]; ok {
451
- continue
452
- }
453
- r .disregardingExplanatoryVarsSet [idx ] = struct {}{}
454
- bm , err := (& Regression {
455
- objectiveVars : explanatoryVars ,
456
- explanatoryVarsMatrix : r .explanatoryVarsMatrix ,
457
- disregardingExplanatoryVarsSet : r .disregardingExplanatoryVarsSet ,
458
- }).run ()
459
- if err != nil {
460
- panic (err ) // Error should never happens
461
- }
462
- delete (r .disregardingExplanatoryVarsSet , idx )
463
-
464
- tolerance := 1 - bm .r2
465
- coeffsTolerances = append (coeffsTolerances , tolerance )
466
- coeffsVIFs = append (coeffsVIFs , 1 / tolerance )
467
- }
468
- }
469
-
470
470
logger .Info .Printf ("Completed: Number of explanatory variables = %d" , bm .numOfExplanatoryVars )
471
471
472
472
return newModel (& rawModel {
0 commit comments