On Mon, Aug 22 2016, Milan Bouchet-Valat wrote: > Le lundi 22 août 2016 à 13:26 +0200, Tamas Papp a écrit: >> suppose I have variables y, x, and weights w, eg >> >> x = randn(100) >> σ = 0.1 >> w = rand(length(x)) >> y = x + σ*randn(length(x))./w >> >> and I want to estimate >> >> 1. the coefficient and the intercept (something around 0, and 1) >> >> 2. and some simple estimate for the standard deviation of the error term >> (eg something around 0.1). >> >> What's the recommended way of doing this in Julia? GLM allows me to fit >> the model, but I could not figure out how to do it with weights, and I >> have a hard time extracting residuals etc to calculate an estimator for >> sigma (maybe I am doing it wrong, but residuals is not supported for the >> fit object). >> >> Julia 0.5-rc2, using latest DataFrames, last released GLM. >> >> To be clear, this does what I want: >> >> function myfit(y, X, w) >> W = Diagonal(sqrt(w)) >> WX = W*X >> Wy = W*y >> β = WX \ Wy >> ϵ = Wy-WX*β >> (β, sqrt(dot(ϵ, ϵ)/(size(X, 1)-size(X, 2)))) >> end >> >> myfit(y, hcat(ones(length(x)), x),w) >> >> but I want to learn the "standard" way of doing this. > Unfortunately, I don't think lm/LinearModel supports weights currently, > though the code is prepared in some places to handle them. > > You can fit a generalized linear model with a normal distribution > instead, but weights will be interpreted as case weights, while > weighted least squares would correspond to inverse-variance/precision > weights. This is currently underdocumented. The code to do that would > be: > > df = DataFrame(x=x, y=y, w=w) > fit(GeneralizedLinearModel, y ~ x, df, Normal(), IdentityLink(), wts=w)
Thanks. A clarifying question: GLM uses the weight to multiply the likelihood for each observation, is this correct? (that's what it looks like from sources). Also, how should I go about extracting some estimate of the variance of the error term from GLM? Is that supported? Best, Tamas -- You received this message because you are subscribed to the Google Groups "julia-stats" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
