【发布时间】:2014-09-23 14:00:42
【问题描述】:
这个问题是关于打印 GLM 的结果的方式,即打印系数的顺序。我所说的“顺序”并不是指该术语的任何统计含义。
以下代码确定线性模型:
from pandas import *
import statsmodels.api as sm
import patsy as patsy
df = read_csv("http://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv")
y, X = patsy.dmatrices( 'price ~ cut', data = df )
sm.GLM( y, X, family= sm.families.Gaussian() ).fit().summary()
... 并产生下面的输出,其中的类别是按顺序排列的:
(一般)、好、理想、优质、非常好
====================================================================================
coef std err z P>|z| [95.0% Conf. Int.]
------------------------------------------------------------------------------------
Intercept 4358.7578 98.788 44.122 0.000 4165.137 4552.379
cut[T.Good] -429.8933 113.849 -3.776 0.000 -653.034 -206.753
cut[T.Ideal] -901.2158 102.412 -8.800 0.000 -1101.939 -700.493
cut[T.Premium] 225.4999 104.395 2.160 0.031 20.889 430.111
cut[T.Very Good] -376.9979 105.164 -3.585 0.000 -583.116 -170.880
====================================================================================
我想要做什么:
我希望它们像这样订购:
(一般)、好、非常好、优质、理想
我正在尝试做的事情在 R 中看起来像这样:
df = read.table( file = "http://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv",
sep = ",", header = TRUE)
df$cut = factor( df$cut, levels = c("Fair", "Good", "Very Good", "Premium", "Ideal"))
glm( price ~ cut, data = df, family = gaussian )
注意输出中的排序遵循因子排序:
(一般)、好、非常好、优质、理想
Call: glm(formula = price ~ cut, family = gaussian, data = df)
Coefficients:
(Intercept) cutGood cutVery Good cutPremium cutIdeal
4358.8 -429.9 -377.0 225.5 -901.2
如何在 Python 中做到这一点?
【问题讨论】:
-
我想指出
cut是diamonds数据集中的一个适当的因素。如果您没有使其无序,glm将使用多项式对比。你应该重新考虑你在做什么。 -
谢谢。分析只是一个例子。我所说的“有序”不是指统计意义,问题只是关于它们在输出中的打印顺序。我将进行编辑以澄清这一点。
标签: python r pandas statsmodels