【问题标题】:lm.ridge() in R MASS package saying "Error in svd(X) : infinite or missing values in 'x'"R MASS 包中的 lm.ridge() 说“svd(X) 中的错误:'x' 中的值无限或缺失”
【发布时间】:2016-02-23 17:26:20
【问题描述】:

我正在尝试在 8*8 像素坐标的数据集上运行岭回归。数据集是由不同手书写的一系列 1 和 0 组成的图,排列为 64 个数值行,对应 8*8 像素矩阵。

下面的lm.ridge() 函数用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) 这是否会破坏我的岭回归分析。

干杯。

【问题讨论】:

    标签: r lm mass-package


    【解决方案1】:

    据我了解,您不能给lm.ridge() 提供一列零。我实施的解决方案并没有破坏岭回归。我想了一个更好的方法来实现它,通过检查列的绝对值之和是否为零(digits = digits[,which(colSums(abs(digits)) !=0)])。

    希望这对某人有所帮助。

    【讨论】:

    • 我也收到了这个错误,一列都是一列。
    猜你喜欢
    • 2023-03-08
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2011-12-04
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多