Создание прогнозов с помощью набора бета-версий в R - PullRequest
0 голосов
/ 02 ноября 2018

Предположим, у меня есть бета-тесты с использованием MCMC. Для каждого ряда у меня есть набор бета-версий. Можно ли превратить этот ряд бета-версий в модельный объект в R, чтобы я мог использовать функцию предсказания ()? В частности, некоторые бета-версии предназначены для категориальных случайных величин, поэтому, если я захочу применить бета-версии вручную, это будет сложно.

Я думаю, чтобы сделать это вручную, мне придется превратить каждую категориальную переменную в несколько столбцов индикаторных переменных.

1 Ответ

0 голосов
/ 02 ноября 2018

Это можно сделать, построив матрицу модели и умножив ее на вектор коэффициентов.

Предположим, это наша модельная формула. Species является категориальной переменной:

> m = Sepal.Length~Petal.Length+Petal.Width+Species

Теперь создайте матрицу модели из этого и данных:

> mm = model.matrix(m, data=iris)
> head(mm)
  (Intercept) Petal.Length Petal.Width Speciesversicolor Speciesvirginica
1           1          1.4         0.2                 0                0
2           1          1.4         0.2                 0                0
3           1          1.3         0.2                 0                0
4           1          1.5         0.2                 0                0
5           1          1.4         0.2                 0                0
6           1          1.7         0.4                 0                0

У Species есть три уровня, и вы можете видеть, что все первые несколько строк имеют нули для столбцов двух видов, поэтому они относятся к другим видам.

Чтобы делать предсказания для некоторого набора из 5 коэффициентов, они должны быть в том же порядке, что и строки, и с одинаковым «ограничением», т.е. кодирование видов выполняется одинаково с двумя фиктивными переменными. Таким образом, ваши «бета» значения должны выглядеть так же, как и коэффициенты, которые вы получите от lm данных:

> mfit = lm(m, data=iris)
> mfit$coefficients
      (Intercept)      Petal.Length       Petal.Width Speciesversicolor 
      3.682982011       0.905945867      -0.005995401      -1.598361502 
 Speciesvirginica 
     -2.112646781 

Теперь вы можете получать прогнозы для любого набора коэффициентов путем умножения матриц:

> head(mm %*% mfit$coefficients)
      [,1]
1 4.950107
2 4.950107
3 4.859513
4 5.040702
5 4.950107
6 5.220692

Если я все сделал правильно, эти значения должны равняться выводу predict:

> head(predict(mfit))
       1        2        3        4        5        6 
4.950107 4.950107 4.859513 5.040702 4.950107 5.220692 

и если ваши коэффициенты отличаются, вы должны получить разные прогнозы с помощью умножения матриц:

> head(mm %*% c(0,1,.2,.2,.4))
  [,1]
1 1.44
2 1.44
3 1.34
4 1.54
5 1.44
6 1.78
...