/ / Множинні регресії на множинах різних незалежних змінних - r, регресія, sapply, mapply

Кілька регресій на множинах різних незалежних змінних - r, регресія, розбиття, мапплі

На початку: я дуже «свіжий» користувач R, так що вибачте всі мої помилки і дурні питання.

Хотілося б оцінити 570 (30 * 19) рівнянь (і отримати з них ()). Кожне рівняння має вигляд: y ~ x2 + x3 + x4, де x2, x3 і x4 є списком.

У коментарі № 1 мій провал - це може показатищо я хочу досягти. У коментарі №2 таке рівняння працює, але мені потрібно вручну змінювати змінну "jan" (на feb, mar, і так далі), яка повинна бути взята зі списку "x2". Цей код повертає мені 30 рівнянь, але мені потрібно оцінити кожну з них ще однією змінною - x2 зі списку 19-х елементів з назвою "x2"

Як це зробити автоматично? Я маю на увазі: mapply - застосовує модель rlm до кожного з елементів списку, наприклад: елемент 1 зі списку "y" відповідає елементу 1 з "x3", а елемент 1 "x4" (я дбав про порядок, коли я готував файл csv) - це правильно, але я хотів би запустити такі рівняння, як нижче коментар № 2 з додатковою змінною x2. Ця змінна не відповідає ніяким іншим змінним - вона завжди повинна бути в кожній з 30 регресій елементів списку "y", просто змінюючись з елемента 1 списку "x2" на елемент 19 "x2".

Наприкінці хотілося б мати 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)

####

Відповіді:

1 для відповіді № 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]