Na odhad parametrov lineárnej regresnej funkcie (jednoduchá metóda najmenších štvorcov) môžme použiť viacero metód:
1) Výpočet vektora parametrov b (cez matice)
Postup:
1. načítanie vstupných vektorov:
#nacitanie obratu: Yt = scan() 6.1 7.3 9.6 10.2 10.1 11.3 12.2 12.5 13.2#nacitanie cenovych indexov: Pt = scan() 103 102 100 94 98 97 98 97 96#nacitanie prijmov obyv.: It = scan() 110 114 130 135 141 152 160 165 1702. postupné počítanie podľa vzorca:
#vytvorenie pomocneho vektora, bude to prvy stlpec matice A tvoreny jednotkami
#funkcia replicate(x=1,times=9): pom = rep(1,9)
#vytvorenie matice A pomocou
#funkcia array(vektory_matice,rozmery_matice):
A = array( b(pom,Pt,It) , b(9,3) )#vypisanie matice A – len kvoli kontrole:
A#transponovanie matice A:
Atran = t(A)#inverzna matica k matici A’A:
AAinv = solve(Atran %*% A)
#funkcia solve(matica) vytvori inverznu maticu, matice sa nasobia vzdy pomocou %*%#vypocet estimatora parametrov:
b = AAinv %*% Atran %*% Yt #vypisanie:
b
Výpis vektoru parametrov modelu:
> b
odhad parametra b0 | 10.43922788 |
odhad parametra b1 | -0.13838383 |
odhad parametra b2 | 0.09476636 |
koeficienty regresnej funkcie:
10.43923 … b0 – lokujúca konštanta/ aditívny člen/ absolútny člen
-0.13838 … b1
0.09477 … b2
2) Výpočet vektora parametrov b pomocou funkcie lm()
Postup:
1. načítanie vstupných vektorov:#nacitanie obratu:
Yt = scan()
#nacitanie cenovych indexov:
6.1 7.3 9.6 10.2 10.1 11.3 12.2 12.5 13.2
Pt = scan()
103 102 100 94 98 97 98 97 96#nacitanie prijmov obyv:
It = scan()
110 114 130 135 141 152 160 165 170
2. zavolanie funkcie lm():
#lm() - funkcia na výpočet lineárneho modelu
#vypisanie vektoru parametrov modelu
#cbind() - funkcia, ktorá spája stĺpce do matice
#ulozenie vysledkov funkcie lm(zav_velicina ~ vektor/matica_nezav_veliciny/velicin):
regresia = lm(Yt ~ cbind(Pt,It))
regresia#vypisanie podrobnejsieho vysledku funkcie lm()
summary(regresia)Výpis vektoru parametrov modelu:>regresia
Call:
lm(formula = Yt ~ cbind(Pt, It))
Coefficients:
(Intercept) | cbind(Pt, It)Pt | cbind(Pt, It)It |
10.43923 | -0.13838 | 0.09477 |
koeficienty regresnej funkcie:
10.43923 … b0 – lokujúca konštanta/ aditívny člen/ absolútny člen
-0.13838 … b1
0.09477 … b2
Výpis podrobnejšieho výsledku funkcie lm():
> summary(regresia)
Call:
lm(formula = Yt ~ cbind(Pt, It))
Residuals:
Min | 1Q | Median | 3Q | Max |
-0.50999 | -0.13967 | -0.06466 | 0.15977 | 0.67953 |
Coefficients:
Estimate | Std. Error | t value | Pr(>|t|) | |
(Intercept) | 10.439228 | 7.450424 | 1.401 | 0.2107 |
cbind(Pt, It)Pt | -0.138384 | 0.066137 | -2.092 | 0.0813 . |
cbind(Pt, It)It | 0.094766 | 0.008787 | 10.785 | 3.76e-05 *** |
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.374 on 6 degrees of freedom
Multiple R-squared: 0.9814, Adjusted R-squared: 0.9752
F-statistic: 158 on 2 and 6 DF, p-value: 6.47e-06
Estimate – odhad parametrov
Std. Error – odha štandardných odchýlok parametrov modelu
t value – hodnota t štatistiky, ak t < t0,05[v], kde v = n-(k+1) je počet voľnosti, parameter b je nevýznamný
Pr(> |t|) – ak je hodnota menšia ako zadaná hodnota hladiny významnosti, zamietame h0 a prijímame h1
cbind(Pt, It) – funkcia, ktorá spája stĺpce do matice
3) Vlastná funkcia
Táto funkcia vypočíta a vypíše odhadnuté hodnoty y, vykreslí graf hodnôt y a y^, a vypíše detailný výpis z funkcie lm (parametre, R2…)
Postup:
1. nakopírovať funkciu do R-cran
2. načítať dáta
3. zavolať funkciu reg s dvomi parametrami (vektor hodnôt y, matica hodnôt x) a následne vypísanie výsledku
1.
reg = function (Yt, m)
{
regr = lm (Yt~m)
nr = nrow(m)
nc = ncol(m)
y = c()
b = c()
for (i in 1:(nc+1))
{
b[i]=regr$coef[i]
}
for (i in 1:nr)
{
ypom = 0;
for (j in 2:(nc+1))
{
ypom = ypom + b[j]*m[i,(j-1)]
}
y[i]=b[1]+ypom
}
plot (Yt, type = "o", col="green",xlab="cas t",ylab="hodnoty y", main = "Linearna regresia")
lines (y, type = "o", col="red")
cat("Linear regresion","\n",
"--------------------------------------","\n",
"Estimated values of Y:","\n","\n",
" ",y,"\n",
"--------------------------------------","\n",
"Summary from lm function:","\n"
)
summary (regr)
}
—————————————————————————
2.
gh = c(103,102,100,94,98,97,98,97,96)
kh = c(110,114,130,135,141,152,160,165,170)
yh = c(6.1,7.3,9.6,10.2,10.1,11.3,12.2,12.5,13.2)
3.
reg(yh,cbind (gh,kh))
Linear regresion
--------------------------------------
Estimated values of Y:
6.609993 7.127442 8.920471 10.22461 10.23967 11.42048 12.04023 12.65245 13.26466
--------------------------------------
Summary from lm function:
Call:
lm(formula = Yt ~ m)
Residuals:
Min 1Q Median 3Q Max
-0.50999 -0.13967 -0.06466 0.15977 0.67953
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.439228 7.450424 1.401 0.2107
mgh -0.138384 0.066137 -2.092 0.0813 .
mkh 0.094766 0.008787 10.785 3.76e-05 ***
—
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.374 on 6 degrees of freedom
Multiple R-squared: 0.9814, Adjusted R-squared: 0.9752
F-statistic: 158 on 2 and 6 DF, p-value: 6.47e-06