簡體   English   中英

通過循環對數據子集進行線性回歸分析

[英]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不允許將線性模型擬合到數據的子集。

您需要同時對yx變量進行子集化。 一種簡單的方法是直接將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM