2014-11-20 4 views
0

Я пытаюсь сделать 10000 моделирования для следующей регрессии для того, чтобы найти H:моделирования для регрессии в R

журнала (TV) = H * журнал (м)

, в котором журнал (TV) представляет собой логарифм суммарной вариации броуновского движения (BM), а m - размер непересекающегося поднабора на оси x. Таким образом, меняя размер m, мы получаем новое значение для TV и, следовательно, log (TV). Запуск журнала (TV) против log (m) можно найти в качестве наклона настроенной линии. Ниже приведен код, который я работал на:

t<-0:1000 
nsim <- 10000 
sig2<-0.01 
#simulate with single BM 
x <- rnorm(n = length(t) - 1, sd = sqrt(sig2)) 
d1<- c(0, cumsum(x)) 
# calculating total variation 
v1<-d1[seq(1,length(d1),1)] # m=1 
v2<-d1[seq(1,length(d1),10)] # m=10 
v3<-d1[seq(1,length(d1),100)]#m=100 
s1<-sum(abs(v1[1:(length(v1)-1)]-v1[2:length(v1)])) 
s2<-sum(abs(v2[1:(length(v2)-1)]-v2[2:length(v2)])) 
s3<-sum(abs(v3[1:(length(v3)-1)]-v3[2:length(v3)])) 
s<-c(log(s1),log(s2),log(s3)) 
m<-c(log(1),log(10),log(100)) 
fit<-lm(s~m) 

Это помогает мне найти одно значение Н, и теперь я хочу сделать 10000 моделирования и следующий код, который я придумал:

for (i in 1:nsim) {X[i, ] <- c(0, cumsum(rnorm(n = length(t) - 1, sd = sqrt(sig2))))}#10000 simulations of BM 
# calculating total variation: 
v1<-X[,1:1==1] 
v2<-X[,1:3==10] 
v3<-X[,1:100==100] 
a1<-abs(v1[,1:ncol(v1)-1]-v1[,2:ncol(v1)]) 
a2<-abs(v2[,1:ncol(v2)-1]-v2[,2:ncol(v2)]) 
a3<-abs(v3[,1:ncol(v3)-1]-v1[,2:ncol(v3)]) 
s1<-apply(a1,1,sum) 
s2<-apply(a2,1,sum) 
s3<-apply(a3,1,sum) 
s<-cbind(s1,s2,s3) 
S<-log(s) 
M<-c(log(1),log(10),log(100)) 

Матрица S - это матрица, в которой каждая строка будет содержать 3 значения log (TV), которые соответствуют m = 1,10,100. Теперь мне нужно запустить регрессию каждой строки в S с M и записать значение H каждый раз, когда я запускаю регрессию. Я застрял на этом шаге. Может кто-нибудь, пожалуйста, предложите мне способ, которым я могу это сделать?

Большое спасибо заранее за любые предложения

+1

Параметр 'replicate' функция является стандартным методом это. Тот факт, что '' '' '' '' '' '' только длина три, не беспокоит вас? –

ответ

2

Иллюстрируя, как использовать репликацию с исходным кодом, а не то, что было в цикле:

Res <- replicate(n= 100, expr = { 
t<-0:1000 
nsim <- 10000 
sig2<-0.01 

x <- rnorm(n = length(t) - 1, sd = sqrt(sig2)) 
d1<- c(0, cumsum(x)) 

v1<-d1[seq(1,length(d1),1)] 
v2<-d1[seq(1,length(d1),10)] 
v3<-d1[seq(1,length(d1),100)] 
s1<-sum(abs(v1[1:(length(v1)-1)]-v1[2:length(v1)])) 
s2<-sum(abs(v2[1:(length(v2)-1)]-v2[2:length(v2)])) 
s3<-sum(abs(v3[1:(length(v3)-1)]-v3[2:length(v3)])) 
s<-c(log(s1),log(s2),log(s3)) 
m<-c(log(1),log(10),log(100)) 
fit<-lm(s~m); coef(fit) 
    } 
) 

> str(Res) 
num [1:2, 1:100] 4.299 -0.526 4.328 -0.506 4.441 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:2] "(Intercept)" "m" 
    ..$ : NULL 
+0

Большое вам спасибо за ваше предложение. Это работает отлично и относится к вашей заботе о длине s и m, я пытаюсь найти способ, которым я могу обобщить процесс генерации v. Я использовал цикл для, но кажется, что он не работает хорошо – Ocean

Смежные вопросы