2016-10-30 691 views
2

我在mlbench包中使用數據集BreastCancer,並且我試圖將以下矩陣乘法作爲邏輯迴歸的一部分。R中的矩陣乘法:需要數值/複數矩陣/向量參數

我得到的特徵在第10列,並創建名爲THETA參數向量:

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 

我是否需要使用首先是?因爲我看到在X的值(如String)用雙引號

編輯: @Zheyuan李:

我的問題是你指的是一個不同的,因爲它不具有相同的問題因爲我有:numeric/complex matrix/vector arguments。請重新打開問題。謝謝

+0

這個問題與你提到的問題是不同的@Zheyuan Li,因爲它沒有像我那樣的問題:'數字/複數矩陣/向量參數'。請重新打開問題。謝謝 – TonyGW

+0

以後我可以擔心'ID'列,或者我可以簡單地刪除它。底線是我根本沒有'ID'列的問題。 – TonyGW

+0

我不確定你的代碼是幹什麼的,但是由於運行你的代碼,我在X2中得到了一個完全的bizzare數據集。儘管如此,它並沒有解決我最初的問題。 – 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

其實這條線也適合我:'as。矩陣(sapply(dat,as.numeric))'。謝謝你的幫助:)我也是中國人:) – TonyGW

+0

在允許矩陣/向量乘法方面,這是有效的:'as.matrix(sapply(dat,as.numeric))' – TonyGW