【问题标题】:Multiple regressions on sets of different independent variables对不同自变量集的多元回归
【发布时间】:2014-02-04 19:55:40
【问题描述】:

一开始:我是 R 的“新手”,所以请原谅我所有的错误和愚蠢的问题。

我想估计 570 (30*19) 个方程(并得到它们的 summary())。每个方程的形式为:y~x2+x3+x4,其中 x2、x3 和 x4 是列表。

在评论 #1 中是我失败的试验 - 它可以显示我想要实现的目标。 在评论 #2 中,这样的等式是有效的,但我需要手动更改应该从列表“x2”中获取的变量“jan”(到 feb、mar 等)。这段代码返回了 30 个方程,但我需要用一个变量来估计它们中的每一个——来自名为“x2”的 19 个元素列表中的 x2

如何自动完成?我是说: mapply - 将 rlm 模型应用于列表的每个元素,例如: 列表“y”中的元素 1 对应于“x3”中的元素 1 和“x4”中的元素 1(我在准备 csv 文件时注意了顺序) - 这是正确的,但我想运行这样的等式在注释 #2 下方,带有附加变量 x2。这个变量不对应任何其他变量 - 它总是应该在列表“y”的元素的 30 个回归中的每一个中,只是从列表“x2”的元素 1 更改为“x2”的元素 19。

最后我想要 570 (30*19) "summ" 矩阵和 570 "archtest"

我希望这不会混淆,如果是的话,我会尝试在一段时间内再次发布它并澄清。

感谢您的理解和帮助。

data<-read.table("MAY EFFECT Rdata 18.09.2013-3 ind prod CCI.csv", head=T, sep=";", dec=".")
library(MASS)
library(FinTS)
index1<-data[,2:31]   # y  30  elements; rates, 30 countries
index2<-data[,32:50] # x2  19  elements; month dummies, months and other
index3<-data[,51:80] # x3  30  elements; IP
index4<-data[,81:110] # x4 30  elements; CCI

y<-as.list(index1)
x2<-as.list(index2)
x3<-as.list(index3)
x4<-as.list(index4)

#1. this is my trial I need to make "x2" variable that stands for month dummy be respectively equal jan, feb ... and so on till
# the end of list x2 (19 elements)
result<-mapply(function(x2) mapply(function(y,x3,x4,x2) summary(rlm(y~x2+x3+x4, maxit = 15600, data=data)), y,x3,x4),x2)

#2. this code below is returning 10x30 list matrix "summ" and 5x30 data frame "archtest"
summ<- mapply(function(y,x3,x4,jan) summary(rlm(y~jan+x3+x4, maxit = 15600, data=data)), y,x3,x4)
archtest<-mapply(function (y,x3,x4,jan,resi) {regr<-rlm(y~jan+x3+x4, maxit = 15600, data=data)
                                              ArchTest (resid(regr), lags=12, demean = FALSE)},y,x3,x4)

####

【问题讨论】:

    标签: r regression sapply mapply


    【解决方案1】:

    如果我理解正确的话,有 30 组(y、x3 和 x4),并且对于这 19 组 x2 中的每一个。如果这是正确的,那么这样的事情应该可以工作:

    set.seed(1)
    data <- matrix(rnorm(50*110),nrow=50)  # completely random data...
    
    get.summary <- function(i,j) {
      dta <- data.frame(y=data[,1+i],x2=data[,31+j], x3=data[,50+i],x4=data[,80+i])
      summary(lm(y~x2+x3+x4, data=dta))
    }
    
    smry.list <- do.call(cbind,lapply(1:19,function(j){lapply(1:30,get.summary,j)}))
    smry.list[1,1]
    

    所以现在smry.list 包含所有 570 个摘要,按 19 列 30 行排列。

    您可以使用 mapply(...) 做类似的事情,但结果是一维列表:

    smry.mapply<- mapply(get.summary,rep(1:30,each=19),1:19, SIMPLIFY=F)
    smry.mapply[1]
    

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多