[英]Loop Through Data with Sequential Time Lags output Linear Regression Coefficients
[英]linear regression analysis on subset of data through a loop
我有一個具有1000行和10列的數據框。 第一列是我的y變量,其余列是x變量。 我想對10個不同的數據子集擬合10個不同的線性回歸。 例如:row1:100第一個子集,row101:200第二個子集等...我想將每個線性模型的輸出(斜率值)存儲在新數據集的一行中。 是否有捷徑可尋? 我在下面嘗試過:
for (i in 1:10 ) {
model_var[i] = lm(y[(100*(i-1)+1:100*i]~.,var)
# var is my dataframe that has all the data
#model_var[i] will store linear models
}
但是我有一個錯誤。 似乎R不允許將線性模型擬合到數據的子集。
您需要同時對y
和x
變量進行子集化。 一種簡單的方法是直接將var
data.frame子集化:
model_var<-list()
for (i in 1:10 )
model_var[[i]] = lm(y~.,var[(100*(i-1)+1:100*i,])
一個基於@nograpes答案的更優雅的解決方案:
組成一些數據:
set.seed(101)
var <- data.frame(y=1:1000,matrix(runif(10000),nrow=1000))
創建一個拆分變量(或者參見ggplot2::cut_number
)
cutvar <- (seq(nrow(var))-1) %/% 100
拆分數據並使用lapply
:
mList <- lapply(split(var,cutvar),lm,formula=y~.)
如果您只想要系數,那么
t(sapply(mList,coef))
應該為您提取它們。
另一種方法是使用Zoo包中的rollapply
。
使用與Ben Bolker稍有不同的數據並應用rollapply
即可得到它。
set.seed(1)
var <- data.frame(matrix(runif(10000),nrow=1000))
colnames(var) <- c("y", paste0("x", 1:9))
Coef <- rollapply(var,
width = 100, by=100,
FUN = function(z) {
coef(lm(y~., data=as.data.frame(z)))
},
by.column = FALSE, align = "right")
round(Coef, 3) # and here's the coefficients corresponding to the 10 regressions
(Intercept) x1 x2 x3 x4 x5 x6 x7 x8 x9
[1,] 0.416 -0.253 0.093 -0.047 0.039 0.081 0.053 -0.022 0.084 0.006
[2,] 0.656 0.144 -0.209 -0.150 -0.066 0.084 0.018 -0.114 -0.016 0.073
[3,] 0.311 -0.134 0.006 0.047 0.036 0.020 0.082 0.172 0.211 -0.090
[4,] 0.720 -0.110 0.094 -0.058 -0.018 -0.256 -0.058 0.074 -0.042 0.010
[5,] 0.510 0.052 0.019 -0.193 -0.045 0.114 -0.093 0.044 0.059 0.051
[6,] 1.044 -0.037 -0.300 -0.180 0.148 0.018 -0.187 -0.128 -0.182 -0.154
[7,] 0.558 0.027 -0.231 -0.074 0.065 0.192 -0.022 -0.105 -0.002 0.046
[8,] 0.496 0.156 -0.129 -0.061 0.025 0.028 -0.010 0.097 -0.031 -0.090
[9,] 0.435 0.140 0.138 -0.170 -0.085 -0.069 -0.077 -0.056 0.190 0.105
[10,] 0.282 0.078 0.014 -0.005 0.110 0.149 0.001 0.175 -0.017 -0.033
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.