2014-09-26 4 views
1

У меня есть следующий сценарий:Участок линии функции в R

FGM = function (n,r,z){ 
    x = r*sqrt(n)/(2*z) 
    Px = 1-pnorm(x) 
} 
re = 10000 
data = data.frame(abs(rnorm(re,0,1)), abs(rnorm(re,0,1)), abs(rnorm(re,0,1))) 
colnames(data) = c("n","r","z") 
data$Px = FGM(data$n,data$r,data$z) 
data$x = data$r*sqrt(data$n)/(2*data$z) 

par(mar=c(4.5,4.5,1,1)) 
plot(data$x,data$Px, xlim = c(0,3), pch = 19, cex = 0.1, xaxs="i", yaxs="i", 
    xlab = expression(paste("Standardized mutational size (",italic(x), ")")), 
    ylab = expression(paste("P"[a],"(",italic(x),")"))) 

enter image description here Который является воссоздание графа found here (box 2). Вы можете видеть в этом скрипте, что я делаю это, просто построив 10000 маленьких черных точек с различными значениями n, z и r. Это кажется безобразной работой вокруг, я думаю, что я просто должен быть в состоянии дать R моей функции

FGM = function (n,r,z){ 
    x = r*sqrt(n)/(2*z) 
    Px = 1-pnorm(x) 
    } 

и это участок линии на графике. Однако несколько часов очистки веб-страниц были непродуктивными, и я пробовал несколько способов с помощью abline и линий, но ничего не получилось, есть ли способ сделать это с помощью этих функций или другой функции?

Пробовал это ...

plot(data$x,data$Px, xlim = c(0,3), ylim = c(0,0.5), xaxs="i", yaxs="i", 
xlab = expression(paste("Standardized mutational size (",italic(x), ")")), 
ylab = expression(paste("P"[a],"(",italic(x),")")), type = "n") 
curve(1-pnorm(r*sqrt(n)/(2*z)), add=T) 
>Error in curve(1 - pnorm(r * sqrt(n)/(2 * z)), add = T) : 
    'expr' must be a function, or a call or an expression containing 'x' 
> 

@PaulRegular предложил это решение, но она до сих пор участки Земельные участки на основе данных, а не сама формула. Я ищу решение, которое может произвести кривую должным образом без больших значений «повторно» - используя следующие, но с «повторно» установлен в 10 вы можете увидеть, что я имею в виду ...

data <- data[order(data$x),] 
lines(data$x, data$Px, lwd=1) 

enter image description here

+1

У многих из нас нет свободного доступа к этой статье. – 2014-09-26 09:59:26

+0

запуск сценария будет показывать то же самое @pascal – Ell

+1

Затем удалите бесполезную ссылку. – 2014-09-26 10:01:05

ответ

3

Вы можете передать функцию только одной переменной в plot. Я думаю, что вы ищете:

plot(function(x) 1-pnorm(x),0,3) 
+0

отлично и просто, спасибо большое – Ell

+2

Еще проще: 'curve (1-pnorm (x), 0,3)' – Spacedman

0

Попробуйте сортировать данные по х, а затем добавьте строку:

data <- data[order(data$x),] 
lines(data$x, data$Px, lwd=2) 
+0

Спасибо, он создает линии, но я ищу решение, которое вычисляется по формуле, а не по данным - я должен был сделать это более ясным, я отредактирую Q – Ell

+0

Извините, это ясно, оглядываясь назад на ваш вопрос ... Я видел, что вы использовали точки, поэтому я хасис показал, как сделать это сюжетной линией. –

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