Saya telah mengikuti vektor X dan Y sederhana:
> X
[1] 1.000 0.063 0.031 0.012 0.005 0.000
> Y
[1] 1.000 1.000 1.000 0.961 0.884 0.000
>
> plot(X,Y)
Saya ingin melakukan regresi menggunakan log X. Untuk menghindari log (0), saya mencoba untuk memberi +1 atau +0.1 atau +0.00001 atau +0.000000000000001:
> summary(lm(Y~log(X)))
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in 'x'
> summary(lm(Y~log(1+X)))
Call:
lm(formula = Y ~ log(1 + X))
Residuals:
1 2 3 4 5 6
-0.03429 0.22189 0.23428 0.20282 0.12864 -0.75334
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.7533 0.1976 3.812 0.0189 *
log(1 + X) 0.4053 0.6949 0.583 0.5910
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4273 on 4 degrees of freedom
Multiple R-squared: 0.07838, Adjusted R-squared: -0.152
F-statistic: 0.3402 on 1 and 4 DF, p-value: 0.591
> summary(lm(Y~log(0.1+X)))
Call:
lm(formula = Y ~ log(0.1 + X))
Residuals:
1 2 3 4 5 6
-0.08099 0.20207 0.23447 0.21870 0.15126 -0.72550
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.0669 0.3941 2.707 0.0537 .
log(0.1 + X) 0.1482 0.2030 0.730 0.5058
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4182 on 4 degrees of freedom
Multiple R-squared: 0.1176, Adjusted R-squared: -0.103
F-statistic: 0.5331 on 1 and 4 DF, p-value: 0.5058
> summary(lm(Y~log(0.00001+X)))
Call:
lm(formula = Y ~ log(1e-05 + X))
Residuals:
1 2 3 4 5 6
-0.24072 0.02087 0.08796 0.13872 0.14445 -0.15128
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.24072 0.12046 10.300 0.000501 ***
log(1e-05 + X) 0.09463 0.02087 4.534 0.010547 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1797 on 4 degrees of freedom
Multiple R-squared: 0.8371, Adjusted R-squared: 0.7964
F-statistic: 20.56 on 1 and 4 DF, p-value: 0.01055
>
> summary(lm(Y~log(0.000000000000001+X)))
Call:
lm(formula = Y ~ log(1e-15 + X))
Residuals:
1 2 3 4 5 6
-0.065506 0.019244 0.040983 0.031077 -0.019085 -0.006714
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.06551 0.02202 48.38 1.09e-06 ***
log(1e-15 + X) 0.03066 0.00152 20.17 3.57e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.04392 on 4 degrees of freedom
Multiple R-squared: 0.9903, Adjusted R-squared: 0.9878
F-statistic: 406.9 on 1 and 4 DF, p-value: 3.565e-05
Outputnya berbeda dalam semua kasus. Apa nilai yang benar untuk menghindari log (0) dalam regresi? Apa metode yang tepat untuk situasi seperti itu.
Sunting: tujuan utama saya adalah untuk meningkatkan prediksi model regresi dengan menambahkan istilah log, yaitu: lm (Y ~ X + log (X))
r
regression
lognormal
juga
sumber
sumber
Jawaban:
Semakin kecil konstanta yang Anda tambahkan semakin besar outlier adalah bahwa Anda akan membuat:
Jadi sulit untuk membenarkan konstanta di sini. Anda dapat mempertimbangkan transformasi yang tidak memiliki masalah dengan 0s, misalnya polinomial urutan ketiga.
sumber
Mengapa Anda ingin memplot logaritma? Apa yang salah dengan memplot variabel seperti apa adanya?
Salah satu alasan untuk bekerja dengan log adalah ketika distribusi menghasilkan diasumsikan log-normal, misalnya.
Yang lain adalah bahwa angka-angka mewakili parameter skala atau digunakan secara multiplikasi, dalam hal ini ruang di mana mereka berada secara alami logaritmik (untuk alasan yang sama bahwa Jeffrey sebelum variabel skala adalah logaritmik).
Tak satu pun dari ini yang terjadi. Saya pikir jawaban yang tepat di sini adalah jangan lakukan itu. Pertama datang dengan model penghasil data, dan kemudian gunakan data Anda dengan cara yang konsisten dengan itu.
Mungkin satu-satunya hal yang akan Anda dapatkan dengan terus menambahkan fungsi input adalah model yang dilengkapi berlebihan. Jika Anda menginginkan model yang benar-benar valid, Anda perlu membuat tebakan yang baik dan memiliki cukup data untuk mempelajari suatu model. Semakin banyak tebakan yang Anda buat, semakin banyak parameter yang Anda miliki, semakin banyak data yang Anda butuhkan.
sumber
Sulit untuk mengatakan dengan begitu sedikit perincian tentang data Anda dan hanya enam pengamatan, tetapi mungkin masalah Anda terletak pada variabel Y Anda (dibatasi antara nol dan satu) dan bukan pada X Anda. Lihatlah pendekatan berikut ini menggunakan dua parameter fungsi log-logistik dari paket drc :
sumber
Melihat plot y vs x, bentuk fungsional tampaknya y = 1 - exp (-alpha x), dengan alfa yang sangat tinggi. Ini dekat dengan tetapi tidak cukup fungsi langkah dan Anda akan membutuhkan sejumlah besar polinomial agar sesuai dengan data ini (pikirkan dalam hal exp (x) = 1 + x + x ^ 2/2! +. + X ^ n / n! + ...). Menyusun ulang istilah, kita mendapatkan exp (-alpha x) = 1-y. Jika Anda mengambil log sekarang, ini memberikan -alpha x = log (1-y). Anda bisa mendefinisikan variabel baru z = log (1-y) dan mencoba menemukan alpha yang paling cocok dengan data. Anda masih memiliki masalah tentang bagaimana menangani y = 1. Saya tidak tahu konteks masalah Anda, tetapi kesan saya adalah bahwa Anda harus berpikir tentang Anda mendekati 1 secara asimptot sebagai x mendekati 1 dan tetapi Anda tidak pernah benar-benar mencapai 1.
Memikirkan hal ini lagi, saya ingin tahu apakah data sebenarnya dari distribusi Weibull y = 1 - exp (-alpha x ^ beta). Menyusun ulang istilah, kita mendapatkan beta log (x) = log (-log (1-y)) - log (alpha) dan kita bisa menggunakan OLS untuk mendapatkan alpha dan beta. Masalah penanganan y = 1 tetap ada.
sumber