2014-02-20 34 views
0

假設我有稱爲「數據」的數據組,並且產生通過:設置不同的帶寬

library(reshape2) # Reshape data, needed in command "melt" 
library(ggplot2) # apply ggplot 

density <-rep (0.05, each=800) 

tau <-rep (0.05, each=800) 

# define two different models: network and non-network 
model <-rep(1:2, each=400, times=1) 


## Create data and factors for the plot 
df <- melt(rnorm(800, -3, 0.5)) 

data <- as.data.frame(cbind(density, tau, model, df$value)) 

data$density <- factor(data$density,levels=0.05, 
         labels=c("Density=0.05")) 

data$tau <- factor(data$tau,levels=0.05, 
        labels=c("tau=0.05")) 

data$model<- factor(data$model,levels=c(1,2), 
        labels=c("Yes", 
          "No")) 

ggplot(data=data, aes(x=V4, shape=model, colour=model, lty=model)) + 

    stat_density(adjust=1, geom="line",position="identity") + 

    facet_grid(tau~density, scale="free") + 

    geom_vline(xintercept=-3, lty="dashed") + 

    ggtitle("Kernel Density") + 

    xlab("Data") + 

    ylab("Kernel Density") + 

    theme(plot.title=element_text(face="bold", size=17), # change fond size of title 
     axis.text.x= element_text(size=14), 
     axis.text.y= element_text(size=14), 
     legend.title=element_text(size=14), 
     legend.text =element_text(size=12), 
     strip.text.x=element_text(size=14),    # change fond size of x_axis 
     strip.text.y=element_text(size=14))    # change fond size of y_axis 

在數據來看,可變V4由模型分離成兩個子集(是[1:400]和否[401:800]),並且繪製內核密度而不改變原始帶寬,因爲adjust = 1。

我想要做的是:的是模型,帶寬變爲原來的10倍,但對於沒有型號,帶寬保持不變。我可以做些什麼比如讓adjust = c(10,1)?我知道如何通過plot()+ lines()來實現這一點,但我想在ggplot()中做這個以進一步分析。

回答

2

我不會推薦這個,因爲它會產生一個非常具有誤導性的情節,但您可以通過撥打電話stat_density(...)進行兩次。

ggplot(data=data, aes(x=V4, shape=model, colour=model, lty=model)) + 
    stat_density(data=data[data$model=="Yes",], adjust=10, 
       geom="line",position="identity") + 
    stat_density(data=data[data$model=="No",], adjust=1, 
       geom="line",position="identity") + 
    facet_grid(tau~density, scale="free") + 
    geom_vline(xintercept=-3, lty="dashed") + 
    ggtitle("Kernel Density") + 
    xlab("Data") + 
    ylab("Kernel Density") + 
    theme(plot.title=element_text(face="bold", size=17), 
     axis.text.x= element_text(size=14), 
     axis.text.y= element_text(size=14), 
     legend.title=element_text(size=14), 
     legend.text =element_text(size=12), 
     strip.text.x=element_text(size=14),    
     strip.text.y=element_text(size=14))    

+0

謝謝你這麼多@jlhoward。在哪些方面可能會造成誤導?兩個座標相同但帶寬不同的圖?你能解釋一下嗎?再次感謝! – Chen

+0

那麼,在你的具體情況下,使用'adjust = 10'會產生這樣的印象:「是」模型比「否」模型具有更大的分散性,而不是。一般情況下,當在同一軸上繪製兩條或更多曲線時,應該識別它們之間的所有差異,因此如果圖例標籤是:「否(調整= 1)」和「是(調整= 10)」會更好。 – jlhoward

相關問題