簡體   English   中英

R MASS軟件包中的lm.ridge()說“ svd(X)中的錯誤:'x'中的值無窮或缺失”

[英]lm.ridge() in R MASS package saying “Error in svd(X) : infinite or missing values in 'x'”

我正在嘗試對8 * 8像素坐標的數據集運行嶺回歸。 數據集是用不同的手書寫的一系列1和0的映射,按對應於8 * 8像素矩陣的64個數值的行排序。

下面的lm.ridge()函數Error in svd(X) : infinite or missing values in 'x'響應我Error in svd(X) : infinite or missing values in 'x' 問題出在哪里,我在做什么錯?

digits = read.csv("digits.csv", header = FALSE)
library(MASS)
digits$y = rep(0,nrow(digits))
digits$y[1:554] = 1
digits$y[555:1125] = -1
lm =lm.ridge(y ~ ., digits , lambda = 1)

數據集的示例,因為我無法在此處弄清楚如何上傳csv。

'data.frame':   1125 obs. of  65 variables:
 $ V1 : int  0 0 0 0 0 0 0 0 0 0 ...
 $ V2 : int  16 0 0 16 0 0 0 0 0 0 ...
 $ V3 : int  96 160 240 160 32 128 112 160 32 0 ...
 $ V4 : int  240 255 32 240 208 255 224 128 192 128 ...
 $ V5 : int  192 96 224 128 144 128 96 176 176 192 ...
.
.
.
$ V62: int  16 48 0 0 64 80 0 0 128 144 ...
$ V63: int  0 0 0 0 0 0 0 0 0 16 ...
$ V64: int  0 0 0 0 0 0 0 0 0 0 ...
$ y  : num  1 1 1 1 1 1 1 1 1 1 ...

我知道這可能與包含全零的列(例如V1)有關。 我目前已通過加總列並刪除總和為零的列來刪除此列,但我想知道是否a)有一種更簡潔的方法可以做到這一點,b)是否會破壞我的嶺回歸分析。

干杯。

據我了解,您不能為lm.ridge()提供零列。 我實施的解決方案並未破壞ridge回歸。 我想到了一種更好的方法,通過檢查列的絕對值之和是否為零( digits = digits[,which(colSums(abs(digits)) !=0)] )。

希望這對某人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM