2016-01-12 3 views
3

Этап.1. Загрузите необходимый пакет.Как нарисовать встроенный график и фактический график распределения гаммы в одном сюжете?

library(ggplot2) 
library(MASS) 

Шаг.2. Сгенерируйте 10 000 номеров, соответствующих гамма-распределению.

x <- round(rgamma(100000,shape = 2,rate = 0.2),1) 
x <- x[which(x>0)] 

Шаг.3. Нарисуйте pdf (функция плотности вероятности), предположительно, мы не знаем, к какому дистрибутиву относится x.

t1 <- as.data.frame(table(x)) 
names(t1) <- c("x","y") 
t1 <- transform(t1,x=as.numeric(as.character(x))) 
t1$y <- t1$y/sum(t1[,2]) 
ggplot() + geom_point(data = t1,aes(x = x,y = y)) + theme_classic() 

enter image description here

Шаг 4.. Из графика можно узнать, что распределение x весьма похоже на распределение гаммы, поэтому мы используем fitdistr() в пакете MASS для получения параметров распределения гамма-излучения и rate.

fitdistr(x,"gamma") 
##  output 
##  shape   rate  
## 2.0108224880 0.2011198260 
## (0.0083543575) (0.0009483429) 

Шаг.5. Нарисуйте фактическую точку (черную точку) и графику (красную линию) в том же сюжете, и вот вопрос, пожалуйста, сначала посмотрите сюжет.

ggplot() + geom_point(data = t1,aes(x = x,y = y)) +  
geom_line(aes(x=t1[,1],y=dgamma(t1[,1],2,0.2)),color="red") + 
theme_classic() 

enter image description here

Вопрос 1: Реальные параметры shape=2, rate=0.2, и параметры, которые я использую функцию fitdistr(), чтобы получить это shape=2.01, rate=0.20. Эти два значения почти одинаковы, но почему встроенный график не подходит к фактической точке, должно быть что-то не так на графике, или то, как я рисую установленный график и фактические точки, совершенно неверно, что мне делать ?

Вопрос 2: После того, как я получаю параметр модели я установить, каким образом я оценить модель, что-то вроде RSS(residual square sum) для линейной модели, или p-value из shapiro.test(), ks.test() и другого теста? Я плохо разбираюсь в статистических знаниях, пожалуйста, помогите мне решить оба вопроса, спасибо! (Ps: У меня есть поиск в Google и stackoverflow много раз, но он не работает, поэтому не голосуйте, этот вопрос бесполезен, Thx!)

+0

У меня нет большой репутации, чтобы показать картинку напрямую, может ли кто-нибудь сделать мне одолжение? Спасибо за помощь! –

+0

Пожалуйста, покажите код, который вы использовали для шага 5 (т. Е. Для отображения как данных, так и кривой). – jbaums

+1

Извините, я забуду это, пожалуйста, снова проверьте описание @jbaums –

ответ

1

по какой-то причине ваша встроенная линия, кажется, ровно в 10 раз до высокой:

ggplot() + geom_point(data = t1,aes(x = x,y = y)) +  
    geom_line(aes(x=t1[,1],y=(dgamma(t1[,1],2,0.2))/10),color="red") + 
    theme_classic() 

дает идеальную посадку: enter image description here

Как jbaums говорилось это вызвано плотностью на йх то есть 0,1 в этом случае.

+0

Плотность задается как плотность на dx, и в этом случае dx равно 0,1, поскольку OP округляет данные до 1 десятичного разряда. В общем, 'плотность = count/(сумма (счет) * бинарность)'. – jbaums

+0

@RHA Да, я уже пробовал этот метод, но, как вы сказали, почему? –

+0

@ jbaums вы можете переписать код, я не могу понять, что вы сказали полностью, спасибо –

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