【问题标题】:Need to run a regression 1000 times需要运行 1000 次回归
【发布时间】:2015-10-29 05:20:15
【问题描述】:

我有一个名为 reg 的回归函数。我现在需要运行它 1000 次,在直方图中捕获 Rsquare 值和 t-stat。

我尝试按如下方式运行复制(取 n=5,查看结果):

replicate(5,{
  seriese=matrix( rnorm(100*1,mean=0,sd=1), 100, 1) 
  e <- matrix(ncol = 1, nrow = 100) 
  for(i in 1:100){
    e[i] <- sum(seriese[1:i,1]) 
  } 
  dataY <- cbind(seriese, e) 
  seriesa=matrix( rnorm(100*1,mean=0,sd=1), 100, 1) 
  x <- matrix(ncol = 1, nrow = 100) 
  for(i in 1:100){ 
    x[i] <- sum(seriesa[1:i,1]) 
  }
  dataX <- cbind(seriesa, x) 
  #convert to ts
  dataYTS=ts(dataY[,2]) 
  dataXTS=ts(dataX[,2]) 
  #run regression 
  #check summary regression 
  reg=lm(dataYTS~dataXTS) 
},simplify=FALSE) 

这报告数据的类型,而不是值。

replicate(5,{reg=lm(dataYTS~dataXTS)})
              [,1]        [,2]        [,3]        [,4]        [,5]       
coefficients  Numeric,2   Numeric,2   Numeric,2   Numeric,2   Numeric,2  
residuals     Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
effects       Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
rank          2           2           2           2           2          
fitted.values Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
assign        Integer,2   Integer,2   Integer,2   Integer,2   Integer,2  
qr            List,5      List,5      List,5      List,5      List,5     
df.residual   98          98          98          98          98         
xlevels       List,0      List,0      List,0      List,0      List,0     
call          Expression  Expression  Expression  Expression  Expression 
terms         Expression  Expression  Expression  Expression  Expression 
model         List,2      List,2      List,2      List,2      List,2     

【问题讨论】:

  • 运行 1000 次 same 回归的意义何在?您将获得相同结果的 1000 倍。
  • 尝试replicate(5,{reg=lm(dataYTS~dataXTS)}, simplify=FALSE) 假设您是sampling 数据集。
  • 同意@Pascal,需要运行一个完整的进程。复制1000次后如何记录回归函数提供的Rsqaure。
  • @akrun,你的建议给了我和以前一样的输出
  • 正如我之前所说,您可能需要一些采样。我的代码是以list 而不是您显示的格式获取结果。没有任何可重现的例子,很难理解发生了什么。

标签: r replicate


【解决方案1】:

R 平方值不是lm 返回的列表的一部分。为此,您需要从 summary.lm 列表中提取相关的叶子:

Rsq.vec <- replicate(5,{
  seriese=matrix( rnorm(100*1,mean=0,sd=1), 100, 1) 
  e <- matrix(ncol = 1, nrow = 100) 
  for(i in 1:100){
    e[i] <- sum(seriese[1:i,1]) 
  } 
  dataY <- cbind(seriese, e) 
  seriesa=matrix( rnorm(100*1,mean=0,sd=1), 100, 1) 
  x <- matrix(ncol = 1, nrow = 100) 
  for(i in 1:100){ 
    x[i] <- sum(seriesa[1:i,1]) 
  }
  dataX <- cbind(seriesa, x) 
  dataYTS=ts(dataY[,2]) 
  dataXTS=ts(dataX[,2]) 
  summary(lm(dataYTS~dataXTS) )$r.squared
}, simplify=TRUE)

然后您可以对该对象执行hist。您说您想要“t-stat”,但该请求尚不清楚,因为即使在那个简单的模型中也有多个 t-statistics。也许您想要第二个系数的 t 统计量?预测变量的 t 统计量。这也可以使用summary 找到。该列表的$coefficients 叶是一个矩阵。阅读summary.lm 的帮助页面,它应该是对上面代码的简单修改。

【讨论】:

  • 这段代码运行良好。如何创建一个包含所有 5 个 Rsquared 值和预测变量系数的表。我尝试创建一个新变量,但它只报告一个值。
  • 您可以使用cbind 将 r-squared 和 t-statistics 放在一起。在几个数字向量上,它将返回一个接近 R 表对象的矩阵。然后你可以分配行名和列名。
  • 我尝试了 summary.lm(dataYTS~dataXTS)$r.squared,但得到如下错误 - if (p == 0) { 中的错误:参数长度为零,@BondedDust
  • @ BondedDust, @Roland 我也试过:Rep100
  • 我卡住了,因为我不知道如何从对象中总结出所需的值。
猜你喜欢
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2015-02-10
相关资源
最近更新 更多