【问题标题】:How to calculate PRESS and $R^2_{predicted}$ in Stata automatically如何在 Stata 中自动计算 PRESS 和 $R^2_{predicted}$
【发布时间】:2023-03-19 07:01:04
【问题描述】:

所以我有两个模型,我想计算这些统计数据。在Stata中是否有任何软件包可以计算它们?

PRESS statistic (wiki)

如果我没记错的话。 $$ R^2_{预测} = 1 - \frac{RESET}{ESS} 美元。

【问题讨论】:

    标签: stata prediction


    【解决方案1】:
    clear all
    
    program define press, rclass
        syntax varlist(fv) [if] [in]        ///
        [fweight aweight pweight iweight] , ///
        [nodots]
    
        gettoken y x : varlist
        marksample touse
        preserve
        quietly keep if `touse'
        if "`weight'" != "" {
            local wgt "[`weight'`exp']"
        }
    
        tempvar pred temp prs
        quietly gen double `pred' = .
        if "`dots'" == "" _dots 0, title(Jackknife replications) reps(`=_N')
        forvalues i = 1/`=_N' {
            capture {
                reg `y' `x' `wgt' if _n != `i'
                predict double `temp'
                replace `pred' = `temp' in `i'
                drop `temp'
            }
            if "`dots'" == "" _dots `i' `=_rc > 0'
        }
        quietly gen double `prs' = (`y' - `pred')^2
        sum `prs', meanonly
    
        if "`dots'" == "" di _n _n
        di as txt "The predicted residual sum of squares is " as result r(sum)
        return scalar press = r(sum)
        restore
    end
    
    sysuse auto
    press price mpg i.foreign
    

    【讨论】:

    • 谢谢,但我在 Stata 中有这个错误。 press price mpg i.foreign invalid syntax r(197);
    • 它在我的电脑上运行时没有错误消息。您使用的是什么版本的 Stata?
    • 我用的是13.0版本的Stata
    • 那我真的不知道怎么回事。我唯一能想象的是,当你复制代码时出了点问题。也许它有助于set traced 1set trace on 并检查输出以查找错误。这给了你很多输出,然后你开始检查错误消息附近的内容。
    • 我不太熟悉 Stata 的工作原理,但是我尝试将您的代码复制到 Do-file 中并且它有效。早些时候我尝试过命令行。谢谢
    【解决方案2】:

    对于多元线性回归,PRESS 也可以计算为 r(i)^2/(1-h(i))^2 的总和,其中 r(i) 是残差,h(i) 是帽子值(hat matrix 的对角线条目,即 X*(X'*X)^-1*X',其中 X 是design matrix

    在 Stata 中,在 regress 之后调用以下命令 press,不带参数:

    prog def press, rclass
        tempvar r h p
        predict `r', r
        predict `h', h
        gen `p'=(`r'/(1-`h'))^2
        sum `p', mean
        di in gr "PRESS = " in ye r(sum)
        ret sca press=r(sum)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2018-02-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2016-07-23
      相关资源
      最近更新 更多