微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R中的约束概率回归

如何解决R中的约束概率回归

我希望在R中运行一个概率模型,并将某些系数设置为相等。

考虑一个简单的示例,其中四支球队在家中一次比赛,在旅途中一次比赛:

Home <- c('NY','NY','LA','BOS','CHI','CHI')
Away <- c('LA','BOS')
HomeWin <- c(1,1,1)
results <- data.frame(Home,Away,HomeWin)

假设我想运行一个概率模型,其中包括主队和客队的虚拟变量。

model <- glm(HomeWin ~ as.factor(Home) + as.factor(Away),family = binomial(link="probit"),data = results)

模型的结果提供了三个主队(与被排除在外的主队相比)和三个客队(与被排除在外的客队相比)的系数估计。假设我要设置模型,使纽约的房屋系数估算值等于纽约的路程系数估算值(其他城市相同)。我该怎么做?我的完整数据包含其中的30个组,并且变量更多。

解决方法

如果我正确理解了这个问题,那么您实际上要寻找的是使homeaway产生相反的效果。例如。 beta_{home=NY} = - beta_{away=NY}。但是,这还不是很清楚。但是一种简单的实现方法是手动设计虚拟变量,这样您就可以为NY_home_or_awayhome=1away=-1设计一个虚拟变量。在这种情况下,beta_NY_home_or_away既可以基于家庭也可以基于家庭,但是具有负号。

library(dplyr)

competitors <- unique(unlist(results[,c('Home','Away')]))
new_cols <- lapply(competitors,function(x){
  home <- results[['Home']] == x
  away <- results[['Away']] == x
  case_when(home ~ 1,away ~ -1,TRUE ~ 0)
})
names(new_cols) <- competitors
results_wide <- bind_cols(results,new_cols)

fit <- glm(HomeWin ~ NY + LA + CHI + BOS,data = results_wide,family = binomial('probit'))
summary(fit)

Call:
glm(formula = HomeWin ~ NY + LA + CHI + BOS,family = binomial("probit"),data = results_wide)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-1.64597  -0.73997   0.01633   1.19731   1.19731  

Coefficients: (1 not defined because of singularities)
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.927e-02  3.823e-01  -0.077    0.939
NY           6.786e-01  6.676e-01   1.017    0.309
LA           6.786e-01  6.676e-01   1.017    0.309
CHI         -2.898e-16  6.527e-01   0.000    1.000
BOS                 NA         NA      NA       NA

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 16.636  on 11  degrees of freedom
Residual deviance: 14.537  on  8  degrees of freedom
AIC: 22.537

Number of Fisher Scoring iterations: 5

请注意,现在的标志取决于球队是否是AwayHomeAway=-1的标志。同样,在进行这种转换后,任何统计检验都应谨慎进行,因为它们的解释和有效性将取决于其他变量。另请注意,由于假人是线性相关的,因此一个团队将获得NA个估算值。

,

您可以为列为主队或客队的每个队名创建虚拟变量,并在回归中使用这些虚拟变量。

(鉴于您提供的样本数据,以下示例在数值上可能会产生奇怪的表现,但它应与实际数据一起使用。)

var n = 0;

while (true) {
  var comment = document.getElementsByClassName('wall_reply_text')[n].textContent;
  
  if (comment.indexOf("публикации") == 0) {
    alert(comment);
  }
  
  n++;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。