残差标准误差:在创建线性模型时,0自由度上的NaN会出现此错误

时间:2018-03-30 00:47:07

标签: r

我正在从数据框创建一个线性模型,其中第6列依赖于第1列到第5列。虽然代码执行正常但是当我打印线性模型的摘要时,我得到以下内容。

Call:
lm(formula = AAPL[, 6] ~ AAPL[, 1] + AAPL[, 2], data = AAPL[, 
    c(1, 2)], subset = 1)

Residuals:
ALL 1 residuals are 0: no residual degrees of freedom!

Coefficients: (2 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)    8.104         NA      NA       NA
AAPL[, 1]         NA         NA      NA       NA
AAPL[, 2]         NA         NA      NA       NA

Residual standard error: NaN on 0 degrees of freedom

我正在使用的代码: -

lm <- lm(train[,6] ~ train[,2]+train[,3]+train[,4]+train[,5]+train[,1] , 1 , data=train)

PS:如果我删除了部分 data = train ,那么这可以在终端中使用,但不能从文件中执行。

除了一个参数之外几乎相同的下一行代码运行完美。下一行是:

lm2 <- lm(train[,6] ~ train[,2]+train[,3]+train[,4]+train[,5]+train[,1] , 5)

1 个答案:

答案 0 :(得分:1)

tl; dr 您(无意中?)指定模型应仅使用第一个观察。让我们来看看这里有什么......

lm <- lm(train[,6] ~ train[,2]+train[,3]+train[,4]+train[,5]+train[,1] , 
  1 , data=train)
  • 第一个参数是公式(很好,虽然(1)使用变量名而不是列更清楚,(2)如果使用数据集中的所有变量来预测,可以使用快捷方式{ {1}}(其中y ~ .是响应变量的名称)
  • 第二个参数是什么意思? R按位置和名称匹配参数。 y的第二个和第三个参数(请参阅lm())是?lmdata。由于您已将subset指定为第三个参数,并且未指定第二个参数,因此R将第二个参数解释为data。让我们看看subset关于?lm参数的内容:

      

    子集:指定观察子集的可选向量         用于拟合过程。

    这意味着R将值subset作为“指定观察子集的向量”,即它将仅训练数据集的第一行

    由于您只使用一个观察值来拟合数据集,1只能插入截距,而不能放入任何其他参数。

顺便说一下,通常不建议使用内置R函数(lm())的名称作为变量名。它大部分时间都可以工作,但是当它不起作用时,产生的错误消息非常混乱。