【问题标题】:how to plot actual and predicted values?如何绘制实际值和预测值?
【发布时间】:2014-12-21 11:20:10
【问题描述】:

我是统计学的学生,我想请求一些帮助。我想在我的数据集中将预测值与 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)

绘制 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 天的预测值和实际值。

谢谢

【问题讨论】:

    标签: r


    【解决方案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')
    

    【讨论】:

    • 首先谢谢你。是否有可能在一个图中同时绘制预测值和实际值?
    • 是的,您可以使用plot 绘制数据,然后使用lines 覆盖预测,如上所示。这是你的意思吗?
    【解决方案2】:

    试试这个:

    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")
    

    【讨论】:

    • 嗨,谢谢。为什么不可能将我的预测变量的每一行乘以系数 coeff.p1
    • 我认为你应该看看help(expand.grid)help(predict.glm) 中的文档。或许还要熟悉glm返回的对象类。
    • @Mamba 您在正确的轨道上 - 您想要的预测将是 coef 值和每行数据值的点积。但是,poisson$coef 具有 Intercept 的值,它是一个全局偏移量,与一个预测变量无关。关键是,poisson$coef 的长度为 4,但数据的每一行的长度为 3,df[,2:4]。所以你可以这样做prediction&lt;-poisson$coeff[1]+ poisson$coef[2:4] %*% t(df[,2:4] )。但正如我在下面提到的,所有这些都与predict() 方法相同。
    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 2021-04-08
    • 2019-04-10
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多