Closed giacomo-carugati closed 4 months ago
a) anche io in questo caso di solito fitto con -1 per avere direttamente i coefficienti. In ogni caso basterebbe fittare. Dalla teoria vedo che ho scritto che l'Rquadro ha senso solo se la colonna di 1 è nella design matrix. Altrimenti non ha senso, o almeno non quello solito che gli attribuiamo (Btw grazie della domanda jack perchè mi ero dimenticato di sta cosa). Non ti direi che è sbagliato. Cioè se dopo ti chiede di valutare l'Rquadro allora si, se interpreti quello è sbagliato, e in quel caso ti conviene fittare il modello con l'intercetta.
b) Io quelle domande le ho sempre interpretate come valutare solamente l'intercetta. Qui però per rispondere avrei fittato il modello con -1, così da fare poi una linearHypothesis con una matrice 1,0,0,0,0,0 0,1,0,0,0,0 E ipotesi 0,0.
Probabilmente si può fare anche con l'intercetta e lo farei nello stesso modo...? Non sono sicurissimo.
c) Ora provo a fare anche io l'esercizio. [CONTINUA]
data <- read.table("tattoo.txt", header=TRUE)
head(data)
attach(data)
names(data)
method <- factor(method)
# model fitting
lm1 <- lm(price ~ -1 + method + method:dimension + method:ncolors )
summary(lm1)
# Assumptons: residuals gaussianity and homoscedastic residuals
par(mfrow=c(2,2))
plot(lm1)
shapiro.test(lm1$residuals)
# coefficients estimation
coefficients(lm1) # betas
sqrt(sum(lm1$residuals^2)/lm1$df.residual) # sigma NOT sigmasquared
summary(lm1) # residual standard error is sigma
AIC(lm1)
BIC(lm1)
# linearHypothesis ----------------------------------------------------
# ncol = nparameters
# nrow tested linear combinations
linearHypothesis(lm1, rbind(c(1,0,0,0,0,0),
c(0,1,0,0,0,0)), c(0,0) )
# it is significant
# is the number of colors significant?
linearHypothesis(lm1, rbind(c(0,0,0,0,1,0),
c(0,0,0,0,0,1)), c(0,0) )
# yes it is significant
# Reduce the model
summary(lm1)
# how should i reduce the model?
confint(lm1, level=1-(0.05/3))
# 0.833 % 99.167 %
# methodhandmade -1.942338 25.577825
# methodmachine 2.648723 30.718525
newobs <- data.frame(dimension=6.5, ncolors=1, method="handmade")
prediction <- predict(lm1, newobs, interval="confidence", level=1-(0.05/3))
prediction
# fit lwr upr
#1 117.6649 114.3916 120.9382
Alla fine ho svolto l'esercizio così. Fosse stato all'esame sarei stato abbstanza sicuro, se non fosse che quando chiede di ridurre il modello non saprei come farlo.
summary
quel che fa (credo) è controllare se nella deisgn matrix è stata specificata l'intercetta (la colonna di "1") e calcola quello che chiama sempre R-squared in un modo o nell'altro. Lascio di seguito i passaggi.Nel caso specifico di questo esercizio, però, possiamo in un certo senso dire che i due modelli sono equivalenti (a parte per il calcolo dell'F-statistic) e, di conseguenza, direi che nel caso in cui fittassimo senza intercetta, la colonna di "1" appartiene comunque allo spazio generato dalla design matrix; se andiamo infatti a calcolare manualmente l'R-squared nella sua maniera classica, ci torna lo stesso che si ottiene automaticamente con il fit in cui è specificata l'intercetta.
Così facendo stai sostanzialmente controllando se il modello passi per l'origine (e dai risultati non c'è evidenza di affermare ciò). Secondo me è quindi più corretto fittare il modello con l'intercetta globale, controllare che i cambiamenti all'intercetta dovuti al tipo di method non sono significativi e ridurre il modello ad uno con l'intercetta globale e senza method. Nel modello ridotto l'intercetta cambia nuovamente, assumendo un valore che è a metà strada tra le intercette date precedentemente dai due methods.
Se non avessi ridotto il modello, anche io sarei giunto a quella conclusione. Tuttavia, come avevo detto, c'è quel -1.942338 che, rappresentando un costo, non mi pare sensato (ma non so se sia un problema).
Si sono d'accordo. Qui in questo caso specifico direi che la colonna di 1 appartiene comunque allo spazio spannato dalla Z matrix per il fatto di usare methods. Se non si mette l'intercetta, R crea due variabili binarie una per livello che assumono valore 0 e 1 in base all'osservazione. Quindi avendo un valore 0 oppure 1 per ogni osservazione, i primi due regressori sommati creano una colonna di uni. Metto questo link che spiega bene come funzionano le variabili factor in R: http://courses.atlas.illinois.edu/spring2016/STAT/STAT200/RProgramming/RegressionFactors.html
Sono abbastanza convinto, ma comunque un po' dubbioso. Quello che mi fa pensare è che se fittiamo il modello con l'intercetta (senza -1 quindi), l'intercetta (Intercept) tiene conto dell'essere handmade e nel caso abbiamo un osservazione machine l'effetto si somma per ottenere l'intercetta per il gruppo machine. Testare se il beta di questa somma (cioè il beta per la variabile methodmachine) è 0, non sbaglierebbe a non considerare l'effetto di methodhandmade presente sull'intercetta?
Detto questo, mi sembra comunque la procedura più giusta.
In sostanza, questi due test sono equivalenti:
m0 <- lm(price ~ -1 + method + dimension:method + ncolors:method, data = data)
linearHypothesis(m0, rbind(c(-1,1,0,0,0,0)), c(0))
m0 <- lm(price ~ method + dimension:method + ncolors:method, data = data)
linearHypothesis(m0, rbind(c(0,1,0,0,0,0)), c(0))
Mentre mi rispondevi ho fatto la stessa cosa in R
###PROVE SAVAGE
intercept <- lm(price ~ method + method:dimension + method:ncolors )
summary(intercept)
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 11.8177 5.6950 2.075 0.0394 *
# methodmachine 4.8659 8.1347 0.598 0.5505
# methodhandmade:dimension 15.7374 0.7939 19.824 < 2e-16 ***
# methodmachine:dimension 8.4876 0.5658 15.001 < 2e-16 ***
# methodhandmade:ncolors 3.5540 0.5840 6.085 6.66e-09 ***
# methodmachine:ncolors 2.5615 0.5951 4.304 2.73e-05 ***
nointercept <- lm(price ~ -1 + method + method:dimension + method:ncolors )
summary(nointercept)
# Estimate Std. Error t value Pr(>|t|)
# methodhandmade 11.8177 5.6950 2.075 0.03937 *
# methodmachine 16.6836 5.8087 2.872 0.00456 **
# methodhandmade:dimension 15.7374 0.7939 19.824 < 2e-16 ***
# methodmachine:dimension 8.4876 0.5658 15.001 < 2e-16 ***
# methodhandmade:ncolors 3.5540 0.5840 6.085 6.66e-09 ***
# methodmachine:ncolors 2.5615 0.5951 4.304 2.73e-05 ***
# is method significant?
# -> giacomino translation: is the effect of the factor method on the intercept statistically
# significant
# intercept model
summary(intercept)
# methodmachine 4.8659 8.1347 0.598 0.5505
# it's not significant
# no intercept model
# is b0-b1=0? -> b0=b1? -> can i write
# y = b0(methodmachine + methodhandmade) + b1*methodhandmade*dimension + b2*methodmachine*dimension
# + b3*methodhandmade*ncolors + b4*methodmachine*ncolors -> being methodmachine + methodhandmade = 1 for
# each observation it is equal to fitting a model with an intercept.
linearHypothesis(nointercept, rbind(c(1,-1,0,0,0,0)), c(0) )
# Linear hypothesis test
#
# Hypothesis:
# methodhandmade - methodmachine = 0
#
# Model 1: restricted model
# Model 2: price ~ -1 + method + method:dimension + method:ncolors
#
# Res.Df RSS Df Sum of Sq F Pr(>F)
# 1 184 12506
# 2 183 12481 1 24.403 0.3578 0.5505
# we obtain the same pvalue (coincidence? I don't think so) -> not significant
Lascio qui per il me che la ristudierà a settembre.
Buonasera dottori, avrei dei dubbi derivanti dall'esercizio 3 di gennaio 2022.
Innanzitutto, voi come fittereste il modello data la seguente formulazione?
Non dovrebbe cambiare nulla apparentemente, ma io leverei l'intercetta "globale" per lasciare solo quelle relative ai vari gruppi, così da avere già direttamente i coefficienti giusti che chiede nel punto a). Tuttavia , anche per i quesiti successivi, mi sembra sia meglio fittarlo al solito modo. Alla fine l'ho fittato in entrambi i modi.
L'R-squared nel primo caso è chiaramente sbagliato e questo credo sia dovuto all'assenza di una colonna di "1" nella design matrix. È sbagliato quindi in generale fittare senza intercetta? (in un lab mi pare lo facessero...)
Andando avanti, questa classica domanda si riferisce sempre solo ai coefficienti dell'intercetta? Cioè, qualora ci fosse l'interazione tra method e un solo altro regressore, non dovremmo performare un unico test che guardi sia ai coefficienti dell'intercetta e del regressore in questione, corretto?
Infine, secondo voi, quell'αg è un typo? Perché nel punto precedente riduciamo il modello ad uno senza method e pertanto trovo senza senso quel subscript g
L'alternativa è mantenere il modello precedente, però per il metodo handmade ottengo un lower bound negativo che non mi pare abbia assolutamente senso.