代码之家  ›  专栏  ›  技术社区  ›  user

如何使用stats.models将数据转换为混合效应模型的偏斜正态分布?

  •  0
  • user  · 技术社区  · 2 年前

    我正在使用 statsmodels mixedlm 如下所示:

    model = smf.mixedlm("value ~ categorical_variable", data, groups=data[year_identifier])
    

    enter image description here 当我绘制残差时,我有一个轻微的左偏分布:

    我试图转换我的响应变量,使其成为带有自定义偏斜参数的偏斜法线:

    # Define the custom skew-normal distribution with a custom skew parameter
    skew_parameter = -4
    
    # Transform response variable using the inverse CDF
    data["transformed_value"] = stats.skewnorm.ppf(
        stats.norm.cdf(
            x=np.array(data["value"].values),
        ),
        skew_parameter,
    )
    
    

    结果 np.inf 价值观

    然后我尝试通过调整 loc scale 值:

    # Transform response variable using the inverse CDF
    data["transformed_value"] = stats.skewnorm.ppf(
        stats.norm.cdf(
            x=np.array(data["value"].values),
            loc=np.mean(data["value"]),
            scale=np.std(data["value"]),
        ),
        skew_parameter,
    )
    
    

    这提供了一个变换后的数组,但当我绘制残差时,分布实际上是 更糟的 当我使用下面的公式将它们转换回来时,这些值看起来根本不正确:

    result.params['Intercept'] = stats.skewnorm.cdf(result.params['Intercept'], skew_parameter)
    result.params['categorical_variable[T.value]'] = stats.skewnorm.cdf(result.params['categorical_variable[T.value]'], skew_parameter)
    

    有人能建议在这种情况下该怎么办吗?

    也许我没有正确地转换,或者,也许有更好的方法来处理左偏正态分布?

    1 回复  |  直到 2 年前