我试图在同一个图上绘制不同方程的一些累积分布函数,这是我写的代码:
library (triangle)
library(lattice)
library(latticeExtra)
n = 1000
W1 = rtriangle(n,3128,3250)
W2 = rtriangle(n,3065,3149)
SO = rtriangle(n,0.2,0.3)
MCtab <- data.frame(W1,W2,SO)
set.seed(1)
for (n in 1:n) {
NPV30 <- (1*W1 + 2*W2 + 3*SO )}
set.seed(1)
for (n in 1:n) {
NPV50 <- ecdf((4*W1 + 5*W2 + 6*SO ))}
set.seed(1)
for (n in 1:n) {
NPV70 <- ecdf((7*W1 + 8*W2 + 9*SO))}
MCtab2 <- data.frame(NPV30,NPV50,NPV70)
plot(NPV30, verticals=TRUE, main= 'Polymer NPV CDF', do.points=FALSE, col='red')
plot(NPV50, verticals=TRUE, do.points=FALSE, add=TRUE, col='brown')
plot(NPV70, verticals=TRUE, do.points=FALSE, add=TRUE, col='orange')
只有一个图表似乎无法弄清楚为什么,或者如果有人有更好的方法会很棒。感谢
答案 0 :(得分:0)
我假设示例代码中的ecdf
作业前面缺少NPV30
。我认为它没有显示值的实际原因是plot.ecdf
方法根本不支持add
参数。但你可以轻松地自己动手。
您为函数选择的值给出了不同的分布,累积分布图非常无聊 - 只是矩形。因此,我调整了NPV50
和NPV70
的定义值,以使三个分布更相似。
所以这是我使用的代码:
library (triangle)
library(lattice)
library(latticeExtra)
n = 50
W1 = rtriangle(n,3128,3250)
W2 = rtriangle(n,3065,3149)
SO = rtriangle(n,0.2,0.3)
MCtab <- data.frame(W1,W2,SO)
set.seed(1)
for (n in 1:n) {
NPV30 <- ecdf((1*W1 + 2*W2 + 3*SO ))}
set.seed(1)
for (n in 1:n) {
NPV50 <- ecdf((1*W1 + 2.2*W2 + 3.1*SO ))}
set.seed(1)
for (n in 1:n) {
NPV70 <- ecdf((1*W1 + 2.4*W2 + 3.2*SO))}
MCtab2 <- data.frame(NPV30,NPV50,NPV70)
qNPV30 <- quantile(NPV30)
qNPV50 <- quantile(NPV50)
qNPV70 <- quantile(NPV70)
xmin <- min(c(qNPV30[1],qNPV50[1],qNPV70[1]))
xmax <- max(c(qNPV30[5],qNPV50[5],qNPV70[5]))
xdlt <- xmax-xmin
npts <- 200
x <- (1:npts)*xdlt/npts + xmin
y30 <- NPV30(x)
y50 <- NPV50(x)
y70 <- NPV70(x)
plot(x,y30,main= 'Polymer NPV CDF',xlim=c(xmin,xmax),type='l',col='red')
lines(x,y50,xlim=c(xmin,xmax),type='l',col='blue',add=T)
lines(x,y70,xlim=c(xmin,xmax),type='l',col='green',add=T)
#plot(NPV30, verticals=TRUE, main= 'Polymer NPV CDF', do.points=FALSE, col='red')
#plot(NPV50, verticals=TRUE, do.points=F, add=TRUE, col='blue')
#plot(NPV70, verticals=TRUE, do.points=F, add=TRUE, col='green')
以下是结果输出: