File: core_test.go

package info (click to toggle)
golang-github-kshedden-statmodel 0.0~git20210519.ee97d3e-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 892 kB
  • sloc: makefile: 3
file content (95 lines) | stat: -rw-r--r-- 1,713 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package statmodel

import (
	"testing"

	"gonum.org/v1/gonum/floats"
)

func data1() ([]string, [][]Dtype) {
	x := [][]Dtype{
		{0, 1, 3, 2, 1, 1, 0},
		{1, 1, 1, 1, 1, 1, 1},
		{4, 1, -1, 3, 5, -5, 3},
	}
	return []string{"y", "x1", "x2"}, x
}

func data1b() ([]string, [][]Dtype) {
	x := [][]Dtype{
		{0, 1, 3, 2, 1, 1, 0},
		{1, 1, 1, 1, 1, 1, 1},
		{8, 2, -2, 6, 10, -10, 6},
	}
	return []string{"y", "x1", "x2"}, x
}

func data2() ([]string, [][]Dtype) {
	x := [][]Dtype{
		{0, 0, 1, 0, 1, 0, 0},
		{1, 1, 1, 1, 1, 1, 1},
		{4, 1, -1, 3, 5, -5, 3},
		{1, -1, 1, 1, 2, 5, -1},
	}
	return []string{"y", "x1", "x2", "x3"}, x
}

// A mock model for testing
type Mock struct {
	data [][]Dtype
	xpos []int
}

func (m *Mock) Dataset() [][]Dtype {
	return m.data
}

func (m *Mock) LogLike(params Parameter, exact bool) float64 {
	return 0
}

func (m *Mock) Score(params Parameter, score []float64) {
}

func (m *Mock) Hessian(params Parameter, ht HessType, score []float64) {
}

func (m *Mock) NumParams() int {
	return len(m.xpos)
}

func (m *Mock) NumObs() int {
	return len(m.data[0])
}

func (m *Mock) Xpos() []int {
	return m.xpos
}

func TestResult1(t *testing.T) {

	_, da := data1()
	model := &Mock{
		data: da,
		xpos: []int{1, 2},
	}

	params := []float64{1, 2}
	xnames := []string{"x1", "x2"}
	vcov := []float64{0, 0, 0, 0}

	r := NewBaseResults(model, 0, params, xnames, vcov)

	// Test fitted values on the training data.
	fv := []float64{9, 3, -1, 7, 11, -9, 7}
	if !floats.Equal(fv, r.FittedValues(nil)) {
		t.Fail()
	}

	// Test fitted values when passing a new data stream.
	_, da2 := data1b()
	fv = []float64{17, 5, -3, 13, 21, -19, 13}
	if !floats.Equal(fv, r.FittedValues(da2)) {
		t.Fail()
	}
}