Создание разреженной матрицы и последующий прогностический анализ данных - PullRequest
0 голосов
/ 21 октября 2018

Привет эксперты R здесь,

Я программист Stata, пытающийся изучать R. У меня есть фрейм данных, где каждый идентификатор строки имеет значения против него как df1:

df1 <- data.frame(name=c("John", "Mary", "Joe", "Tim", "Bob", "Pat"),
                  v1=c(14,2,3,4,14,1),
                  v2=c(21,6,19,31,16,5),
                  v3=c(32,10,22,33,27,30),
                  v4=c(42,17,45,39,34,35),
                  v5=c(98,35,66,0,78,99),
                  v6=c(117,49,0,0, 89,186))

значения в столбцах для каждого идентификатора посетителя находятся в диапазоне от 1 до 1000. В основном это дни, когда каждый идентификатор посетителя посещал врача в течение 1000 дней.Некоторые пациенты прекращают посещение после устранения симптомов, а некоторые пациенты продолжают прием лекарств и регулярно посещают их, как это предписано врачом.Некоторые пациенты начинают посещать снова через долгое время, если болезнь рецидивирует.

Я хочу создать разреженную матрицу всех идентификаторов, которые посещал врач от 1 до 1000 дней.Подскажите, пожалуйста, как создать разреженную матрицу.Это довольно просто и прямо в Stata, но я не могу найти путь в R.

Конечные результаты должны быть в форме:

name    1   2   3   4   5   6   10  14  16  17  19  21
John                                1               1
Mary        1               1   1           1       
Joe         1                               1

После создания разреженной матрицы,Я должен предсказать, когда будет следующий визит пациента к врачу.Я планировал создать разреженную матрицу, затем создать вычисляемую переменную разницы между двумя последними посещениями и затем использовать для нее логистическую регрессию.Могут ли быть еще сгенерированы ключевые показатели эффективности для проведения тщательного анализа с использованием только данной информации?Может кто-нибудь предложить, если идея верна или есть лучший способ приблизиться к ней.

Заранее спасибо.

1 Ответ

0 голосов
/ 21 октября 2018

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

library(Matrix)
help(pac=Matrix)
M <-  Matrix(data.matrix( df1[-1]), sparse=TRUE)  # remove character column first
6 x 6 sparse Matrix of class "dgCMatrix"
     v1 v2 v3 v4 v5  v6
[1,] 14 21 32 42 98 117
[2,]  2  6 10 17 35  49
[3,]  3 19 22 45 66   .
[4,]  4 31 33 39  .   .
[5,] 14 16 27 34 78  89
[6,]  1  5 30 35 99 186

Для исправленного вопроса:

# first create index vectors
xix <- c( row(data.matrix(df1[-1]))[!is.na(df1[-1])])
xjy <- c(df1[-1][!is.na(df1[-1])])

Затем укажите значения, отличные от NA, для аргументов индекса и достаточно 1 для заполнения позиций индекса:

 M <- spMatrix(6, 186, i = xix, j=xjy, x=rep(1,length(c( row(data.matrix(df1[-1]))[!is.na(df1[-1])])))) 
> str(M)
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:33] 0 1 2 3 4 5 0 1 2 3 ...
  ..@ j       : int [1:33] 13 1 2 3 13 0 20 5 18 30 ...
  ..@ Dim     : int [1:2] 6 186
  ..@ Dimnames:List of 2
  .. ..$ : NULL
  .. ..$ : NULL
  ..@ x       : num [1:33] 1 1 1 1 1 1 1 1 1 1 ...
  ..@ factors : list()
> M[1:6, 1:25]  # enough output to show success
6 x 25 sparse Matrix of class "dgTMatrix"

[1,] . . . . . . . . . . . . . 1 . . . . . . 1 . . . .
[2,] . 1 . . . 1 . . . 1 . . . . . . 1 . . . . . . . .
[3,] . . 1 . . . . . . . . . . . . . . . 1 . . 1 . . .
[4,] . . . 1 . . . . . . . . . . . . . . . . . . . . .
[5,] . . . . . . . . . . . . . 1 . 1 . . . . . . . . .
[6,] 1 . . . 1 . . . . . . . . . . . . . . . . . . . .
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...