2014-10-25 3 views
0

Я студент статистики, и я хотел бы любезно запросить помощь. Я хотел бы построить предсказанные значения вместе с фактическими значениями в течение 100 дней в моем наборе:как строить реальные и прогнозируемые значения?

Образца данные:

   set.seet(1010) 
      count<-rpois(100, lambda = 5) 
      mood<- rbinom(100, size = 1, prob = .7) 
      temp<-rnorm(100, mean = 20, sd = 5) 
      wind<-rbinom(100, size = 3, prob = .7) 
      days<-seq(1,100,by=1) 
      df<-data.frame(count,mood,temp,wind,days) 

Plotting фактических значений в течение 100 дней:

   plot(count~days,type="l") 

регрессионных :

   poisson <- glm(count ~mood+wind+temp) 

Состояние на основе моих прогнозов и прогноза:

   hyp<- c(1,1,3,20) 
      coeff.p1 <- poisson$coefficients 
      XB <- hyp%*%coeff.p1 
      predv.y <- exp(XB) 
      predv.y 

Может быть есть способ предсказать значения для всех наблюдений, как, например:

   coeff.p1 <- poisson$coefficients 
       XB <- c(,2:4)%*%t(coeff.p1) 

я намерен умножить на графах 2: 4, всегда получают

   Error in c(, 2:4) : argument 1 is empty 

Здесь Я застрял. В результате я хотел бы получить предсказанные значения и фактические значения в течение 100 дней на одном графике.

Спасибо

ответ

1

Ваш объект poisson имеет класс glm, поэтому он имеет метод predict при введении каких-либо данных.

poisson <- glm(count ~mood+temp+ wind) 
df$pred<-predict(poisson,df[,2:4]) 
plot(df$days,df$count) 
lines(df$days, df$pred,type='l',col='blue') 
+0

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

+0

Да, вы можете построить данные с помощью 'plot', а затем использовать' lines' для наложения прогноза, как показано выше. Это то, что вы имеете в виду? – keegan

0

Попробуйте это:

set.seed(1010) 
count<-rpois(100, lambda = 5) 
mood<- rbinom(100, size = 1, prob = .7) 
temp<-rnorm(100, mean = 20, sd = 5) 
wind<-rbinom(100, size = 3, prob = .7) 
days<-seq(1,100,by=1) 
df<-data.frame(count,mood,temp,wind,days) 
poisson <- glm(count ~ mood+wind+temp 
       , family = poisson() #specify your model type 
       , data=df) 

# Calculate the predicted 
phat.poisson <- predprob(poisson) # for each subj, prob of observing each value 
phat.poisson.mn <- apply(phat.poisson, 2, mean) # mean predicted probs 

#your plot of observed vs. predicted 
hist(count, prob = TRUE, col = "grey60", breaks=seq(-0.5, 12.5, 1), xlab = "Counts",main = NULL, ylim=c(0, .20)) 
lines(x = seq(0, 12, 1), y = phat.poisson.mn, lty=2, lwd=2, col="red") 
points(x = seq(0, 12, 1), y = phat.poisson.mn, cex=1, pch=16, col="red") 
+0

привет спасибо. почему невозможно умножить каждую строку моих предсказателей с коэффициентами coeff.p1 <- poisson $ коэффициенты XB <- c (, 2: 4)% *% t (coeff.p1)? –

+0

Думаю, вам стоит взглянуть на документацию, найденную в 'help (expand.grid)' и 'help (predict.glm)'. Возможно, также ознакомьтесь с классом объекта, возвращаемого 'glm'. –

+0

@Mamba Вы на правильном пути - предсказание, которое вы хотите, будет точечным произведением значений 'coef' и каждой строки значений данных. Однако 'poisson $ coef' имеет значение для' Intercept', которое является глобальным смещением, не связанным только с одним предиктором. Дело в том, что 'poisson $ coef' имеет длину 4, но каждая строка ваших данных имеет длину 3,' df [, 2: 4] '. Таким образом, вы можете сделать это «предсказание <-поиссон $ coeff [1] + poisson $ coef [2: 4]% *% t (df [, 2: 4])'. Но, как я упоминал ниже, все это то же самое, что и метод 'pred(). – keegan

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