я испытывал некоторые основные категории регрессии с использованием Статистика модели: Я построить детерминированную модельгрубости выпуск statsmodel линейной регрессии (МНК) - Python
Y = X + Z
где X может принимать 3 значения (a, b или c) и Z только 2 (d или e). На этой стадии модели является чисто детерминированной, я настройка вес для каждого переменного, как следует
в Весах = вес 1
Б = вес 2
Кассиопеяна = 3
двойки вес = 1
Э вес = 2
Поэтому с 1 (Х = а) равно 1, если Х = а, 0 в противном случае, модель просто:
Y = 1 (Х = а) + 2 * 1 (Х = Ь) + 3 * 1 (X = C) + 1 (Z = д) + 2 * 1 (Z = е)
Используя следующий код, чтобы генерировать различные переменные и запустить регрессии
from statsmodels.formula.api import ols
nbData = 1000
rand1 = np.random.uniform(size=nbData)
rand2 = np.random.uniform(size=nbData)
a = 1 * (rand1 <= (1.0/3.0))
b = 1 * (((1.0/3.0)< rand1) & (rand1< (4/5.0)))
c = 1-b-a
d = 1 * (rand2 <= (3.0/5.0))
e = 1-d
weigths = [1,2,3,1,2]
y = a+2*b+3*c+4*d+5*e
df = pd.DataFrame({'y':y, 'a':a, 'b':b, 'c':c, 'd':d, 'e':e})
mod = ols(formula='y ~ a + b + c + d + e - 1', data=df)
res = mod.fit()
print(res.summary())
Я получаю результаты с правами (нужно смотреть на разницу между коэффом, а не с коэффами)
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 1.000
Model: OLS Adj. R-squared: 1.000
Method: Least Squares F-statistic: 1.006e+30
Date: Wed, 16 Sep 2015 Prob (F-statistic): 0.00
Time: 03:05:40 Log-Likelihood: 3156.8
No. Observations: 100 AIC: -6306.
Df Residuals: 96 BIC: -6295.
Df Model: 3
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
a 1.6000 7.47e-16 2.14e+15 0.000 1.600 1.600
b 2.6000 6.11e-16 4.25e+15 0.000 2.600 2.600
c 3.6000 9.61e-16 3.74e+15 0.000 3.600 3.600
d 3.4000 5.21e-16 6.52e+15 0.000 3.400 3.400
e 4.4000 6.85e-16 6.42e+15 0.000 4.400 4.400
==============================================================================
Omnibus: 11.299 Durbin-Watson: 0.833
Prob(Omnibus): 0.004 Jarque-Bera (JB): 5.720
Skew: -0.381 Prob(JB): 0.0573
Kurtosis: 2.110 Cond. No. 2.46e+15
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The smallest eigenvalue is 1.67e-29. This might indicate that there are
strong multicollinearity problems or that the design matrix is singular.
Но когда я увеличиваю количество точек данных до (скажем) 600, регрессия производит очень плохие результаты. Я пробовал аналогичную регрессию в Excel и R, и они дают согласованные результаты независимо от количества точек данных. Кто-нибудь знает, есть ли какое-то ограничение на statsmodel ols, объясняющее такое поведение, или я что-то упускаю?
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.167
Model: OLS Adj. R-squared: 0.161
Method: Least Squares F-statistic: 29.83
Date: Wed, 16 Sep 2015 Prob (F-statistic): 1.23e-22
Time: 03:08:04 Log-Likelihood: -701.02
No. Observations: 600 AIC: 1412.
Df Residuals: 595 BIC: 1434.
Df Model: 4
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
a 5.8070 1.15e+13 5.05e-13 1.000 -2.26e+13 2.26e+13
b 6.4951 1.15e+13 5.65e-13 1.000 -2.26e+13 2.26e+13
c 6.9033 1.15e+13 6.01e-13 1.000 -2.26e+13 2.26e+13
d -1.1927 1.15e+13 -1.04e-13 1.000 -2.26e+13 2.26e+13
e -0.1685 1.15e+13 -1.47e-14 1.000 -2.26e+13 2.26e+13
==============================================================================
Omnibus: 67.153 Durbin-Watson: 0.328
Prob(Omnibus): 0.000 Jarque-Bera (JB): 70.964
Skew: 0.791 Prob(JB): 3.89e-16
Kurtosis: 2.419 Cond. No. 7.70e+14
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The smallest eigenvalue is 9.25e-28. This might indicate that there are
strong multicollinearity problems or that the design matrix is singular.
Вы можете разместить Excel или R код тоже? Мое ожидание состоит в том, что проблема многоколлинеарности * должна * возникнуть: если у вас есть переменная, которая может принимать N различных категориальных значений, это должно быть представлено с помощью * N-1 * колонок-манекенов, * не * N колонок-колонок, поскольку с учетом первого N-1, N-й столбец полностью определен. Например, ваша переменная Z полностью определяется одним фиктивным столбцом. Я удивлен, что другие инструменты регрессии дают вам последовательные результаты. – ely
Хороший пример, я никогда не видел такого случая.Я предполагаю, что вы просто нажимаете порог для обобщенного обратного, numpy.pinv. В первом случае решение понижается ранг с df_model, равным 3. Во втором случае достаточно числового шума, который ранг идентифицируется с df_model, равным 4. Это может быть случай в пользу снижения порога пинвина от значения по умолчанию numpy стоимость. R может давать более стабильные, хотя одинаково неопознанные результаты, поскольку по умолчанию используется разворачивание QR-декомпозиции AFAIK. Stata отлично качается колоннами. – user333700
Это все еще немного удивительно. Каков dtype ваших данных, то есть 'mod.exog.dtype'? – user333700