На початку: я дуже «свіжий» користувач 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]