2016-10-30 1 views
2

Я использую набор данных BreastCancer в пакете mlbench, и я пытаюсь сделать следующее умножение матрицы как часть логистической регрессии.Матричное умножение в R: требует числовых/сложных матричных/векторных аргументов

Я получил особенности в первые 10 столбцов и создать вектор параметров, называемых тета:

X <- BreastCancer[,1:10] 
theta <- data.frame(rep(1,10)) 

Тогда я сделал следующее матричное умножение:

constant <- as.matrix(X) %*% as.vector(theta[,1]) 

Однако, я получил следующая ошибка:

Error in as.matrix(X) %*% as.vector(theta[, 1]) : 
    requires numeric/complex matrix/vector arguments 

Нужно ли использовать матрицу для двойного использования, используя as.numeric(X)? как я вижу значение в X, как строки в двойных кавычках

Edit: @Zheyuan Li:

Мой вопрос отличается от той, вы ссылаетесь, так как он не имеет такой же вопрос как у меня: numeric/complex matrix/vector arguments. Повторно закройте вопрос. Спасибо

+0

вопрос отличается от того, о котором вы говорите, @Zheyuan Li, поскольку у него нет такой же проблемы, как у меня: 'числовые/сложные матрицы/векторные аргументы'. Повторно закройте вопрос. Спасибо – TonyGW

+0

Я могу беспокоиться о столбце 'ID' позже, или я могу просто отказаться от него. Суть в том, что у меня нет проблемы с столбцом «ID» вообще. – TonyGW

+0

Я не уверен, что делает ваш код, но у меня есть полный набор данных bizzare в X2 в результате запуска вашего кода. Однако это не решает мою оригинальную проблему. – TonyGW

ответ

4

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

## drop incomplete data with NA 
dat <- na.omit(BreastCancer) 

## data type convert for variables other than `ID` and `Class` 
dat[2:10] <- lapply(dat[2:10], function (x) as.numeric(levels(x)))[x]) 

## get the matrix 
X <- data.matrix(dat[2:10]) 

## some possible matrix-vector multiplications 
beta <- runif(9) 
yhat <- X %*% beta 

## add prediction back to data frame 
dat$prediction <- yhat 

Есть несколько вещей, которые я не понимаю, хотя ... Почему бы вам не использовать predict, если у вас есть модель регрессии? Вы дали объяснение, но я этого не понимаю. В любом случае, вышеупомянутое должно быть всеобъемлющим. Если вам нужен фрейм данных, вот оно; если вы хотите использовать умножение матричных векторов на законные числовые столбцы, продолжайте; если вы хотите переложить прогноз на фрейм данных, это также делается.


This line also worked for me: as.matrix(sapply(dat, as.numeric))

Похоже, вам повезло. У набора данных есть уровни факторов, такие же, как и числовые значения. В общем, преобразование коэффициента в числовое должно использовать метод, который я сделал. Сравнить

f <- gl(4, 2, labels = c(12.3, 0.5, 2.9, -11.1)) 
#[1] 12.3 12.3 0.5 0.5 2.9 2.9 -11.1 -11.1 
#Levels: 12.3 0.5 2.9 -11.1 

as.numeric(f) 
#[1] 1 1 2 2 3 3 4 4 

as.numeric(levels(f))[f] 
#[1] 12.3 12.3 0.5 0.5 2.9 2.9 -11.1 -11.1 

Прочтите около ?factor.

+0

фактически, эта линия также работал для меня: 'как.matrix (sapply (dat, as.numeric)) '. Спасибо за помощь :) 我 也是 中国 人 :) – TonyGW

+0

С точки зрения разрешения матричного/векторного умножения это работает: 'as.matrix (sapply (dat, as.numeric))' – TonyGW

Смежные вопросы