假设例如我想通过十分位数对标准正态分布的密度曲线下面积进行阴影处理.我希望最左边10%的区域对下一个10%有不同的阴影,依此类推.
这是关于" 在两点之间着色核密度图 "和" 按组密度曲线下的ggplot2阴影区域 " 的问题的变体,但我想要对每个分位数进行着色(在我的示例中,每个组都是十分位但是过程应该容易推广到其他分位数).
我不介意解决方案是使用ggplot2还是base图形,以及这是直接从公式(这将是非常整洁)或基于首先创建数据框.如果是后者,您可能需要:
delta <- 0.0001
z.df <- data.frame(x = seq(from=-3, to=3, by=delta))
z.df$pdf <- dnorm(z.df$x)
z.df$decile <- floor(10*pnorm(z.df$x) + 1)
Run Code Online (Sandbox Code Playgroud)
请注意,天真的解决方案ggplot(z.df, aes(x = x, fill = quantile)) + geom_ribbon(aes(ymin = 0, ymax = pdf))会失败,因为Aesthetics can not vary with a ribbon.
我在数据框和动物园对象之间切换很困难,特别是保留有意义的列名,以及单变量和多变量情况之间的不一致:
library(zoo)
#sample data, two species counts over time
t = as.Date(c("2012-01-01", "2012-01-02", "2012-01-03", "2012-01-04"))
n1 = c(4, 5, 9, 7) #counts of Lepisma saccharina
n2 = c(2, 6, 0, 11) #counts of Thermobia domestica
df = data.frame(t, n1, n2)
colnames(df) <- c("Date", "Lepisma saccharina", "Thermobia domestica")
#converting to zoo loses column names in univariate case...
> z1 <- read.zoo(df[,1:2]) #time series for L. saccharina
> colnames(z1)
NULL
> colnames(z1) <- c("Lepisma saccharina") #can't even set column name manually
Error …Run Code Online (Sandbox Code Playgroud) 我正在模拟一维对称的随机游走过程:
y[t] = y[t-1] + epsilon[t]
Run Code Online (Sandbox Code Playgroud)
其中白噪声用epsilon[t] ~ N(0,1)时间段表示t.这个过程没有任何偏差.
此外,RW是对称的,因为Pr(y[i] = +1) = Pr(y[i] = -1) = 0.5.
这是我在R中的代码:
set.seed(1)
t=1000
epsilon=sample(c(-1,1), t, replace = 1)
y<-c()
y[1]<-0
for (i in 2:t) {
y[i]<-y[i-1]+epsilon[i]
}
par(mfrow=c(1,2))
plot(1:t, y, type="l", main="Random walk")
outcomes <- sapply(1:1000, function(i) cumsum(y[i]))
hist(outcomes)
Run Code Online (Sandbox Code Playgroud)
我想模拟1000个不同的y[i,t]系列(i=1,...,1000; t=1,...,1000).(在那之后,我将检查返回原点(y[1]=0)的概率t=3,t=5和t=10.)
哪个函数可以让我用y[t]随机游走时间序列进行这种重复?