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 创建
我在 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 创建