【问题标题】:Error in quantile.default(resid) : missing values and NaN's not allowedquantile.default(resid) 中的错误:不允许缺少值和 NaN
【发布时间】:2018-03-27 18:04:43
【问题描述】:

在给定特定数量的行和列的情况下,我试图预测模型训练(sklearn 的线性回归)所需的时间。我创建了其他功能,例如通过记录行数和列数的平方。

我已粘贴数据here。如您所见,数据集没有缺失值或 NaN。

我尝试使用以下代码在 R 中使用 lm 函数运行线性回归模型 -

library(data.table)
df = fread(linreg_df_edited.csv)
lrmodel <- lm(time ~ rows + columns + volume + rows_log + columns_log + volume_log + row_sq + col_sq, data = df)

但是当我使用 summary(lrmodel) 请求模型摘要时,我收到以下错误

Error in quantile.default(resid) : 
  missing values and NaN's not allowed if 'na.rm' is FALSE

我的数据集没有任何缺失值,但我在设置na.action=na.omit后仍然尝试并重建了模型

lrmodel <- lm(time ~ rows + columns + volume + rows_log + columns_log + volume_log + row_sq + col_sq, df, na.action=na.omit)

我仍然遇到同样的错误。我想不通。我想也许 a 列被读取为字符变量。但事实并非如此。

知道为什么会这样吗?

【问题讨论】:

    标签: r linear-regression


    【解决方案1】:

    不要尝试一次对所有转换进行建模。您的电话是:

    model <- lm(time ~ rows + columns + volume + rows_log + columns_log + volume_log + row_sq + col_sq, data = df)
    

    改为:

    model_lin <- lm(time ~ rows + columns + volume, data = df)
    model_log <- lm(time ~ rows_log + columns_log + volume_log, data = df)
    model_sq <- lm(time ~ row_sq + col_sq, data = df)
    

    然后你会发现方块是问题所在。他们正在生成 NaN 值。

    【讨论】:

    • 得到了问题。出于某种原因,R 正在错误地读取 row_sq 的数据。您是否还通过除以 1000 并重新运行模型来获得 row_sq' column after reading in the data? I scaled the row_sq' 数据中 10^-15 顺序的条目。现在可以了。
    • @ClockSlave 哦,好!很高兴您能够以这种方式找到问题!是的,同样的缩放在这里也有效。如果它告诉您问题出在哪里,请随意将其标记为答案:)
    • 您在编辑中添加的解释略有不正确(可能)。我不得不更改 Excel 中的数据,因为 r 一直读错。这可能是因为原始值太大。从源头缩小它们并将其读回可以解决问题。没有更多错误。
    • @ClockSlave 这个改变解决了我的问题。试过了还是不行?
    • 不。您在此处发布的数据是正确的。当我读入数据时,我得到了这个-imgur.com/a/m6NzW。请参阅row_sq 列。我假设可能是因为值太大。所以我把它们缩小了(div 1000)并再次读取数据。 R在缩放操作后正确读取数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2021-11-27
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多