我正在从数据框创建一个线性模型,其中第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)
答案 0 :(得分:1)
tl; dr 您(无意中?)指定模型应仅使用第一个观察。让我们来看看这里有什么......
lm <- lm(train[,6] ~ train[,2]+train[,3]+train[,4]+train[,5]+train[,1] ,
1 , data=train)
y ~ .
是响应变量的名称)第二个参数是什么意思? R按位置和名称匹配参数。 y
的第二个和第三个参数(请参阅lm()
)是?lm
和data
。由于您已将subset
指定为第三个参数,并且未指定第二个参数,因此R将第二个参数解释为data
。让我们看看subset
关于?lm
参数的内容:
子集:指定观察子集的可选向量 用于拟合过程。
这意味着R将值subset
作为“指定观察子集的向量”,即它将仅训练数据集的第一行。
由于您只使用一个观察值来拟合数据集,1
只能插入截距,而不能放入任何其他参数。
顺便说一下,通常不建议使用内置R函数(lm()
)的名称作为变量名。它大部分时间都可以工作,但是当它不起作用时,产生的错误消息非常混乱。