2016-04-20 2 views
0

У меня этот кодMultiple кривая из функции в одном участке

N <- 1000 
beta1 = runif(N, -1,1); 
beta2 = runif(N, -1,1); 
x1 = seq(-500, 500, 0.01); 

и для каждого я оценивается от 1 до N, я хочу, чтобы построить эту функцию

z = beta1[i] + beta2[i]*x1; 
pr = 1/(1+exp(-z)); 
plot (x1,pr); 

в конце концов, я бы ожидайте 1000 кривых pr vs x1.

за что я попробовал этот

for (i in 1:N){ 
z[i]= res[i,1] + res[i,2]*x1 
pr[i] = 1/(1+exp(-z[i])); 
plot(x1,pr[i]) 
    } 

Но он дал список из 50 предупреждений, и это не сработало.

Любые помощь?

+0

Что такое 'res'? Это 'cbind (beta1, beta2)'? – Gregor

+0

Да. Спасибо за указание на это. – JcoHut

ответ

0

Это прекрасное время для некоторого умножения матрицы для упрощения и ускорения расчета. Ваша самая большая проблема заключалась в том, что plot открывает новый сюжет каждый раз, когда он называется. Я предполагаю, что вы хотите, чтобы все линии были построены на одном графике.

N <- 1000 
beta1 = runif(N, -1, 1) 
beta2 = runif(N, -1, 1) 

# I changed this to by = 1 
# for plotting purposes you really done need 100k points per line 
x1 = seq(-500, 500, 1) 

z = cbind(1, x1) %*% rbind(beta1, beta2) 
pr = 1/(1 + exp(-z)) 

# this is the bug step you were missing 
# initialize an empty plot with sufficient range 
plot(range(x1), range(pr), type = "n") 

# then just add to it in the for loop 
for (i in 1:N) { 
    lines(x1, pr[, i]) 
} 
+0

Спасибо. Я добавляю par (new = T) перед} в цикле for. Таким образом, он будет создавать все графики на одном графике. – JcoHut

+0

Но это окно все еще будет инициализировано на основе данных, когда 'i' равно 1. Если какое-либо из симуляторов сильно отличается от этого, они будут отключены, если график не будет инициализирован для полного диапазона. – Gregor

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