SHARE
TWEET

SSC survey: oblivion SEM

a guest Jul 1st, 2016 202 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. http://slatestarcodex.com/2016/06/28/survey-results-suffering-vs-oblivion/
  2. https://docs.google.com/forms/d/1FTfQr3D8PMkgGztga9d_NuImyNxWEGD1BEjGKU1QVwc/edit
  3. http://slatestarcodex.com/blog_images/oblivionsurvey.csv
  4.  
  5. <blockquote>Second, answers to all questions would correlate along a general factor of oblivion-preference versus suffering-preference. That is, people who would prefer oblivion to working at McDonalds would also be more likely to prefer a short life of happiness to a long life of unhappiness, et cetera.
  6.  
  7. ...Third, this factor would predict whether somebody endorsed a form of population ethics which promotes creating new people (question 3 is sort of just asking this already, but I also included a more direct question along those lines). ["Question 5. Creating new sentient beings is:"]
  8.  
  9. ...Fourth, this factor would predict some real-world consequences like whether people believed in a right to euthanasia and whether they were signed up for cryonics.
  10.  
  11. ...Fifth, happier people would be more likely to prefer suffering over oblivion, because they view life as generally excellent and so oblivion represents more of a sacrifice for them.</blockquote>
  12.  
  13. Trying to combine these hypotheses into a statistical model, I get something like this:
  14.  
  15. <code>
  16.     OBLIVION =~ 1+2+3+..+N
  17.     Newpeople ~ OBLIVION
  18.     Euthanasia ~ OBLIVION
  19.     Cryonics ~ OBLIVION
  20.     OBLIVION ~ Happiness
  21. </code>
  22.  
  23. I'll need to look closer at the survey to figure out which ones go into <tt>OBLIVION</tt> (obviously, not the new-people, euthanasia-rights, cryonics, or happiness variables!).
  24.  
  25. First, though, all the data needs to be downloaded and cleaned into ordered numbers we can feed into statistical models:
  26.  
  27. <code>
  28. ## $ wget http://slatestarcodex.com/blog_images/oblivionsurvey.csv
  29. ## $ dos2unix oblivionsurvey.csv
  30. ## $ cat oblivionsurvey.csv | iconv -c -tascii > foo.txt; mv foo.txt oblivionsurvey.csv # some joker put in Unicode crap
  31.  
  32. ## Data munging/cleanup:
  33. oblivion <- read.csv("oblivionsurvey.csv")
  34. colnames(oblivion)
  35. #  [1] "Would.you.rather..."
  36. #  [2] "How.strongly.do.you.feel.about.your.answer.to.the.above."
  37. #  [3] "Would.you.rather....1"
  38. #  [4] "How.strongly.do.you.feel.about.your.answer.to.the.above..1"
  39. #  [5] "Would.you.prefer..."
  40. #  [6] "How.strongly.do.you.feel.about.your.answer.to.the.above..2"
  41. #  [7] "Creating.new..happy.sentient.beings.is..."
  42. #  [8] "What.percent.certainty.of.going.to.Heaven.would.you.need.before.you.would.prefer.a.world.with.both.Heaven.and.Hell.to.a.world.where.death.ends.inevitably.in.oblivion."
  43. #  [9] "What.are.your.views.on.some.sort.of..right.to.suicide..for.unhappy.people..without..terminal.diseases."
  44. # [10] "What.are.your.views.on.a.right.to.euthanasia.for.people.with.terminal.diseases."
  45. # [11] "Do.you.think.you.might.ever.sign.up.for.cryonics."
  46. # [12] "In.general..do.you.think.of.yourself.as.a.happy.person."
  47. # [13] "Would.you.describe.your.moral.views.as.utilitarian.co"
  48. # [14] "Are.you.religious."
  49. ## Give more memorable names to each variable:
  50. colnames(oblivion) <- c("McDonalds", "McDonalds.strength", "Longlife", "Longlife.strength", "Repugnantconclusion", "Repugnantconclusion.strength", "Newpeople", "Heavenhell.p", "Right.suicide", "Right.euthanasia", "Cryonics", "Happiness", "Utilitarian", "Religious")
  51.  
  52. ## convert preference variable into something meaningful
  53. ## goddammit Yvain how many times do I need to tell you that free response is the devil? Maybe then half the data wouldn't be useless.
  54. ## ah fuck it, if people want their answers to matter, they can *give real numbers and stop being such precious special snowflakes*
  55. heaven <- gsub(">", "", gsub("%", "", as.character(oblivion$Heavenhell.p)))
  56. oblivion$Heavenhell.p <- as.numeric(gsub("[a-z,A-Z, \' ']", "", heaven))
  57. oblivion[!is.na(oblivion$Heavenhell.p) & oblivion$Heavenhell.p>100,]$Heavenhell.p <- 100
  58. oblivion[!is.na(oblivion$Heavenhell.p) & oblivion$Heavenhell.p<0,]$Heavenhell.p <- 0
  59.  
  60. ## convert non-answers to NAs
  61. oblivion[oblivion==""] <- NA
  62. oblivion[!is.na(oblivion$Newpeople) & oblivion$Newpeople=="I am not a consequentialist or otherwise don't want to answer this question",]$Newpeople <- NA
  63.  
  64. ## encode orderings, then convert to integers 1-4
  65. oblivion$Newpeople        <- as.integer(ordered(oblivion$Newpeople,        levels=c("Bad", "Morally neutral", "Generally good, but less good than improving the lives of existing beings by the same amount", "Exactly comparable to improving the lives of existing beings. Creating a life that experiences 100 utils is exactly as good as improving existing lives 100 utils.")))
  66. oblivion$Right.suicide    <- as.integer(ordered(oblivion$Right.suicide,    levels=c("Strongly against", "Slightly against", "Neutral", "Slightly in favor" , "Strongly in favor")))
  67. oblivion$Right.euthanasia <- as.integer(ordered(oblivion$Right.euthanasia, levels=c("Strongly against", "Slightly against", "Neutral", "Slightly in favor" , "Strongly in favor")))
  68. oblivion$Cryonics         <- as.integer(ordered(oblivion$Cryonics,         levels=c("Not at all interested", "Somewhat interested", "Yes, already signed up or very interested")))
  69. oblivion$Happiness        <- as.integer(ordered(oblivion$Happiness,        levels=c("No, very unhappy", "No, somewhat unhappy", "Average", "Yes, somewhat happy", "Yes, very happy")))
  70. oblivion$Utilitarian      <- as.integer(ordered(oblivion$Utilitarian,      levels=c("No", "It's complicated", "Yes")))
  71. oblivion$Religious        <- oblivion$Religious=="Yes"
  72.  
  73. ## OK, now how do we deal with the bizarre set of questions "McDonalds", "McDonalds.strength", "Longlife", "Longlife.strength", "Repugnantconclusion", "Repugnantconclusion.strength"?
  74. ## Even though they amount to just a scale 1-6, they're split across two questions each with reversals! ;_;
  75. ## what we do is we define one response to the first question as +1, the other response as -1, and then convert the second question to an ordered factor 1/2/3
  76. ## then we simply multiply and now we have a scale ranked -3/-2/-1/0/1/2/3! Then we can recenter by adding 4. Tada!
  77. oblivion$McDonalds.strength <- ordered(oblivion$McDonalds.strength, levels=c("Ambivalent", "Somewhat strongly", "Very strongly"))
  78. oblivion$McDonalds <- ifelse(oblivion$McDonalds=="Die painlessly right now.", 1, -1) * as.integer(oblivion$McDonalds.strength) + 4
  79. oblivion$McDonalds.strength <- NULL
  80.  
  81. oblivion$Longlife.strength <- ordered(oblivion$Longlife.strength, levels=c("Ambivalent", "Somewhat strongly", "Very strongly"))
  82. oblivion$Longlife <- ifelse(oblivion$Longlife=="Live a short but happy life. You die ten years from now, in 2026, after being hit by a car. Until then, you do fulfilling work, have happy relationships, and meet with success in most projects.", 1, -1) * as.integer(oblivion$Longlife.strength) + 4
  83. oblivion$Longlife.strength <- NULL
  84.  
  85. oblivion$Repugnantconclusion.strength <- ordered(oblivion$Repugnantconclusion.strength, levels=c("Ambivalent", "Somewhat strongly", "Very strongly"))
  86. oblivion$Repugnantconclusion <- ifelse(oblivion$Repugnantconclusion=="A world with 1 million sentient beings, all of whom are happy and consider their world a utopia.", 1, -1) * as.integer(oblivion$Repugnantconclusion.strength) + 4
  87. oblivion$Repugnantconclusion.strength <- NULL
  88.  
  89. summary(oblivion)
  90. #    McDonalds         Longlife        Repugnantconclusion   Newpeople         Heavenhell.p       Right.suicide      Right.euthanasia      Cryonics         Happiness
  91. #  Min.   :1.0000   Min.   :1.000000   Min.   :1.000000    Min.   :1.000000   Min.   :  0.00000   Min.   :1.000000   Min.   :1.000000   Min.   :1.00000   Min.   :1.000000
  92. #  1st Qu.:2.0000   1st Qu.:3.000000   1st Qu.:6.000000    1st Qu.:3.000000   1st Qu.: 60.00000   1st Qu.:3.000000   1st Qu.:5.000000   1st Qu.:1.00000   1st Qu.:2.000000
  93. #  Median :5.0000   Median :6.000000   Median :6.000000    Median :3.000000   Median : 98.00000   Median :4.000000   Median :5.000000   Median :2.00000   Median :4.000000
  94. #  Mean   :4.3663   Mean   :4.959707   Mean   :5.954128    Mean   :2.912664   Mean   : 77.37208   Mean   :3.693859   Mean   :4.589204   Mean   :1.80831   Mean   :3.382002
  95. #  3rd Qu.:6.0000   3rd Qu.:6.000000   3rd Qu.:7.000000    3rd Qu.:3.000000   3rd Qu.:100.00000   3rd Qu.:5.000000   3rd Qu.:5.000000   3rd Qu.:2.00000   3rd Qu.:4.000000
  96. #  Max.   :7.0000   Max.   :7.000000   Max.   :7.000000    Max.   :4.000000   Max.   :100.00000   Max.   :5.000000   Max.   :5.000000   Max.   :3.00000   Max.   :5.000000
  97. #  NA's   :2        NA's   :2          NA's   :4           NA's   :178        NA's   :223         NA's   :3          NA's   :1          NA's   :35        NA's   :5
  98. #   Utilitarian       Religious
  99. #  Min.   :1.000000   Mode :logical
  100. #  1st Qu.:2.000000   FALSE:848
  101. #  Median :2.000000   TRUE :134
  102. #  Mean   :2.254596   NA's :112
  103. #  3rd Qu.:3.000000
  104. #  Max.   :3.000000
  105. #  NA's   :6
  106. cor.plot(lowerCor(oblivion, use="pairwise.complete.obs"),numbers=TRUE)
  107. #                     McDnl Lnglf Rpgnn Nwppl Hvnh. Rght.s Rght.t Crync Hppns Utltr Relgs
  108. # McDonalds            1.00
  109. # Longlife             0.34  1.00
  110. # Repugnantconclusion  0.22  0.21  1.00
  111. # Newpeople           -0.05  0.01 -0.26  1.00
  112. # Heavenhell.p         0.23  0.15  0.05  0.01  1.00
  113. # Right.suicide        0.17  0.11  0.06 -0.05  0.19  1.00
  114. # Right.euthanasia     0.22  0.12  0.14  0.02  0.30  0.58   1.00
  115. # Cryonics            -0.11 -0.23 -0.06  0.09 -0.04  0.19   0.17   1.00
  116. # Happiness           -0.21  0.07 -0.07  0.09 -0.06 -0.07  -0.07   0.03  1.00
  117. # Utilitarian          0.04  0.00 -0.04  0.17  0.17  0.22   0.34   0.26  0.02  1.00
  118. # Religious           -0.07  0.05  0.01  0.05 -0.25 -0.35  -0.51  -0.21  0.08 -0.27  1.00
  119. #
  120. #  https://i.imgur.com/uEdMeIP.png
  121.  
  122. ## data munging & cleanup finished!
  123. write.csv(oblivion, file="2016-06-30-oblivionsurvey-clean.csv", row.names=FALSE)
  124. ## https://www.dropbox.com/s/xykunut6clb5f66/2016-06-30-oblivionsurvey-clean.csv
  125. </code>
  126.  
  127. <code>
  128. ## Analysis
  129. oblivion <- read.csv("2016-06-30-oblivionsurvey-clean.csv")
  130. library(lavaan)
  131. model1 <- '
  132.     # second hypothesis: general factor of intrinsic life-preference
  133.     OBLIVION =~ McDonalds + Longlife + Repugnantconclusion + Heavenhell.p + Right.suicide
  134.  
  135.     # regressions:
  136.     # third hypothesis:
  137.     Newpeople ~ OBLIVION
  138.     # fourth hypothesis:
  139.     Right.euthanasia ~ OBLIVION
  140.     Cryonics ~ OBLIVION
  141.     # fifth hypothesis
  142.     OBLIVION ~ Happiness
  143.  
  144.     # I add this one because I am sure it is true:
  145.     Right.euthanasia ~~ Right.suicide
  146.     '
  147. s1 <- sem(model1, se="boot", missing="FIML", data=oblivion); summary(s1)
  148. # lavaan (0.5-20) converged normally after  57 iterations
  149. #
  150. #                                                   Used       Total
  151. #   Number of observations                          1093        1094
  152. #
  153. #   Number of missing patterns                        17
  154. #
  155. #   Estimator                                         ML
  156. #   Minimum Function Test Statistic              276.363
  157. #   Degrees of freedom                                23
  158. #   P-value (Chi-square)                           0.000
  159. #
  160. # Parameter Estimates:
  161. #
  162. #   Information                                 Observed
  163. #   Standard Errors                            Bootstrap
  164. #   Number of requested bootstrap draws             1000
  165. #   Number of successful bootstrap draws            1000
  166. #
  167. # Latent Variables:
  168. #                    Estimate  Std.Err  Z-value  P(>|z|)
  169. #   OBLIVION =~
  170. #     McDonalds         1.000
  171. #     Longlife          0.658    0.089    7.360    0.000
  172. #     Repugnntcnclsn    0.383    0.068    5.602    0.000
  173. #     Heavenhell.p      8.838    1.560    5.665    0.000
  174. #     Right.suicide     0.230    0.049    4.699    0.000
  175. #
  176. # Regressions:
  177. #                      Estimate  Std.Err  Z-value  P(>|z|)
  178. #   Newpeople
  179. #     OBLIVION           -0.065    0.031   -2.106    0.035
  180. #   Right.euthanasia ~
  181. #     OBLIVION            0.230    0.046    5.035    0.000
  182. #   Cryonics ~
  183. #     OBLIVION           -0.086    0.027   -3.140    0.002
  184. #   OBLIVION ~
  185. #     Happiness          -0.235    0.064   -3.685    0.000
  186. #
  187. # Covariances:
  188. #                       Estimate  Std.Err  Z-value  P(>|z|)
  189. #   Right.suicide ~~
  190. #     Right.euthanas       0.539    0.050   10.725    0.000
  191. #   Newpeople ~~
  192. #     Right.euthanas       0.052    0.021    2.480    0.013
  193. #     Cryonics             0.035    0.017    2.076    0.038
  194. #   Right.euthanasia ~~
  195. #     Cryonics             0.068    0.016    4.365    0.000
  196. #
  197. # Intercepts:
  198. #                    Estimate  Std.Err  Z-value  P(>|z|)
  199. #     McDonalds         5.160    0.225   22.890    0.000
  200. #     Longlife          5.481    0.120   45.512    0.000
  201. #     Repugnntcnclsn    6.257    0.083   75.543    0.000
  202. #     Heavenhell.p     84.501    2.122   39.824    0.000
  203. #     Right.suicide     3.876    0.064   60.115    0.000
  204. #     Newpeople         2.857    0.036   79.462    0.000
  205. #     Right.euthanas    4.772    0.050   95.928    0.000
  206. #     Cryonics          1.740    0.030   57.462    0.000
  207. #     OBLIVION          0.000
  208. #
  209. # Variances:
  210. #                    Estimate  Std.Err  Z-value  P(>|z|)
  211. #     McDonalds         2.153    0.253    8.519    0.000
  212. #     Longlife          2.731    0.174   15.695    0.000
  213. #     Repugnntcnclsn    1.893    0.122   15.561    0.000
  214. #     Heavenhell.p    937.099   60.805   15.412    0.000
  215. #     Right.suicide     1.587    0.064   24.815    0.000
  216. #     Newpeople         0.529    0.024   21.617    0.000
  217. #     Right.euthanas    0.655    0.055   11.959    0.000
  218. #     Cryonics          0.408    0.015   26.611    0.000
  219. #     OBLIVION          1.748    0.230    7.610    0.000
  220. fitMeasures(s1)
  221. #                npar                fmin               chisq                  df              pvalue      baseline.chisq         baseline.df     baseline.pvalue                 cfi
  222. #              29.000               0.126             276.363              23.000               0.000            1154.690              36.000               0.000               0.774
  223. #                 tli                nnfi                 rfi                 nfi                pnfi                 ifi                 rni                logl   unrestricted.logl
  224. #               0.646               0.646               0.625               0.761               0.486               0.776               0.774          -17328.166          -17189.985
  225. #                 aic                 bic              ntotal                bic2               rmsea      rmsea.ci.lower      rmsea.ci.upper        rmsea.pvalue                 rmr
  226. #           34714.332           34859.236            1093.000           34767.126               0.100               0.090               0.111               0.000               1.279
  227. #          rmr_nomean                srmr        srmr_bentler srmr_bentler_nomean         srmr_bollen  srmr_bollen_nomean          srmr_mplus   srmr_mplus_nomean               cn_05
  228. #               1.401               0.067               0.067               0.073               0.067               0.073               0.067               0.073             140.105
  229. #               cn_01                 gfi                agfi                pgfi                 mfi                ecvi
  230. #             165.678               0.997               0.993               0.425               0.891                  NA
  231. library(semPlot)
  232. semPaths(s1, "std", exoVar = FALSE, exoCov = FALSE, nCharNodes=15, layout="tree2", sizeMan=10, sizeMan2=10, residuals=FALSE, label.prop=1.5, edge.label.cex=0.9)
  233. ## https://i.imgur.com/pXbWrHL.png
  234. </code>
  235.  
  236. How do the predictions pan out?
  237.  
  238. 1. second hypothesis: As predicted, and we might've guessed from looking at the correlation table and noting the many moderate intercorrelations suggesting a few latent factors at work, the 5 questions seem to form a good 'oblivion' or 'quality of life' factor
  239. 2. third hypothesis: the OBLIVION factor does predict beliefs about how moral it is to create new people but it doesn't seem to explain <i>that</i> much of the variance: 1 higher unit of OBLIVION factor predicts less favorability by 0.065 units on the 1-4 scale which has a SD of 0.7.
  240. 3. fourth hypothesis: it definitely predicts euthanasia beliefs, almost 3x as much as creating-new-people; it also predicts cryonics but more along the lines of creating-new-people. Interestingly, the sign for that is the opposite of what I would've predicted.
  241. 4. fifth hypothesis: happy people definitely have lower OBLIVION scores.
  242.  
  243. (The means are generally fairly intermediate, so the first hypothesis could be considered correct as well.)
  244. Overall, all the hypotheses look vindicated by the SEM/confirmatory factor analysis.
  245.  
  246. I actually didn't read the rest of the post because I read the listed hypotheses and went 'a well-defined theoretical model relating survey responses to a latent factor which maps perfectly onto a SEM! <i>I've been training all my life for this moment!</i>' and I started work. (The data cleaning took... a long time.)
  247. So let's see. "The second hypothesis was weakly confirmed"; I disagree, I think it was stronger but I used a different set of variables to construct my OBLIVION factor. With Likert scales like this, with only a handful of questions per latent factor (at most), there is going to be a lot of random noise, there is going to be a lot of measurement error, there's going to be noise due to minor details like wording and people preferring more or less extreme responses, and even constructs which are strongly related will yield relatively small raw correlations. If you tried to measure IQ with less than 14 multiple-choice questions, you would not get a very good measurement of intelligence (maybe <i>r</i>=0.5 at best), and similarly here - you're not going to get a good measure of any ethical factor without asking many overlapping questions/hypotheticals to overcome those issues.
  248. "The third hypothesis was not supported." This one was a small effect and since Yvain only looked at first-order correlations, they were naturally unimpressive and not statistically-significant.
  249. "The fourth and fifth hypotheses were weakly supported." more than weakly, again, probably masked by not using a latent variable.
  250.  
  251. I think that some of it is a little off, though, and the OBLIVION factor is being underestimated. In particular, I would absolutely expected <tt>Right.euthanasia</tt> and <tt>Right.suicide</tt> to also load on OBLIVION. What does an exploratory factor analysis or clustering say?
  252.  
  253. One clustering algorithm:
  254.  
  255. <code>
  256. iclust(oblivion)
  257. # ...
  258. # Cluster size:
  259. # C6 C9
  260. #  6  5
  261. #
  262. # Item by Cluster Structure matrix:
  263. #                      O  P    C6    C9
  264. # McDonalds           C9 C9  0.20 -0.56
  265. # Longlife            C9 C9  0.03 -0.36
  266. # Repugnantconclusion C9 C9  0.04 -0.48
  267. # Newpeople           C9 C9  0.06  0.27
  268. # Heavenhell.p        C9 C6  0.33 -0.26
  269. # Right.suicide       C6 C6  0.61 -0.24
  270. # Right.euthanasia    C6 C6  0.78 -0.28
  271. # Cryonics            C6 C6  0.31  0.28
  272. # Happiness           C9 C9 -0.07  0.20
  273. # Utilitarian         C6 C6  0.47  0.10
  274. # Religious           C6 C6 -0.61  0.07
  275. #
  276. # With eigenvalues of:
  277. #  C6  C9
  278. # 1.8 1.1
  279. #
  280. # Purified scale intercorrelations
  281. #  reliabilities on diagonal
  282. #  correlations corrected for attenuation above diagonal:
  283. #       C6    C9
  284. # C6  0.68 -0.15
  285. # C9 -0.08  0.44
  286. #
  287. # Cluster fit =  0.48   Pattern fit =  0.97  RMSR =  0.06
  288. #
  289. # https://i.imgur.com/zrr6I9T.png
  290. </code>
  291.  
  292. Hm... Complicated, not particular interpretable. The suicide/euthanasia seems to be tapping into a religion-related variable of some sort. Moving onto factor analysis:
  293.  
  294. <code>
  295. library(psych)
  296. nfactors(oblivion)
  297. # VSS complexity 1 achieves a maximimum of 0.61  with  7  factors
  298. # VSS complexity 2 achieves a maximimum of 0.73  with  7  factors
  299. # The Velicer MAP achieves a minimum of 0.03  with  1  factors
  300. # Empirical BIC achieves a minimum of  -29.25  with  4  factors
  301. # Sample Size adjusted BIC achieves a minimum of  -0.57  with  6  factors
  302. #
  303. # Statistics by number of factors
  304. #    vss1 vss2   map dof   chisq     prob sqresid  fit RMSEA   BIC  SABIC complex  eChisq    SRMR eCRMS  eBIC
  305. # 1  0.39 0.00 0.025  44 6.6e+02 1.6e-111     9.2 0.39 0.114 355.4 495.18     1.0 1.3e+03 1.0e-01 0.115 955.8
  306. # 2  0.48 0.56 0.030  34 2.9e+02  1.2e-42     6.6 0.56 0.083  53.5 161.48     1.3 3.7e+02 5.6e-02 0.071 136.2
  307. # 3  0.53 0.63 0.044  25 1.6e+02  4.3e-22     5.3 0.65 0.071 -12.6  66.80     1.5 1.7e+02 3.8e-02 0.056  -2.5
  308. # 4  0.55 0.67 0.069  17 9.4e+01  1.3e-12     4.6 0.70 0.065 -25.2  28.77     1.5 9.0e+01 2.7e-02 0.049 -29.2
  309. # 5  0.54 0.65 0.096  10 7.1e+01  2.3e-11     4.6 0.70 0.075   1.5  33.23     1.7 7.2e+01 2.4e-02 0.057   1.9
  310. # 6  0.50 0.69 0.132   4 1.5e+01  5.3e-03     3.5 0.77 0.050 -13.3  -0.57     1.7 1.2e+01 9.9e-03 0.037 -16.1
  311. # 7  0.61 0.73 0.202  -1 8.2e-01       NA     2.9 0.81    NA    NA     NA     1.6 4.5e-01 1.9e-03    NA    NA
  312. # 8  0.48 0.63 0.297  -5 4.7e-06       NA     3.0 0.80    NA    NA     NA     1.6 4.8e-06 6.3e-06    NA    NA
  313. # 9  0.47 0.60 0.474  -8 4.4e-10       NA     2.9 0.80    NA    NA     NA     1.7 3.4e-10 5.3e-08    NA    NA
  314. # 10 0.48 0.62 1.000 -10 3.8e-12       NA     2.6 0.83    NA    NA     NA     1.8 3.3e-12 5.2e-09    NA    NA
  315. # 11 0.52 0.66    NA -11 0.0e+00       NA     2.1 0.86    NA    NA     NA     1.5 1.2e-25 9.9e-16    NA    NA
  316. #
  317. # https://imgur.com/NSyDnDj
  318. fa(oblivion, nfactors=4)
  319. # Factor Analysis using method =  minres
  320. # Call: fa(r = oblivion, nfactors = 4)
  321. # Standardized loadings (pattern matrix) based upon correlation matrix
  322. #                       MR1   MR2   MR3   MR4   h2   u2 com
  323. # McDonalds            0.05  0.02  0.13  0.63 0.50 0.50 1.1
  324. # Longlife             0.02  0.00  0.78  0.03 0.64 0.36 1.0
  325. # Repugnantconclusion  0.05 -0.27  0.19  0.15 0.17 0.83 2.5
  326. # Newpeople            0.00  0.91  0.01  0.01 0.83 0.17 1.0
  327. # Heavenhell.p         0.28  0.03  0.07  0.19 0.16 0.84 1.9
  328. # Right.suicide        0.65 -0.06  0.05  0.00 0.43 0.57 1.0
  329. # Right.euthanasia     0.85  0.02  0.05  0.03 0.75 0.25 1.0
  330. # Cryonics             0.32  0.09 -0.26 -0.14 0.19 0.81 2.5
  331. # Happiness            0.02  0.03  0.29 -0.47 0.19 0.81 1.7
  332. # Utilitarian          0.43  0.18 -0.05 -0.06 0.21 0.79 1.4
  333. # Religious           -0.61  0.06  0.14  0.01 0.38 0.62 1.1
  334. #
  335. #                        MR1  MR2  MR3  MR4
  336. # SS loadings           1.90 0.96 0.87 0.74
  337. # Proportion Var        0.17 0.09 0.08 0.07
  338. # Cumulative Var        0.17 0.26 0.34 0.41
  339. # Proportion Explained  0.43 0.21 0.19 0.17
  340. # Cumulative Proportion 0.43 0.64 0.83 1.00
  341. #
  342. #  With factor correlations of
  343. #      MR1   MR2  MR3   MR4
  344. # MR1 1.00  0.01 0.08  0.25
  345. # MR2 0.01  1.00 0.01 -0.14
  346. # MR3 0.08  0.01 1.00  0.40
  347. # MR4 0.25 -0.14 0.40  1.00
  348. #
  349. # Mean item complexity =  1.5
  350. # Test of the hypothesis that 4 factors are sufficient.
  351. #
  352. # The degrees of freedom for the null model are  55  and the objective function was  1.7 with Chi Square of  1845.26
  353. # The degrees of freedom for the model are 17  and the objective function was  0.09
  354. #
  355. # The root mean square of the residuals (RMSR) is  0.03
  356. # The df corrected root mean square of the residuals is  0.05
  357. #
  358. # The harmonic number of observations is  988 with the empirical chi square  79.58  with prob <  4.6e-10
  359. # The total number of observations was  1094  with MLE Chi Square =  93.74  with prob <  1.3e-12
  360. #
  361. # Tucker Lewis Index of factoring reliability =  0.861
  362. # RMSEA index =  0.065  and the 90 % confidence intervals are  0.052 0.077
  363. # BIC =  -25.22
  364. # Fit based upon off diagonal values = 0.98
  365. # Measures of factor score adequacy
  366. #                                                 MR1  MR2  MR3  MR4
  367. # Correlation of scores with factors             0.91 0.91 0.83 0.77
  368. # Multiple R square of scores with factors       0.83 0.83 0.68 0.59
  369. # Minimum correlation of possible factor scores  0.65 0.66 0.37 0.17
  370. fa.diagram(fa(oblivion, nfactors=4))
  371. # https://imgur.com/9EtL2d2
  372. </code>
  373.  
  374. The factor analysis suggests 4 factors, which turn out to be:
  375.  
  376. 1. MR1 loads on <tt>Heavenhell.p</tt>, <tt>Right.suicide</tt>, <tt>Right.euthanasia</tt>, <tt>Cryonics</tt>, <tt>Utilitarian</tt>, anti-<tt>Religious</tt>
  377. 2. MR2 loads on anti-<tt>Repugnantconclusion</tt>, <tt>Newpeople</tt>, <tt>Utilitarian</tt>
  378. 3. MR3 loads on <tt>McDonalds</tt>, <tt>Longlife</tt>, <tt>Repugnantconclusion</tt>, anti-<tt>Cryonics</tt>, <tt>Happiness</tt>, <tt>Religious</tt>
  379. 4. MR4 loads on <tt>McDonalds</tt>, <tt>Repugnantconclusion</tt>, <tt>Heavenhell.p</tt>, anti-<tt>Cryonics</tt>, anti-<tt>Happiness</tt>
  380.  
  381. MR1 looks like utilitarians with high standards for life: hopeful for the future, not expecting an afterlife but if there is one they would only be happy about it if they had a really good chance for heaven.
  382. MR2 looks like utilitarians who bite the bullet on the Repugnant Conclusion and the general question of making more people: it's good to create lots of low-quality lives.
  383. MR3 looks like people in general who have high standards for life being worth living and don't feel the need to prolong it: they would prefer to die in the McDonalds, live a short but glorious life, are happy, don't feel any need for cryonics, and are a bit religious.
  384. MR4 is weird. It's mostly like MR3, except they really would prefer to the die in the McDonalds, and they are very unhappy.
  385.  
  386. Playing with <tt>omega()</tt> to visualize other factorizations, the factorization I find most preferable is a 2-factor solution, which yields an immediately interpretable OBLIVION and a sort of religion factor:
  387.  
  388. <code>
  389. fa(oblivion, nfactors=2)
  390. # Factor Analysis using method =  minres
  391. # Call: fa(r = oblivion, nfactors = 2)
  392. # Standardized loadings (pattern matrix) based upon correlation matrix
  393. #                       MR1   MR2    h2   u2 com
  394. # McDonalds            0.16  0.54 0.340 0.66 1.2
  395. # Longlife             0.02  0.54 0.299 0.70 1.0
  396. # Repugnantconclusion  0.05  0.37 0.146 0.85 1.0
  397. # Newpeople            0.05 -0.17 0.030 0.97 1.1
  398. # Heavenhell.p         0.31  0.20 0.157 0.84 1.7
  399. # Right.suicide        0.64  0.05 0.426 0.57 1.0
  400. # Right.euthanasia     0.86  0.07 0.759 0.24 1.0
  401. # Cryonics             0.32 -0.41 0.232 0.77 1.9
  402. # Happiness           -0.07 -0.13 0.024 0.98 1.5
  403. # Utilitarian          0.44 -0.18 0.204 0.80 1.3
  404. # Religious           -0.61  0.14 0.369 0.63 1.1
  405. #
  406. #                        MR1  MR2
  407. # SS loadings           1.95 1.04
  408. # Proportion Var        0.18 0.09
  409. # Cumulative Var        0.18 0.27
  410. # Proportion Explained  0.65 0.35
  411. # Cumulative Proportion 0.65 1.00
  412. #
  413. #  With factor correlations of
  414. #      MR1  MR2
  415. # MR1 1.00 0.14
  416. # MR2 0.14 1.00
  417. #
  418. # Mean item complexity =  1.3
  419. # Test of the hypothesis that 2 factors are sufficient.
  420. #
  421. # The degrees of freedom for the null model are  55  and the objective function was  1.7 with Chi Square of  1845.26
  422. # The degrees of freedom for the model are 34  and the objective function was  0.27
  423. #
  424. # The root mean square of the residuals (RMSR) is  0.06
  425. # The df corrected root mean square of the residuals is  0.07
  426. #
  427. # The harmonic number of observations is  988 with the empirical chi square  329.03  with prob <  5.4e-50
  428. # The total number of observations was  1094  with MLE Chi Square =  291.41  with prob <  1.2e-42
  429. #
  430. # Tucker Lewis Index of factoring reliability =  0.767
  431. # RMSEA index =  0.083  and the 90 % confidence intervals are  0.075 0.092
  432. # BIC =  53.49
  433. # Fit based upon off diagonal values = 0.92
  434. # Measures of factor score adequacy
  435. #                                                 MR1  MR2
  436. # Correlation of scores with factors             0.91 0.77
  437. # Multiple R square of scores with factors       0.83 0.59
  438. # Minimum correlation of possible factor scores  0.66 0.19
  439. # fa.diagram(fa(oblivion, nfactors=2))
  440. # https://imgur.com/2iLgCbF
  441. </code>
  442.  
  443. You see what I mean:
  444.  
  445. 1. MR1 loads primarily on <tt>Heavenhell.p</tt>, <tt>Right.suicide</tt>, <tt>Right.euthanasia</tt>, <tt>Cryonics</tt>, <tt>Utilitarian</tt>, <tt>anti-Religious</tt>
  446. 2. MR2 loads primarily on <tt>McDonalds</tt>, <tt>Longlife</tt>, <tt>Repugnantconclusion</tt>, anti-<tt>Newpeople</tt>, <tt>Heavenhell.p</tt>, <tt>Right.suicide</tt>, <tt>Right.euthanasia</tt>, anti-<tt>Cryonics</tt>
  447.  
  448. One factor expresses general utilitarian/anti-Catholicism moral beliefs; the other looks like the OBLIVION factor.
  449.  
  450. When Yvain says
  451.  
  452. <blockquote>So it looks like people have very different opinions about when to choose death versus suffering, but that these opinions are inconsistent and only weakly driven by broad cross-situation intuitions.</blockquote>
  453.  
  454. I would interpret it more as there are two cross-cutting concerns people have: whether to be utilitarian, or whether to desire a high quality of life.
  455.  
  456. What if we take those MR1/MR2, add in the <tt>Happiness</tt> regression (since happiness turned out to generally be unrelated to most factors), and compare this bifactor model to Yvain's single-factor model w/regressions?
  457. Regular frequentist model fits aren't too helpful but we can switch to blavaan and get a Bayes factor to choose between the two competing models (although note that doesn't guarantee that either one is a <i>good</i> model, the BF just tells us which of the two is better than the other):
  458.  
  459. <code>
  460. model2 <- '
  461.     # MR2
  462.     OBLIVION =~ McDonalds + Longlife + Repugnantconclusion + Newpeople + Heavenhell.p + Right.suicide + Right.euthanasia + Cryonics
  463.     # MR1
  464.     RELIGION =~ Heavenhell.p +  Right.suicide + Right.euthanasia + Cryonics + Utilitarian + Religious
  465.     # regressions: only missing variable is Happiness now
  466.     # fifth hypothesis
  467.     OBLIVION ~ Happiness
  468.  
  469.     # I add this one because I am sure it is true:
  470.     Right.euthanasia ~~ Right.suicide
  471.     '
  472. s2 <- sem(model2, se="boot", missing="FIML", data=oblivion); summary(s2)
  473. # lavaan (0.5-20) converged normally after 129 iterations
  474. #
  475. #                                                   Used       Total
  476. #   Number of observations                          1093        1094
  477. #
  478. #   Number of missing patterns                        22
  479. #
  480. #   Estimator                                         ML
  481. #   Minimum Function Test Statistic              254.476
  482. #   Degrees of freedom                                39
  483. #   P-value (Chi-square)                           0.000
  484. #
  485. # Parameter Estimates:
  486. #
  487. #   Information                                 Observed
  488. #   Standard Errors                            Bootstrap
  489. #   Number of requested bootstrap draws             1000
  490. #   Number of successful bootstrap draws            1000
  491. #
  492. # Latent Variables:
  493. #                    Estimate  Std.Err  Z-value  P(>|z|)
  494. #   OBLIVION =~
  495. #     McDonalds         1.000
  496. #     Longlife          0.777    0.109    7.131    0.000
  497. #     Repugnntcnclsn    0.431    0.070    6.128    0.000
  498. #     Newpeople        -0.080    0.032   -2.475    0.013
  499. #     Heavenhell.p      7.913    1.349    5.866    0.000
  500. #     Right.suicide     0.209    0.041    5.090    0.000
  501. #     Right.euthanas    0.202    0.033    6.212    0.000
  502. #     Cryonics         -0.145    0.031   -4.692    0.000
  503. #   RELIGION =~
  504. #     Heavenhell.p      1.000
  505. #     Right.suicide     0.065    0.012    5.309    0.000
  506. #     Right.euthanas    0.061    0.011    5.756    0.000
  507. #     Cryonics          0.023    0.004    5.177    0.000
  508. #     Utilitarian       0.034    0.006    5.532    0.000
  509. #     Religious        -0.022    0.004   -6.112    0.000
  510. #
  511. # Regressions:
  512. #                    Estimate  Std.Err  Z-value  P(>|z|)
  513. #   OBLIVION ~
  514. #     Happiness        -0.191    0.065   -2.936    0.003
  515. #
  516. # Covariances:
  517. #                    Estimate  Std.Err  Z-value  P(>|z|)
  518. #   Right.suicide ~~
  519. #     Right.euthanas    0.156    0.043    3.655    0.000
  520. #
  521. # Intercepts:
  522. #                    Estimate  Std.Err  Z-value  P(>|z|)
  523. #     McDonalds         5.013    0.235   21.371    0.000
  524. #     Longlife          5.462    0.145   37.724    0.000
  525. #     Repugnntcnclsn    6.232    0.093   67.081    0.000
  526. #     Newpeople         2.864    0.037   77.396    0.000
  527. #     Heavenhell.p     82.335    1.985   41.486    0.000
  528. #     Right.suicide     3.829    0.062   61.548    0.000
  529. #     Right.euthanas    4.720    0.045  103.968    0.000
  530. #     Cryonics          1.713    0.034   50.646    0.000
  531. #     Utilitarian       2.255    0.023   98.452    0.000
  532. #     Religious         0.141    0.011   13.159    0.000
  533. #     OBLIVION          0.000
  534. #     RELIGION          0.000
  535. #
  536. # Variances:
  537. #                    Estimate  Std.Err  Z-value  P(>|z|)
  538. #     McDonalds         2.385    0.243    9.829    0.000
  539. #     Longlife          2.560    0.178   14.410    0.000
  540. #     Repugnntcnclsn    1.864    0.124   15.033    0.000
  541. #     Newpeople         0.526    0.025   21.055    0.000
  542. #     Heavenhell.p    873.774   58.484   14.940    0.000
  543. #     Right.suicide     1.149    0.072   15.856    0.000
  544. #     Right.euthanas    0.286    0.032    8.846    0.000
  545. #     Cryonics          0.332    0.018   18.028    0.000
  546. #     Utilitarian       0.432    0.020   21.729    0.000
  547. #     Religious         0.065    0.007    9.978    0.000
  548. #     OBLIVION          1.539    0.220    6.987    0.000
  549. #     RELIGION        109.621   34.045    3.220    0.001
  550. library(semPlot)
  551. semPaths(s2, "std", exoVar = FALSE, exoCov = FALSE, nCharNodes=15, layout="tree2", sizeMan=10, sizeMan2=10, residuals=FALSE, label.prop=1.5, edge.label.cex=0.9)
  552. anova(s1, s2)
  553. # Chi Square Difference Test
  554. #
  555. #    Df       AIC       BIC     Chisq Chisq diff Df diff Pr(>Chisq)
  556. # s1 23 34714.332 34859.236 276.36294
  557. # s2 39                     254.47648 -21.886466      16          1
  558.  
  559. library(blavaan)
  560. ## need to standardize/rescale to avoid a blavaan bug: https://groups.google.com/d/msg/blavaan/sJxNA78VC0Y/4hdFUi3fAgAJ
  561. b1 <- bsem(model1, n.chains=6, jagcontrol=list(method="rjparallel"), fixed.x=FALSE, data=scale(oblivion))
  562. b2 <- bsem(model2, n.chains=6, jagcontrol=list(method="rjparallel"), fixed.x=FALSE, data=scale(oblivion))
  563. BF(b1, b2)
  564. # Laplace approximation to the log-Bayes factor (experimental):
  565. #  2231.391
  566. </code>
  567.  
  568. So the chi-squared looks better for the bi-factor model and the log BF indicates <i>much</i> stronger evidence for the second model.
  569.  
  570. If one were going to extend this line of inquiry further, I think it would be particularly valuable to ask about what <i>kind</i> of religion (Christian, especially Catholic), age, how many kids one has, and add in more variants of the existing population-dilemmas as well as some others existence-related questions like abortion or the morality of having more than 2 kids.
  571. And eliminate the free-response fields.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top