【发布时间】:2017-02-25 09:10:34
【问题描述】:
R-glm 用于逻辑回归。我试图根据另一个堆栈溢出帖子动态输入公式的值。
该函数是使用 rpy2 从 python 调用的。当我打印出summery(glm.out)。
我针对 2 个不同的场景进行了测试。
- 输入的 x,y 值直接取自代码的 python 部分,并转换为正确的格式,并传递给 R 中的 logestic_regression 函数。来自 python 的输入值打印在下面(第二个代码块)。 glm 使用 as.formula 在这些值上运行。这给了我一个输出(第四块代码)
- 输入 x,y 值刚刚在 R 中创建,如代码中所给(在本例中 x=k1,k2 和 y=m。)并且 glm 函数以传统方式运行。这给了我不同的输出(第 6 块代码)
输入的数字是正确的。但是格式不一样。第一个场景 - 一个数据框和第二个 - 向量。 或者我的 glm 调用是错误的。
R 代码。
logistic_regression = function(y,x,colnames){
print("Y value is ")
print(y)
print("X value is ")
print(x)
m <- c(1,1,1,0,0,0)
k1 <- c(4,3,5,1,2,3)
k2 <- c(6,7,8,5,6,3)
glm.out = glm(as.formula(paste("y~", paste(colnames, collapse="+"))), family=binomial(logit), data=x)
# glm.out = glm(m~k1+k2, family=binomial(logit), data=x)
return(summary(glm.out))
}
输入打印
[1] "Y value is "
[1] 1 1 1 0 0 0
[1] "X value is "
X0 X1
0 4 6
1 3 7
2 5 8
3 1 5
4 2 6
5 3 3
当我运行代码时
glm.out = glm(as.formula(paste("y~", paste(colnames, collapse="+"))), family=binomial(logit), data=x)
输出
Call:
glm(formula = as.formula(paste("y~", paste(colnames, collapse = "+"))),
family = binomial(logit), data = x)
Deviance Residuals:
[1] 0 0 0 0 0 0
Coefficients: (3 not defined because of singularities)
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.457e+01 1.310e+05 0 1
X02 6.872e-14 1.853e+05 0 1
X03 3.566e-14 1.853e+05 0 1
X04 4.913e+01 1.853e+05 0 1
X05 4.913e+01 1.853e+05 0 1
X15 NA NA NA NA
X16 NA NA NA NA
X17 4.913e+01 1.853e+05 0 1
X18 NA NA NA NA
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 8.3178e+00 on 5 degrees of freedom
Residual deviance: 2.5720e-10 on 0 degrees of freedom
AIC: 12
Number of Fisher Scoring iterations: 23
但是当我跑的时候
glm.out = glm(m~k1+k2, family=binomial(logit), data=x)
输出完全不同(看起来更正确)
Call:
glm(formula = m ~ k1 + k2, family = binomial(logit), data = x)
Deviance Residuals:
0 1 2 3 4 5
1.532e-06 1.390e-05 2.110e-08 -2.110e-08 -1.344e-05 -2.110e-08
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -199.05 1221734.18 0 1
k1 25.30 281753.45 0 1
k2 20.89 288426.19 0 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 8.3178e+00 on 5 degrees of freedom
Residual deviance: 3.7636e-10 on 3 degrees of freedom
AIC: 6
Number of Fisher Scoring iterations: 24
【问题讨论】:
标签: python r logistic-regression glm rpy2