Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python R与Statsmodels中的混淆列-Statsmodels在所有别名中拆分值_Python_R_Statsmodels_Experimental Design_Pydoe - Fatal编程技术网

Python R与Statsmodels中的混淆列-Statsmodels在所有别名中拆分值

Python R与Statsmodels中的混淆列-Statsmodels在所有别名中拆分值,python,r,statsmodels,experimental-design,pydoe,Python,R,Statsmodels,Experimental Design,Pydoe,当我有一个带有混淆列的欠约束系统时,R中的lm忽略了许多第二和第三因素的交互作用(在我看来这是正确的行为),但是statsmodels(在Python中)在所有混淆列之间分割值 假设我有以下数据: a b c y -------------------- -1 -1 1 4 1 -1 -1 30 -1 1 -1 6 1 1 1 4 在R中使用lm('y~a*b*c')可以得到以下系数: a、

当我有一个带有混淆列的欠约束系统时,R中的
lm
忽略了许多第二和第三因素的交互作用(在我看来这是正确的行为),但是statsmodels(在Python中)在所有混淆列之间分割值

假设我有以下数据:

  a    b    c    y  
--------------------
 -1   -1    1    4
  1   -1   -1   30
 -1    1   -1    6
  1    1    1    4 
在R中使用
lm('y~a*b*c')
可以得到以下系数:

  • a、 十一,
  • b、 六,
  • c、 -6
  • 拦截,11
我可以通过statsmodels中的
'y~a+b+c'
来实现这一点,但产品版本将系数分解为2+因子相互作用。(a带b:c,b带a:c,c带a:b,截取带a:b:c)

与乘法相反,加法不适用于更复杂的乘法,其中R发现了一些重要的双因素相互作用,但没有给出任何其他结果

在这种情况下,如何使statsmodels像R一样工作?或者我如何设置它以获得一个合适的结果

A MWE:

import pandas as pd
import pyDOE
import statsmodels.formula.api as smf

water_frac = pd.DataFrame(pyDOE.fracfact("a b ab"), columns=["A", "B", "C"])
water_frac["y"] = [4, 30, 6, 4]
当您这样做时:

smf.ols(formula="y ~ A+B+C", data=water_frac).fit().params
你会得到:

Intercept    11.0
A             6.0
B            -6.0
C            -7.0
dtype: float64
而这:

smf.ols(formula="y ~ A*B*C", data=water_frac).fit().params
给出:

Intercept    5.5
A            3.0
B           -3.0
A:B         -3.5
C           -3.5
A:C         -3.0
B:C          3.0
A:B:C        5.5
dtype: float64

STATSOLS模型默认使用广义逆,而不是自动删除列。例如,见谢谢。我在评论中要求澄清。statsmodels OLS默认使用广义逆,而不是自动删除列。例如,见谢谢。我在评论中要求澄清。