Используя ваши данные,
day1 <- c(1,3,1)
day2 <- c(2,2,1)
day3 <- c(3,1,5)
output.intercept <- c(0,4,-1.66667)
output.slope <- c(1,-1,2)
dat <- data.frame(day1,day2,day3)
Я думаю, вам нужно что-то вроде этого:
fits <- lm.fit(cbind(1, seq_len(nrow(dat))), t(dat))
t(coef(fits))
Который дает
R> t(coef(fits))
x1 x2
[1,] 0.000 1
[2,] 4.000 -1
[3,] -1.667 2
Их можно добавить в dat
вот так
dat <- cbind(dat, t(coef(fits)))
names(dat)[-(1:3)] <- c("Intercept","Slope")
R> dat
day1 day2 day3 Intercept Slope
1 1 2 3 0.000 1
2 3 2 1 4.000 -1
3 1 1 5 -1.667 2
Возможно, было бы проще хранить данные другим способом, используя столбцы в качестве временных рядов, а не строки, если у вас есть какой-либо контроль над первоначальным расположением данных, поскольку это позволило бы избежать необходимости транспонировать большую матрицу при подгонке с помощью lm.fit()
. В идеале вы хотите, чтобы данные изначально были расположены следующим образом:
[,1] [,2] [,3]
day1 1 3 1
day2 2 2 1
day3 3 1 5
Т.е. строки как временные точки, а не отдельные серии, как сейчас. Это связано с тем, как R ожидает расположения данных. Обратите внимание, что мы должны транспонировать ваш dat
в вызов lm.fit()
, который повлечет за собой копию большого объекта. Следовательно, если вы можете контролировать, как эти данные организованы / поставляются, прежде чем они попадут в R, это поможет в решении большой проблемы.
lm.fit()
используется, поскольку это базовый минимальный код, используемый lm()
, но мы избегаем сложностей, связанных с анализом формулы и созданием матриц моделей. Если вы хотите быть более эффективным, вам, возможно, придется самостоятельно выполнить разложение QR (код находится в lm.fit()
для этого), поскольку есть несколько вещей, которые lm.fit()
выполняет в качестве проверок работоспособности, с которыми вы могли бы отказаться, если вы уверены, что ваши данные не приведут к сингулярным матрицам и т. д.
person
Gavin Simpson
schedule
14.02.2014
1:3
(в данном случае),seq_len(nrow(dat))
в более общем случае. - person Gavin Simpson   schedule 14.02.2014