交叉验证 R 中的有序逻辑回归(使用 rpy2)
Cross-validating an ordinal logistic regression in R (using rpy2)
我正在尝试在 Python 中创建一个预测模型,通过交叉验证比较几个不同的回归模型。为了适应有序逻辑模型 (MASS.polr
),我不得不通过 rpy2
与 R 接口,如下所示:
from rpy2.robjects.packages import importr
import rpy2.robjects as ro
df = pd.DataFrame()
df = df.append(pd.DataFrame({"y":25,"X":7},index=[0]))
df = df.append(pd.DataFrame({"y":50,"X":22},index=[0]))
df = df.append(pd.DataFrame({"y":25,"X":15},index=[0]))
df = df.append(pd.DataFrame({"y":75,"X":27},index=[0]))
df = df.append(pd.DataFrame({"y":25,"X":12},index=[0]))
df = df.append(pd.DataFrame({"y":25,"X":13},index=[0]))
# Loads R packages.
base = importr('base')
mass = importr('MASS')
# Converts df to an R dataframe.
from rpy2.robjects import pandas2ri
pandas2ri.activate()
ro.globalenv["rdf"] = pandas2ri.py2ri(df)
# Makes R recognise y as a factor.
ro.r("""rdf$y <- as.factor(rdf$y)""")
# Fits regression.
formula = "y ~ X"
ordlog = mass.polr(formula, data=base.as_symbol("rdf"))
ro.globalenv["ordlog"] = ordlog
print(base.summary(ordlog))
到目前为止,我主要使用 sklearn.cross_validation.test_train_split
和 sklearn.metrics.accuracy_score
比较我的模型,得到一个从 0 到 1 的数字,代表训练集模型在预测测试时的准确性-设置值。
我如何使用 rpy2
和 MASS.polr
复制此测试?
问题最终通过使用 rms.lrm
重新拟合模型得到解决,它提供了 validate()
函数(在 this example 之后解释)。
我正在尝试在 Python 中创建一个预测模型,通过交叉验证比较几个不同的回归模型。为了适应有序逻辑模型 (MASS.polr
),我不得不通过 rpy2
与 R 接口,如下所示:
from rpy2.robjects.packages import importr
import rpy2.robjects as ro
df = pd.DataFrame()
df = df.append(pd.DataFrame({"y":25,"X":7},index=[0]))
df = df.append(pd.DataFrame({"y":50,"X":22},index=[0]))
df = df.append(pd.DataFrame({"y":25,"X":15},index=[0]))
df = df.append(pd.DataFrame({"y":75,"X":27},index=[0]))
df = df.append(pd.DataFrame({"y":25,"X":12},index=[0]))
df = df.append(pd.DataFrame({"y":25,"X":13},index=[0]))
# Loads R packages.
base = importr('base')
mass = importr('MASS')
# Converts df to an R dataframe.
from rpy2.robjects import pandas2ri
pandas2ri.activate()
ro.globalenv["rdf"] = pandas2ri.py2ri(df)
# Makes R recognise y as a factor.
ro.r("""rdf$y <- as.factor(rdf$y)""")
# Fits regression.
formula = "y ~ X"
ordlog = mass.polr(formula, data=base.as_symbol("rdf"))
ro.globalenv["ordlog"] = ordlog
print(base.summary(ordlog))
到目前为止,我主要使用 sklearn.cross_validation.test_train_split
和 sklearn.metrics.accuracy_score
比较我的模型,得到一个从 0 到 1 的数字,代表训练集模型在预测测试时的准确性-设置值。
我如何使用 rpy2
和 MASS.polr
复制此测试?
问题最终通过使用 rms.lrm
重新拟合模型得到解决,它提供了 validate()
函数(在 this example 之后解释)。