-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathroldsis.r
68 lines (50 loc) · 1.9 KB
/
roldsis.r
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
### RoLDSIS functions
### This program is part of RoLDSIS
###
### Copyright (C) 2020 Rafael Laboissière
### Copyright (C) 2020 Adrielle de Carvalho Santana
### Copyright (C) 2020 Hani Camille Yehia
###
### This program is free software: you can redistribute it and/or modify it
### under the terms of the GNU General Public License as published by the
### Free Software Foundation, either version 3 of the License, or (at your
### option) any later version.
###
### This program is distributed in the hope that it will be useful, but
### WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
### General Public License for more details.
###
### You should have received a copy of the GNU General Public License along
### with this program. If not, see <http://www.gnu.org/licenses/>.
### * Load the local library
source ("geom-lib.r")
### * Regression function
roldsis <- function (data.points, output) {
## ** Get the subspace embeding the mean responses for each stimulus
axes <- sub.space (data.points)
## ** Compute the subject's grand mean
M <- colMeans (data.points)
B <- cbind (project (data.points, M, axes), rep (1, nrow (data.points)))
sol <- solve (B, output)
dir <- axes %*% sol [1 : (length (sol) - 1)]
dir <- dir / sqrt (sum (dir ^ 2))
pred <- B %*% sol
proj <- (data.points %*% dir) %*% t (dir)
for (i in seq (1, nrow (proj)))
proj [i, ] <- M + proj [i, ]
list (direction = dir,
projection = proj,
prediction = pred,
solution = sol,
mean = M,
axes = axes)
}
### * Prediction function
predict.roldsis <- function (sol, newx) {
B <- cbind (project (newx, sol$mean, sol$axes), rep (1, nrow (newx)))
return (B %*% sol$solution)
}
### * Coefficients function
coefficients.roldsis <- function (sol)
return (sol$direction)