Есть ли Python эквивалент функции для средних таблиц R с contr.sum - PullRequest
0 голосов
/ 29 января 2020

Я отчаянно пытаюсь воспроизвести в python с помощью statsmodel эквивалент линейной регрессии, anova и среднего значения (скорректированное среднее) с contr.sum в качестве контраста, чтобы заставить все мои коэффициенты суммировать до нуля.

Попробовав ols из statsmodel, полученный метод anova_lm дал мне те же результаты, что и для anova, что и R, за исключением того, что коэффициенты не суммировались с нулем.

Затем пошли glm с fit_constrained и вектором 1 с в качестве ограничений и с нулем как результат. Я получил коэффициенты, включая «Перехват» с суммой = 0, но они не имеют ничего общего с коэффициентами R, и поэтому я не могу использовать их для корректировки своих средств, как в среднем в R. Я могу включить примеры кода, но я думаю, что запрос, написанный как таковой, довольно очевиден ... Заблудиться, нужны друзья.

Tx -)

Редактирование моего вопроса для ответа Plato77: Tx для Ваш интерес, Платон.

Я работаю над вводом fl ie с именем «Земляника». Я немного изменяю форму и т. д. c (может быть, не самый умный, как я, но не эксперт Python)

df = pd.read_csv (r'C:\Users\Aste\Desktop\PERSONNEL\Forms\Processing\Python\SelectedStrawberries.csv', sep=";", decimal =',')   #read the csv file (put 'r' before the path string to address any special characters in the path, such as '\'). Don't forget to put the file name at the end of the path + ".csv"


df=df.fillna(0)
df4=df.pivot_table(index=['Assessement date','Sample ID','Panelist','Replicate'], columns='Attributes', values='Score', aggfunc='first' )
df4.reset_index(inplace=True)

vec1=(df4[df4.columns[4]]) #condisering only first attribute in this test
vec2= (df4['Sample ID'])
vec3= (df4['Panelist'])
vec4= (df4['Replicate'])


df5=pd.DataFrame ({'Sample': vec2,'Panelist': vec3, 'Replicate': vec4,'score': vec1})

Теперь я перехожу к хитрой части, которая заключается в получении моделей. Если я использую либо ols, либо glm, я получаю одинаковые коэффициенты

lm_glm1=ols('score ~ C(Sample) + C(Panelist) + C(Replicate)', data=df5).fit()
lm_glm2=glm('score ~ C(Sample) + C(Panelist) + C(Replicate)', data=df5).fit()

оба метода дают следующие коэффициенты для модели, они не суммируются с нулем

введите описание изображения здесь

Если я попытаюсь ограничить модель glm (я не нашел способа ограничить ols) следующим образом:

L=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
r=[0]

lm_glm=glm('score ~ C(Sample) + C(Panelist) + C(Replicate)', data=df5).fit_constrained((L, r))

Я получу коэффициенты, которые суммируются до нуля или близки к , но они не имеют ничего общего с тем, что я получаю в R на тех же данных с контрастом contr.sum

введите описание изображения здесь

Мой друг в R постоянно говорит мне Я должен установить контраст с contr.sum, но не знаю, как это сделать в Python ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...