gpt4 book ai didi

r - 线性回归回路和系数提取误差

转载 作者:行者123 更新时间:2023-12-03 08:45:29 25 4
gpt4 key购买 nike

我基本上想运行1000个线性回归(非常简单,Y〜X)并从每个线性回归中提取系数。每种回归都以Y的200个观测值的“块”表示,因为X每次回归都保持相同。这就是我所拥有的:

X<-rgamma(200,23,2)

U_list <- replicate(1000,rnorm(200,0,1),simplify = FALSE)
U_list <- setNames(U_list,paste0("U",seq_along(U_list)))

U<-unlist(U_list)

Y_list<-0.6+0.4*X+U
Y_list<-setNames(Y_list,paste0("Y",seq_along(Y_list)))

Y<-unlist(Y_list)

为了尝试这个,我尝试了一个for循环
k<-seq(from=1, to=200000, by=200)
for(i in k){
assign(paste0("reg", i), lm(Y[i:199+i]~X))
}


我有一个循环,我会做这样的事情
reg1<-lm(Y[1:200]~X)
reg2<-lm(Y[201:400]~X) etc.

但是出现以下错误,我不太理解,因为如果我逐个进行回归,则会得到结果
Error in model.frame.default(formula = Y[i:199 + i] ~ X, drop.unused.levels = TRUE) : 
variable lengths differ (found for 'X')

对于系数提取,我想到了一些rbind(),但是我不确定是否会导致这种情况。如果要问的不是很多,我将不胜感激,因为我仍在学习如何编程,有时会令人沮丧!

最佳答案

我会用另一种数据结构解决您的问题,这使得将函数应用于多个元素更容易-data.frame:

X<-rgamma(200,23,2)

Y <- replicate(1000,rnorm(200,0,1),simplify = T)

Mat <- as.data.frame(cbind(X,Y))

names(Mat) <- c("X",paste("Y",1:1000,sep="_"))

Coeffs <- as.data.frame(t(apply(Mat[,2:ncol(Mat)],2,function(col){
mod <- lm(col ~ Mat[,"X"])
return(mod$coefficients)
})))

head(Coeffs,10)

(Intercept) Mat[, "X"]
Y_1 0.1616418 -0.007862732
Y_2 0.3841935 -0.030134746
Y_3 -0.4244851 0.044787500
Y_4 0.2059972 -0.017895949
Y_5 0.5207483 -0.048730507
Y_6 0.5163610 -0.036493825
Y_7 0.3589379 -0.038667216
Y_8 -0.2291387 0.025178289
Y_9 -0.1274423 0.010477415
Y_10 -0.6508141 0.047532979

关于r - 线性回归回路和系数提取误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com