统计测试:(感知;实际结果;以及下一步)如何相互作用?
Posted
技术标签:
【中文标题】统计测试:(感知;实际结果;以及下一步)如何相互作用?【英文标题】:Statistical tests: how do (perception; actual results; and next) interact? 【发布时间】:2019-12-23 11:54:22 【问题描述】:perception
、outcome
和outlook
之间的交互是什么?
我已将它们放入分类变量中以 [可能] 简化事情。
import pandas as pd
import numpy as np
high, size = 100, 20
df = pd.DataFrame('perception': np.random.randint(0, high, size),
'age': np.random.randint(0, high, size),
'smokes_cat': pd.Categorical(np.tile(['lots', 'little', 'not'],
size//3+1)[:size]),
'outcome': np.random.randint(0, high, size),
'outlook_cat': pd.Categorical(np.tile(['positive', 'neutral',
'negative'],
size//3+1)[:size])
)
df.insert(2, 'age_cat', pd.Categorical(pd.cut(df.age, range(0, high+5, size//2),
right=False, labels=[
"0 - 1".format(i, i + 9)
for i in range(0, high, size//2)])))
def tierify(i):
if i <= 25:
return 'lowest'
elif i <= 50:
return 'low'
elif i <= 75:
return 'med'
return 'high'
df.insert(1, 'perception_cat', df['perception'].map(tierify))
df.insert(6, 'outcome_cat', df['outcome'].map(tierify))
np.random.shuffle(df['smokes_cat'])
在线运行:http://ideone.com/fftuSv 或 https://repl.it/repls/MicroLeftSequences
这是伪造的数据,但应该表达这个想法。个人有一个感知视图perception
,然后他们被呈现给实际的outcome
,并由此可以决定他们的outlook
。
使用 Python(pandas,或任何真正开源的东西),我如何显示概率 - 和 p - 值 -它们之间的交互 3 个相关的列(可能使用age
、smokes_cat
作为潜在的混杂因素)?
【问题讨论】:
【参考方案1】:一个选项是Multinomial logit model:
# Create one-hot encoded version of categorical variables
from sklearn.preprocessing import LabelEncoder
enc = LabelEncoder()
all_enc_df = pd.DataFrame(column: enc.fit_transform(df[column])
for column in ('perception_cat', 'age_cat',
'smokes_cat', 'outlook_cat'))
# Regression
from sklearn.linear_model import LogisticRegression
X, y = (all_enc_df[['age_cat', 'smokes_cat', 'outlook_cat']],
all_enc_df[['perception_cat']])
#clf = LogisticRegression(random_state=0, solver='lbfgs',
# multi_class='multinomial').fit(X, y)
import statsmodels.api as sm
mullogit = sm.MNLogit(y,X)
mulfit = mullogit.fit(method='bfgs', maxiter=100)
print(mulfit.summary())
https://repl.it/repls/MicroLeftSequences
【讨论】:
【参考方案2】:您可以将交互图用于此特定目的。这非常适合您的情况。我会为您的数据使用这样的图。我已经为您在问题中生成的虚拟数据尝试了它,您可以编写如下代码。虽然将其视为伪代码,但您必须根据需要定制代码。
简单的形式:
如果图中的线有交叉点或可能与其他值有交叉点,那么您可以假设存在交互作用。 如果线平行或不太可能有交点,则假设没有交互作用。然而,为了更深入地了解,我放置了一些您可以查看的链接。
代码
... # The rest of the code in the question.
# Interaction plot
import matplotlib.pyplot as plt
from statsmodels.graphics.factorplots import interaction_plot
p = interaction_plot(
x = df['perception'],
trace=df['outlook_cat'],
response= df['outcome']
)
plt.savefig('./my_interaction_plot.png') # or plt.show()
你可以找到interaction_plot()
here的文档。此外,我还建议您运行 ANOVA。
进一步阅读
您可以查看以下链接:
(一篇论文)标题为Interaction Effects in ANOVA。 (一个案例)在实践中case。 (另一种情况)在实践中case。【讨论】:
以上是关于统计测试:(感知;实际结果;以及下一步)如何相互作用?的主要内容,如果未能解决你的问题,请参考以下文章
AppScan用外部设备录制脚本(手机端应用app微信等)进行安全测试