cbind() 的含义

Meaning of cbind()

我在 R 中有这段代码:

mp <- max_power$max
names(mp) <- max_power$athlete
x$normalized_power <- as.vector(x$power / mp[x$athlete])
x$temp_dist <- abs(x$temperature - 60)
x$log_time <- log(x$time)

normalized_power <- x$normalized_power

fit <- glm(
  cbind(normalized_power, 1 - normalized_power) ~ log_time + temp_dist,
  family = binomial(),
  data = x
)

除了等式中的 cbind() 之外,我什么都懂。我正在尝试使用 python:

复制它
        self.pmax = max(self.power_array)

        normalized_power = pd.DataFrame([x / self.pmax for x in self.power_array])
        one_minus_np = pd.DataFrame([1 - x for x in [x / self.pmax for x in self.power_array]])

        log_time = [math.log(x) for x in self.time_array]
        temp_diff = [abs(x - 60) for x in self.temp_array]

        df = pd.concat([normalized_power, one_minus_np], axis=1)
        df.columns = ["np", "1-np"]
        df["log_time"] = log_time
        df["temp_diff"] = temp_diff

        model = sm.glm("np ~ log_time + temp_diff", df, family=family.Binomial()).fit()

谁能解释一下 cbind() 在做什么以及如何复制它?

通常当你运行逻辑回归时,你的结果变量(在回归公式的左边)是一个简单的TRUE/FALSE(或1/0或success/failure)列表示您尝试建模的特征是否存在。

但是,有时我们会遇到这样的情况,我们有一列 counts 成功,另一列 counts 失败。

例如,假设我让 8 名男子在篮球篮下投篮 10 次并记录他们的得分。我还测量了他们的身高,因为我想知道这是否能预测他们的准确性。

我的数据可能是这样的:

baskets <- data.frame(height = c(1.5, 1.95, 1.8, 1.76, 1.52, 1.91, 1.66, 1.68),
                      shots_on_target = c(4, 9, 6, 8, 3, 9, 5, 5))

baskets
#>   height shots_on_target
#> 1   1.50               4
#> 2   1.95               9
#> 3   1.80               6
#> 4   1.76               8
#> 5   1.52               3
#> 6   1.91               9
#> 7   1.66               5
#> 8   1.68               5

如果我想运行对这些数据进行逻辑回归,我需要传递一列成功一列失败作为结果变量。幸运的是,glm 允许我们这样做。我们需要做的就是将列与 cbind 绑定在一起 - 这会将成功/失败列转换为单个 2 列矩阵。

当然,我 没有 失败专栏,但是因为我知道每个人都有 10 次投篮,所以我可以通过 10 - shots_on_target 轻松创建它

因此,我的模型可以这样创建:

model <- glm(cbind(shots_on_target, 10 - shots_on_target) ~ height, 
             data = baskets, family = binomial)

summary(model)
#> 
#> Call:
#> glm(formula = cbind(shots_on_target, 10 - shots_on_target) ~ 
#>     height, family = binomial, data = baskets)
#> 
#> Deviance Residuals: 
#>      Min        1Q    Median        3Q       Max  
#> -0.94529  -0.31349   0.00671   0.52595   0.80363  
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)  -10.094      3.038  -3.323 0.000892 ***
#> height         6.182      1.788   3.457 0.000546 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 16.944  on 7  degrees of freedom
#> Residual deviance:  2.564  on 6  degrees of freedom
#> AIC: 26.534
#> 
#> Number of Fisher Scoring iterations: 4

我们可以看到身高对射中目标的次数有积极的预测作用。

在您的示例中,结果变量的格式与我的示例类似。但是,将数字标准化为 0 到 1 之间没有多大意义。两个输入列实际上应该是整数,这种方法才有意义。

reprex package (v2.0.0)

于 2021-11-04 创建