[英]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.