问题描述
我希望在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个组,并且变量更多。
解决方法
如果我正确理解了这个问题,那么您实际上要寻找的是使home
和away
产生相反的效果。例如。 beta_{home=NY} = - beta_{away=NY}
。但是,这还不是很清楚。但是一种简单的实现方法是手动设计虚拟变量,这样您就可以为NY_home_or_away
和home=1
和away=-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
请注意,现在的标志取决于球队是否是Away
和Home
和Away=-1
的标志。同样,在进行这种转换后,任何统计检验都应谨慎进行,因为它们的解释和有效性将取决于其他变量。另请注意,由于假人是线性相关的,因此一个团队将获得NA
个估算值。
您可以为列为主队或客队的每个队名创建虚拟变量,并在回归中使用这些虚拟变量。
(鉴于您提供的样本数据,以下示例在数值上可能会产生奇怪的表现,但它应与实际数据一起使用。)
var n = 0;
while (true) {
var comment = document.getElementsByClassName('wall_reply_text')[n].textContent;
if (comment.indexOf("публикации") == 0) {
alert(comment);
}
n++;
}