我有一些我想要执行操作的数据,即去趋势。由于我需要它几次,我写了一个函数来做到这一点。它看起来像是:
function Detrend(input_var,detrended_var,trend_var,df,list_of_countries,StartYear)
for i in 1:length(list_of_countries)
country_name = list_of_countries[i]
cond = (df[:year] .>= StartYear)&(df[:country] .== country_name)
Y = convert(Array,df[cond,input_var],NaN)
X = convert(Array,df[cond,:time],NaN)
X2= convert(Array,df[cond,:time2],NaN)
regdata = DataFrame()
regdata[:Y] = Y
regdata[:X] = X
regdata[:X2] = X2
#OLS = glm(Y ~ X, regdata, Normal(), IdentityLink())
lm1 = fit(LinearModel, Y~ X + X2, regdata)
df[cond,trend_var] = predict(lm1)
df[cond,detrended_var] = df[cond,input_var]-df[cond,trend_var]
end
end
我使用Dataframe,使用列的名称执行某些操作并将我的评估保存到Dataframe。
现在我的问题是,每当我调用这样的函数时:
input_var = :iy
detrended_var = :iyDetrend
df[detrended_var] = DataArray(Float64, total_length)
trend_var = :iytrend
df[trend_var] = DataArray(Float64, total_length)
StartYear = 1980
Detrend(input_var,detrended_var,trend_var,df,list_of_countries, StartYear)
我从predict(lm1)获得的结果总是相同的,因此trend_var总是相同的,即使我更改input_var(它是第一次运行的正确结果,但不是其余的)。更奇怪的是,如果我不调用函数,而是在每次输入更改时写入函数内部的函数,我会得到正确的结果。然而,调用函数看似对于trend_var而言是第一个输入。有谁知道问题出在哪里?我如何使用预测有什么问题吗?
非常感谢, ILJA