lm.ridge()在R质量包中表示;svd(X)中的错误:'中的值无限或缺失;x'&引用;

lm.ridge()在R质量包中表示;svd(X)中的错误:'中的值无限或缺失;x'&引用;,r,lm,mass-package,R,Lm,Mass Package,我试图在8*8像素坐标的数据集上运行岭回归。数据集是由不同的手编写的一系列1和0的映射,按64个数值的行排序,对应于8*8像素矩阵 下面的lm.ridge()。问题是什么?我做错了什么 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 ~ .,

我试图在8*8像素坐标的数据集上运行岭回归。数据集是由不同的手编写的一系列1和0的映射,按64个数值的行排序,对应于8*8像素矩阵

下面的
lm.ridge()。问题是什么?我做错了什么

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()
一列零。我实现的解决方案并没有破坏岭回归。我想到了一个更好的实现方法,通过检查列的绝对值之和是否为零(
digits=digits[,这是(colSums(abs(digits))!=0)]


希望这对其他人有所帮助。

我在一篇专栏文章中也遇到了这个错误。