我想将此代码转换为函数:
variables = ['oki']
for var in variables:
lm_full = sm.formula.ols(formula='%s ~ diag + age + ICVcm3' % var, data=dfwo2).fit()
print("===============================================================================")
print(" formule = %s ~ diag + age + ICVcm3" % var)
print("===============================================================================")
print(lm_full.summary())
最后我想要一些看起来像:
function(oki,diag,age,ICVcm3,dfwo2)
将返回循环结果。
我不清楚如何做到这一点。我在互联网上找到的例子非常基本....我甚至不知道在谷歌上输入什么来得到答案。
答案 0 :(得分:2)
您可以返回元组列表:
def myFunction(variables):
result = []
for var in variables:
formula = " formule = %s ~ diag + age + ICVcm3" % var
lm_full = sm.formula.ols(formula=formula, data=dfwo2).fit()
result.append((formula, lm_full.summary()))
return result
答案 1 :(得分:1)
此代码显示如何返回函数中已计算的项以及如何在调用函数中检索它们。请注意如何根据需要返回任意数量的项目,即使函数返回调用代码不需要的项目,也可以忽略它们。 (这是名为虚拟的变量的目的。)
我正在使用statsmodels附带的数据集之一,因为我无法识别您正在使用的数据集。
import statsmodels as sm
df = sm.datasets.get_rdataset("Guerry", "HistData").data
df = df[['Lottery', 'Literacy', 'Wealth', 'Region']].dropna()
import statsmodels.formula.api as smf
def regress(variables):
results = [ ]
for variable in variables:
mod = smf.ols(formula='Lottery ~ %s' % variable, data=df)
result = mod.fit()
results . append ( (variable, result.params, result.df_resid, result.rsquared) )
return results
for result in regress (['Literacy', 'Wealth', 'Region']):
variable, dummy, dummy, R_squared = result
print ( variable, R_squared )
结果如下:
Literacy 0.145720612937
Wealth 0.243180384656
Region 0.142107524677
答案 2 :(得分:-1)
你的循环是var变量,只包含1个项目:一个字符串。 那么这样一个循环的目的是什么呢? diag,age,ICVcm3,dfwo2所有这些值都在哪里?有什么功能?似乎是一些非常具体的奇怪话题。
虽然只是猜测,这样的事情可能是你一直在寻找的:
def myfunction(variables,diag,age,ICVcm3,dfwo2):
for var in variables:
lm_full = sm.formula.ols(formula='%s ~ diag + age + ICVcm3' % var, data=dfwo2).fit()
print("===============================================================================")
print(" formule = %s ~ diag + age + ICVcm3" % var)
print("===============================================================================")
print(lm_full.summary())